처음 PUT, PATCH, DELETE를 구현하려고 했을때 아무런 감도 오지 않았다.
그런데 코드를 짜면서 조금 알것같아서!! 글로 남긴다. 그런데 개념이 틀렸으면..? 어쩌지;;
위 고민은 아래의 로직을 짜려고 했을 때 시작되었다.
삭제 & 수정하기 (westagram)
이제까지는 단순히 db에서 data를 읽거나, request.body에 담아서 db에 보내 생성(혹은 로그인과 같은 기능)만 했다면 이제 기존에 있던 정보를 수정하고, 특정 data를 삭제하는 기능을 알아보자!
작업중인 westagram을 기준으로 생각해보자.
좋아요를 누를수 있으면 취소도 가능해야 한다.
팔로우를 걸 수 있으면 언팔로우도 가능해야 한다.
이후엔 댓글과 대댓글, 게시글 역시 삭제 혹은 수정이 가능해야 한다.
이때는 Put, Patch, Delete라는 method가 따로 있어 이를 활용해야 하는 줄 알았다. 하지만 아무리 구글링을 해도 저런 method를 사용하는 코드가 안보였다.
공식 문서 에 서는 다음과 같이 설명되어 있다.
The DELETE method requests that the origin server delete the resource identified by the Request-URI. This method MAY be overridden by human intervention (or other means) on the origin server. The client cannot be guaranteed that the operation has been carried out, even if the status code returned from the origin server indicates that the action has been completed successfully. However, the server SHOULD NOT indicate success unless, at the time the response is given, it intends to delete the resource or move it to an inaccessible location.
이하 생략...
PUT
The PUT method requests that the enclosed entity be stored under the supplied Request-URI. If the Request-URI refers to an already existing resource, the enclosed entity SHOULD be considered as a modified version of the one residing on the origin server. If the Request-URI does not point to an existing resource, and that URI is capable of being defined as a new resource by the requesting user agent, the origin server can create the resource with that URI.
이하 생략...
PATCH
PATCH에 대해선 글이 없다..
위 문서에 따르면 DELETE를 통해 삭제가 가능하고 PUT을 통해 수정이 가능하다고 한다.
이때 PUT으로 존재하지 않는 URL에 request를 보낼 경우 POST methd와 같이 새로운 resource를 생산한다고 한다. 라고 하는데.. 직접 구현해 봐야 이해가 될것 같다! (수정은 update고, 생성은 create인데 update할 정보가 애초에 존재하지 않는다면 update 내용으로 작성된 instance를 생성하는 것 ?!) 또한 공식문서에는 나와있지 않지만 보다 RESTful하게 하기 위해 전체 수정때에는 PUT을, 부분 수정일때는 PATCH를 사용한다고 한다.
이와 관련된 내용에 대해서는 RESTful API에 관해 따로 포스팅을 올릴것!!
PUT
요청에 본문 존재: 예
성공 응답에 본문 존재: 아니오
안전함: 아니오
멱등성: 예
캐시 가능: 아니오
HTML 양식에서 사용 가능: 아니오
DELETE
요청에 본문 존재: 아니오
성공 응답에 본문 존재: 아니오
안전함: 아니오
멱등성 : 예
캐시 가능 아니오
HTML 양식에서 사용 가능 아니오
각 Method를 C.R.U.D와 관련하여 테이블 작성하기 전 REST란 무엇인가는 다음과 같다.
REST란 "Representational State Transfer” 의 약자로
어떤 자원에 대해 CRUD(Create, Read, Update, Delete) 연산을 수행하기 위해 URI(Resource) 로 요청을 보내는 것으로, Get, Post 등의 방식(Method) 을 사용하여 요청을 보내며, 요청을 위한 자원은 특정한 형태(Representation of Resource)로 표현된다.
Method | CRUD | 설명 |
---|---|---|
GET | Read | db에 저장된 정보읽어오기 |
POST | Create | db에 정보 새 정보 생성(저장)하기 |
PUT | Update | 해당 instance의 모든 field 값 수정하기 |
PATCH | Update | 해당 instance의 일부 field 값 수정하기 |
DELETE | Delete | 해당 instance 정보를 db에서 제거하기 |
즉, PUT과 PATCH는 Update를 의미하고 DELETE는 Delete를 의미한다는 것이다.!! (난,,, 또 다른 방식이 있는줄 알았다.. 역시 모르는게 죄...........아니야!!)
PUT일땐 새로운 정보를 모두 받아와야하고, PATCH일땐 받아온 정보만 새로 수정해주면 된다! 또한 내가 작성한 코드에서는 구현하지 않았지만 PUT의 결과 기존에 존재하지 않았던 정보라면 수정하려는 정보를 토대로 새로 create되게 한다고 공식문서에 적혀있다. (있는줄 알고 다르게 수정하려고 한건데 아예 없었으면 새로 만들어진다는? 언제 이 방식이 필요할지 아직은 감이 오지 않는다. 없으면 없는거지,,,🧐)
이제 이 개념을 토대로 westagram 로직 짜러,,, !