Server/HTTP

[HTTP] HTTP 메서드 활용 - HTTP API 설계 예시

개발자킹콩 2022. 8. 12. 00:05

 

우리가 회원 관리 API 를 제공한다고 가정해보자.

그때, URI GET POST 등을 어떻게 사용해야 하는지 배워보자.

그런데, POST와 PUT 모두 데이터를 등록할 때 사용하는데 이를 어떻게 구분해야 하는지가 중요하다.

 

 


 

이전에도 정리한 내용인데, URI는 리소스(members)를 식별하는 용도로 사용하는 것이다. 리소스의 행위를 식별하는 것은 최대한 지양해야 한다. 그런 행위들은 HTTP method를 통해 식별 가능하기 때문이다.

 

GET의 경우 /members 을 request-target으로 지정한다. 

데이터가 100만개 이면 적절한 필터링이 필요하고 이러한 필터링은 query parameter의 검색어를 통해 조회하게 된다.

정렬하고 싶으면 그것 역시 query parameter를 사용한다.

 

POST의 경우 회원 등록을 하는 것이다. /members 를 Collection이라고 부른다.

이 Collection(회원을 관리하는 URI)에 데이터를 넣으면 회원을 새로 등록하게 할 것임을 서버와 약속한다.

 

회원 한명에 대한 조회 수정 삭제의 경우 collection에서 id로 해당 회원을 찾아서 method의 기능을 사용하는 것이다.

PUT은 완전히 덮을 자신이 있을때 사용하는 것이기에 삭제된 데이터를 돌리기 힘들어 잘 사용하지 않는다.

수정의 경우 PATCH를 적극 권장한다.

그런데, 게시판의 게시글을 수정하는 경우 부분 수정하는 보다 전체적으로 수정하는 경우가 존재하기에 기존 게시글을 완전히 지우고 새로 작성하는 방법인 PUT을 사용하는 경우가 존재한다.

이것도 저것도 애매하면 천하무적 POST를 사용하면 된다.

 

 


 

POST와 PUT의 데이터를 저장하는 방식의 차이

 

 

 

클라이언트에서 POST로 서버에 데이터를 저장하는 방식을 살펴보자.

URI 를 살펴보면 /members 이다.

즉, DB에 데이터를 저장하며 새로운 리소스의 아이디는 서버가 만든다.

POST 데이터 등록할때는 서버에서 URI를 결정하고 만들어 준다.

 

 

 


 

 

 

URI가 이렇게 결정되면 filename을 알고 있는 것은 서버가 아니라 클라이언트이다.

이런 경우 클라이언트가 URI의 리소스 id를 정해야 하기 때문에 PUT을 사용한다.

이렇게 파일 업로드의 경우가 PUT의 대표적인 예시이다!!

이 경우는 파일 등록을 PUT으로 사용하고 있기때문에 POST의 용도는 개발자가 임의로 정할 수 있고, 대량 파일 등록에 지정을 예시로 들었다.

 


 

 

여기서 정확한 차이를 알 수 있다.

POST로 신규 데이터를 등록하는 것은 클라이언트는 요청만 하고 서버에서 URI를 만들어 내려준다.

POST는 서버에서 URI를 관리한다. 서버가 관리하는 리소스 디렉토리는 Collection이다.

PUT으로 신규 데이터를 등록하는 것은 클라이언트가 URI를 만들어 등록하는 것이다.

PUT은 클라이언트에서 URI를 관리한다. 클라이언트가 관리하는 리소스 디렉토리는 Store이다.

그래서 단연고 POST를 실무에서 많이 사용한다.

 

 

 


 

 

 

 

 

 

등록 폼과 등록, 수정 폼과 수정의 경우 URI를 맞추게 되면 문제가 생겼을 때, 데이터 복구해서 폼으로 돌아가는게 수월해서 링크를 맞추는 것을 권장한다(Validation). 여기서 등록과 수정의 버튼을 눌렀을때 요청하는 URI를 의미한다.

 

 

 

 

실무는 예외가 많다보니 HTTP method를 사용하기 애매하면 동사가 포함된 컨트롤 URI를 사용한다.

뭔가 조작을 하기 때문에 동사를 사용하는 것이다.

HTTP API 역시 완전히 HTTP method로만 URI를 만들기에는 한계가 존재한다.

컨트롤 URI의 경우 최소한으로 사용해야 하지만, 어쩔 수 없으면 어떡해 써야지

 

 

 


 

 

 

 

  • document: 단일 개념이며, 리소스 하나를 찍은 것을 뜻한다.
  • Collection: 서버가 관리하는 리소스 디렉터리
  • Store: 클라이언트가 관리하는 리소스 디렉터리(게시판은 간혹, 파일은 보통 사용한다.)
  • Controller, Control URI: 문서, 컬렉션, 스토어로 해결하기 어려운 추가 프로세스를 실행할때 사용하며, 데이터를 조작하거나 변경하기 때문에 동사를 사용한다.