Back-End/Back-End 자료실

REST API: POST & PUT

Chipmunks 2018. 5. 8.
728x90

REST API: POST & PUT

idempotent

Post와 Put의 차이점은 idempotent 개념의 도입 여부다. idempotent 은 한글로 멱등법칙이다.



같은 연산을 반복해도 같은 값이 나온다는 뜻이다. 즉, 같은 값을 보장한다.


POST

POST는 클라이언트가 요청하는 메소드다. 리소스의 위치를 지정하지 않고 리소스를 생성하는 연산이다.

1
2
3
POST /members HTTP/1.1
{ name: "홍길동", age: 26, favorite: "사과" }
HTTP/1.1 201 Created
cs


POST 메소드를 실행하면 /members/1 에 리소스가 생긴다. 다시 실행하면 /members/2 , /members/3 순으로 각각 다른 곳에 새로운 리소스가 생성된다. 즉, 이 연산은 idempotent 에 만족하지 않는다.


PUT

PUT도 클라이언트가 요청하는 메소드다. 리소스의 위치를 지정한다. 그 위치에 리소스를 생성하거나 수정된다.

name이 홍길동인 리소스를 수정해보자. favorite 속성을 사과에서 바나나로 수정하는 요청이다.


1
2
PUT /members/1 HTTP/1.1
{ name: "홍길동", age: 26, favorite: "바나나" }
cs


POST와 달리 리소스의 위치를 지정해준다. 몇 번을 요청을 보내더라도 같은 결과를 보장한다. 즉, 이 연산은 idempotent 에 만족한다.


Response Code

201 Created : POST 또는 PUT 메소드가 리소스를 새로 생성할 경우. 응답 헤더의 Location 필드에 담는다.

200 OK, 204 No Content : 리소스를 생성할 때, URI 를 확인할 수 없는 경우 보내기도 한다.


202 Accepted : 서버가 비동기로 처리를 할 때, 요청은 인식했으나 응답은 보내주지 못할 경우 보낸다.


Safe Methods

리소스를 수정하지 않는 메소드를 Safe 하다고 한다. 그 예는 GET, HEAD, OPTIONS 등이다. idempotent를 만족하면 대부분 safe 하다. 그러나 DELETE의 경우 idempotent 하지만 리소스를 삭제하므로 safe 하지 않다. 원문은 RFC 7231: Safe Methods 에 있다.


HEAD : Resposne-Body 를 제외한 Header 를 요청하는 메소드

OPTIONS : 해당 리소스의 연산(operation)이 무엇이 있는지 응답을 요청하는 메소드. 응답 헤더의 Allow 에 가능한 operation 이 온다. 다음은 RFC2616 의 내용을 가져왔다.


The OPTIONS method represents a request for information about the communication options available on the request/response chain identified by the Request-URI. This method allows the client to determine the options and/or requirements associated with a resource, or the capabilities of a server, without implying a resource action or initiating a resource retrieval. 


댓글