api를 설계할 때 중요한 것은 리소스와 행위를 분리하는 것이다. 따라서 URI는 리소스만 식별해야 하고, 그에 대한 처리는 메서드로 구분한다.

 

주요 HTTP 메서드 종류

1. GET

  • 리소스 조회
  • 서버에 전달하고 싶은 데이터는 쿼리를 통해서 전달.
    • ex) GET /search?q=hello&hl=ko
  • 메시지 바디를 통해 전달 가능. 하지만 지원하지 않는 곳이 많아서 권장하지 않음.

2. POST

  • 요청 데이터 처리
    • 주로 신규 리소스 등록, 프로세스 처리에 사용.
    • 응답값이 없기도 함.
    • 포괄적으로 정의되어 있기 때문에, 다른 메서드를 사용하기 애매하다 싶으면 사용해도 됨.
    • PATCH, PUT을 지원하지 않는 경우에도 사용 가능.
  • GET과 달리, 메시지 바디를 통해 요청 데이터 전달

3. PUT

  • 리소스가 있으면 대체, 리소스가 없으면 생성.
    • 요청 시 필드를 누락하면, null로 저장되는 것을 주의.
  • 클라이언트가 리소스 위치를 알고 URI를 지정
    • ex) PUT /members/100

4. PATCH

  • 리소스 부분 변경
  • PUT과 달리, 요청 시 필드를 누락하더라도 해당 필드의 값이 변경되지 않음.

5. DELETE

  • 리소스 제거

 

HTTP 메서드의 속성

1. 안전

  • 몇 번을 호출해도 리소스 변경이 없는 것을 의미한다.
  • GET, HEAD 등

2. 멱등

  • 몇 번을 호출해도 결과가 동일한 것을 의미한다.
    • 안전과 달리 변경이 발생할 수 있다.
  • 멱등 메서드
    • GET : 몇 번을 조회하든 변경이 없고 같은 결과가 조회된다.
    • PUT : 리소스를 대체하므로, 같은 요청을 여러번 해도 결과는 같다.
    • DELETE : 리소스를 삭제하므로, 같은 요청을 여러번 해도 삭제된 상태이다.
    • POST : 멱등이 아니다. 리소스를 등록하는 요청의 경우, 요청할 때마다 새로운 리소스 생성.
    • PATCH : 멱등이 아니다. 나이를 1씩 더하는 요청의 경우, 요청할 때마다 지속적으로 값이 증가.

3. 캐시 가능

  • 응답 결과를 캐시해서 사용해도 되는지에 대한 여부를 의미한다.
  • POST, PATCH도 캐시 가능하지만, 실제로는 GET, HEAD 정도만 사용.
    • GET은 URL만 캐시 키로 고려하면 되지만, POST, PATCH는 본문 내용까지 고려해야 하기 때문에 구현이 쉽지 않음.

 

+ Recent posts