코드 저장소

공부에는 끝이 없다!

HTTP

HTTP - HTTP API 설계

VarcharC2K 2024. 1. 15. 17:13

POST 기반 API와 PUT 기반의 API

1. Post 기반의 등록

회원 등록이라는 기능을 HTTP API를 통하여 만든다고 생각해보자.

우리는 POST 메서드를 이용하여 /members라는 URI를 통하여 회원 정보를 등록하게 될 것이다.

URI를 잘 보면 뒤에 쿼리 파라미터가 따로 필요가 없는 것을 확인 할 수 있다.

이것은 POST는 바디를 통해 전달 받은 데이터를 어떻게 처리할 지 서로 규약을 통해 알고 있기 때문이다.

이때, /members를 Collection이라고 한다.

Collection은 서버가 관리하는 리소스 디렉토리를 말하며 서버가 리소스의 URI를 생성하고 관리하는 것을 말한다.

또한, 앞선 강의에서 설명했듯 POST는 서버가 리소스 URI를 결정하기 때문에 클라이언트가 등록될 리소스 URI를 알 필요가 없다는 장점이 있다.

2. PUT 기반의 등록

그럼 PUT 기반의 등록을 살펴보자. 만약 우리가 원격으로 파일을 전송한다고 생각해 보자.

그렇다면 URI는 /files/{filename} 이 될 것이다.

이렇게 파일 업로드 시 PUT을 사용하는 경우는 2가지 이유가 있는데,

  1. 클라이언트가 이미 리소스의 식별자를 알고있고
  2. 이미 존재하는 파일이라면 덮어 씌워야 하기 때문이다.

URI를 보면 알 수 있듯이 리소스의 식별자는 filename이 될 것이다.

이렇듯 PUT은 클라이언트가 리소스의 URI를 알고 있어야 하며, 서버가 아닌 클라이언트가 직접 리소스의 URI를 지정한다.

이를 Store라고 하며, Collection과는 반대로 클라이언트가 관리하는 리소스 저장소를 말한다.

Store에서는 클라이언트가 리소스의 URI를 알고 관리하며 앞선 예제에서의 /files가 Store가 될 것이다.


정리해 보자면 POST를 기반으로 신규 자원을 등록하는 경우, 클라이언트가 데이터를 넘기면 서버가 알아서 식별자를 만들고 최종적으로 URI도 서버가 판단하여 결정한다. 즉, 클라이언트는 요청만 하고 모든 처리는 서버에서 하게 된다.

반대로 PUT의 경우, 클라이언트가 리소스 URI를 알아야 하기 때문에 클라이언트가 리소스 URI를 관리하고 서버는 요청이 온대로 처리만 해주는 것이 두 메서드의 가장 큰 차이점이다.

 

대부분 신규자원은 POST를 통하여 처리하며 PUT을 쓰는 경우는 파일 업로드 같은 특정 케이스가 아니면 잘 사용하지 않는다. 


HTML FORM과 컨트롤 URI

HTML FORM은 GET, POST만 지원한다.

그런데 만약 HTML FORM을 통해 유저 정보 수정이나 삭제를 진행하고 싶다면 어떻게 해야할까?

원래는 DELETE 메서드를 이용하여 /members/{id}와 같이 URI를 보내면 되지만 앞서 설명한듯 HTML FORM에서는 GET, POST 2가지 메서드만 사용 가능하다.

그래서 이런 경우, POST를 이용하여 경로를 추가 후 해결이 가능한데 이를 컨트롤 URI라고 부른다.

예를 들어 삭제의 경우 POST 메서드를 이용하여 /members/{id}/delete와 같이 보내는 것이다.

원래 URI에 action이 들어오는 것은 좋은 방법이 아니나, HTML FORM의 한계를 해결하기 위한 일종의 꼼수라고 생각하면 좋겠다.

물론 이것이 가능하려면 서버와 delete로 받는 경우 데이터를 삭제하겠다 라는 규약이 먼저 이루어져야 하는 점을 명심하자.

 

'HTTP' 카테고리의 다른 글

HTTP - HTTP 상태코드 (2)  (0) 2024.01.17
HTTP - HTTP 상태코드 (1)  (1) 2024.01.16
HTTP - HTTP 메서드 활용하기  (0) 2024.01.12
HTTP - HTTP 메서드의 속성  (0) 2024.01.11
HTTP - HTTP 메서드 (2)  (0) 2024.01.11