본문 바로가기
프로그래밍/기타

[REST API] HTTP Methods 분석

by 사바라다 2019. 10. 2.

안녕하세요. 벌써 올해도 10월에 접어 들었습니다. 시간에 지남에 따라 스스로 많이 성장함도 느끼지만.... 아직 멀었구나라는 생각도 많이 듭니다. 모두들 화이팅하면 좋겠습니다.

HTTP Methods

일반적으로 웹에서 REST API를 작성할 때 HTTP Methods를 이용하여 CRUD를 표현합니다. 자주 사용되는 HTTP Method는 아래와 같습니다.

  • GET
  • POST
  • PUT
  • DELETE
  • PATCH

오늘은 위 5가지에 대해서 한번 알아보도록 하겠습니다.

HTTP GET

GET은 리소스를 가져올 때 사용합니다. GET을 사용했을 때는 서버에 어떠한 수정도 있으면 안됩니다. 서버에서 리소스에 대한 수정이 없기 때문에 GET Method는 safe methods라고 할 수 있습니다. 리소스에 영향이 없는 API로 어디에서 요청을 해도 동일한 결과를 반환해야합니다.

HTTP GET API로 서버에서의 리소스가 발견되었을 경우 응답 본문과 함께 200(OK)으로 HTTP 응답 코드를 리턴하는 것이 일반적입니다. 만약 리소스가 별견되지 못했다면 404(Not Found)로 응답하며, 요청이 적합한 형식이 아니라면 400(Bad Request)로 리턴하는 것이 일반적입니다.

HTTP GET http://www.appdomain.com/users
HTTP GET http://www.appdomain.com/users?size=20&page=5
HTTP GET http://www.appdomain.com/users/123
HTTP GET http://www.appdomain.com/users/123/address

HTTP POST

POST는 새로운 리소스를 생성하거나 독립적인 명령(Controller)를 실행할 때 사용합니다. 서버에 리소스가 정상적으로 생성 된 경우 201(Create)로 HTTP 응답 코드를 리턴하고 요청에 대한 상태를 기술한 메시지와 새로운 리소스에 대한 Location을 header에 담아 반환해야하는 것이 일반적입니다 또한 POST는 특정한 명령을 실행하는 용도로도 사용됩니다. 이럴 경우에는 200(OK)또는 204(No Content)가 적절한 응답이될 수 있습니다.

HTTP POST http://www.appdomain.com/users
HTTP POST http://www.appdomain.com/users/123/accounts

HTTP PUT

PUT은 현재 존재하는 리소스의 전체적인 업데이트 하는 경우에 사용합니다. 만약 리소스가 존재하지 않는다면 POST의 생성로직으로 새로 만들어도 되며 그렇지 않아도 됩니다. 정상적으로 Update 되었다면 200(OK) 또는 204(No content)를 통해 응답하면 됩니다. 업데이트를 요청한 리소스가 있고 실제로 업데이트되었다면 기존의 Response는 캐시처리가 되면 안됩니다.

POST와 PUT API의 차이점은 POST는 Resource Collection에서 사용되며 Put은 Document에서 수행된다는 차이점이 있습니다. (해당 용어가 생소하신 분들은 저의 이전 포스팅을 참조하여 주시기 바랍니다.)

HTTP PUT http://www.appdomain.com/users/123
HTTP PUT http://www.appdomain.com/users/123/accounts/456

HTTP DELETE

DELETE는 Resource를 삭제하는데 사용됩니다. 성공적으로 Resource를 삭제했다면 응답 상태를 body에 담고 있다면 200(OK)으로, 그렇지 않을 경우 202(Accepted) 또는 204(No Content)로 응답합니다. 그리고 해당 Resource가 없다면 404(Not Found)로 응답해야합니다.

만약 delete가 들어온다면 cache의 상태는 지금과 다른 상태가 됩니다. 때문에 cache를 삭제 해야합니다.

HTTP DELETE http://www.appdomain.com/users/123
HTTP DELETE http://www.appdomain.com/users/123/accounts/456

HTTP PATCH

PATCH는 부분 리소스의 업데이트의 경우 사용합니다. PUT과 PATCH 모두 업데이트입니다. 하지만 PUT의 경우 전체적인 Update, PATCH의 경우 부분적인 업데이트라고 생각하시면 좋을 것 같습니다. PATCH는 우리가 사용하는 대부분의 웹서버 및 브라우저에서 지원하지 않습니다. IE8, PHP, Tomcat, Django 등등 많은 곳에서 기본적으로 지원하지 않기 때문에 유의바랍니다.

patch는 아래와 같은 형식을 가집니다.

{id: 1, username: 'admin', email: 'email@example.org'} // 원본

{ “op”: “replace”, “path”: “/email”, “value”: “new.email@example.org” } // 업데이트 요청

참조

https://restfulapi.net/http-methods/

댓글