개발

[요약] REST API 디자인 규칙 - 03. HTTP를 이용한 인터랙션 설계

소년택이 2022. 4. 7. 02:25

HTTP 요청 메서드

REST API 리소스 모델에서 각 메소드는 고유한 의미를 가진다.

  • GET - 리소스 상태의 표현
  • HEAD - 메타데이터 조회
  • PUT - 새 리소스 생성 또는 갱신
  • DELETE - 자식 리소스 제거
  • POST - 새 리소스 생성 또는 컨트롤러 실행

 

세부 규칙

터널링 금지

  • 터널링이란 원래 의도와 맞지 않게 HTTP 를 사용하는 행위를 뜻한다.

GET

  • 리소스의 상태 표현을 조회한다.

HEAD

  • 응답 헤더(메타데이터)를 조회한다.
  • 바디가 없다.

PUT

  • 리소스 삽입, 갱신 을 위해 사용한다.
  • 변경한 값을 갖는 메시지 바디를 포함할 수 있다.

POST

  • 새로운 리소스 생성 시 사용한다.
  • 새 메시지를 나타내는 메시지 바디를 포함할 수 있다.
  • 컨트롤러 리소스를 실행할 수 있다.

DELETE

  • 오직 특정 리소스를 삭제하는데 사용한다.
  • (임시 삭제 등과 같은) 삭제 외 행위는 POST 로 갈음한다.

OPTION

  • 서버에서 제공하는 method 목록을 전달한다.

 

응답

1xx 정보

전송 프로토콜 수준의 정보 교환.

2xx 성공

클라이언트의 요청을 성공적으로 수행 함.

  • 200("OK") - 일반적인 성공, 바디에 에러 포함 불가.
  • 201("Created") - 리소스 생성.
  • 202("Accepted") - 비동기 처리 시작. 비동기 작업의 성공 여부를 나타내는것이 아님.
  • 204("No Content") - 냉무.

3xx 재전송

클라이언트의 요청을 완료하기 위해 추가 행동이 필요.

  • 301("Moved Permanently") - 리소스의 위치가 변경. 헤더의 Location 항목에 새로운 URI 기술 필요.
  • 302("Found") - 사용 지양
    • HTTP/1.0 에서는 Temporary Redirect.
    • GET, HEAD 를 이용한 최초 요청에만 응답하게 정의하였으나, 많은 브라우저들이 GET 으로 method 를 바꿔 재전송 하도록 구현함.
    • 303, 307로 세분화 되었으니 302는 사용 지양.
  • 303("See Other") - 새로운 Location 에 GET 으로 접근하기를 권함.
  • 304("Not Modified") - 이하동문. 클라이언트에 이미 최신의 응답을 가지고 있으니 바디를 전송하지 않음.
  • 307("Temporary Redirect") - 일시적으로 이동한 위치로 기존 method 그대로 접근해야 하며, 향후 기존 URI 를 사용 할 예정임.

4xx 클라이언트 오류

  • 401("Unauthorized") - 클라이언트의 인증에 문제가 있다.
  • 403("Forbidden") - 인증에는 문제가 없으나, 권한이 없다.
  • 404("Not Found")
  • 405("Method Not Allowed") - 해당 메소드를 지원하지 않음. Allow 헤더 반환.
  • 406("Not Acceptable") - 요청한 미디어 타입으로 결과를 제공할 수 없음.
  • 415("Unsupported Media Type") - 요청한 미디어 타입의 입력을 처리할 수 없음.
  • 409("Conflict") - 처리 불가 상태 ( ex: 삭제한 데이터를 수정하려고 할때 ).
  • 412("Precondition Failed") - 전제조건 불만족.

5xx 서버 오류

500 Internal Server Error ... NO!