개요
REST(Representational State Transfer)
로이 필딩(Roy Fielding)의 2000년 박사학위 논문에서 소개
네트워크 통신 설계 지침
리소스를 정의하고 리소스에 대한 주소를 지정하기 위한 방법
프로토콜이 아닌 일련의 아키텍처 제약
네트워크 통신을 위한 지침이지만 네트워크의 대부분이 WWW(World Wide Web)이므로 웹 통신에 주로 사용
REST API, RESTful API
REST 제약 조건를 준수하는 HTTP API
제약 조건을 지키지 않았지만 REST API라고 부르는 경우도 적지 않음
HTTP API
현제 대부분의 HTTP API는 RESTful을 지향하므로 REST API와 같은 의미로 쓰임
제약 조건
client-server
클라이언트와 서버로 분리되어야 하며 의존성이 없어야 한다.
stateless
상태 정보를 저장하지 않는다. 즉 요청자, 요청 위치와 상관 없이 결과가 동일해야 한다.
cache
네트워크 프로토콜에서 제공하는 캐싱 기능을 적용할 수 있어야 한다.
uniform Interface
표준 형식으로 데이터를 송신할 수 있게 통합 인터페이스를 사용해야 한다.
layered system
서버는 중간 서버를 통해 로드 밸런싱 등을 제공하여 확장성 등을 제공할 수 있어야 한다.
self-descriptiveness
별도의 문서가 없어도 쉽게 이해할 수 있는 표현 구조(JSON, XML)와 정보를 가져야 한다.
method
RFC7231
GET
리소스 조회
멱등(idempotent) 만족
캐시 가능
HEAD
응답에 본문을 보내면 안 된다는 점을 제외하면 GET과 동일
GET을 호출했을 때와 같은 헤더를 응답
메타데이터를 얻을 때 사용
멱등(idempotent) 만족
캐시 가능
POST
대상 리소스가 요청에 포함된 표현을 처리하도록 요청
RFC에 ‘Appending data to a resource’s existing representation(s).’ 표현이 있는데 생성 뿐만아니라 표현에 대한 추가도 가능한 것으로 해석됨
206(Partial Content), 304(Not Modified), 416(Range Not Satisfiable)를 제외한 대부분의 상태 코드 응답 가능
처리 결과가 기존 리소스와 동일하다면 Location 필드에 기존 리소스 식별자와 함께 303(See Other)를 응답하여 클라이언트가 해당 리소스로 리다이렉션 하게 할 수 있음
멱등(idempotent)을 만족하지 않음
캐시 가능
PUT
대상 리소스가 생성되거나 기존 리소스를 대상 리소스로 대체되도록 요청
SQL의 INSERT INTO ON DUPLICATE KEY UPDATE와 같은 역할
즉 클라이언트가 원하는 대상 리소스를 알고 있다는 가정
멱등(idempotent) 만족
캐시 불가능
PUT의 성공
PUT 이후 동일한 대상 리소스에 대해 GET 했을 때 동일한 리소스가 응답되는 것
하지만 서버가 다른 사용자의 요청과 병렬 처리되거나 동적 처리로 인해 동일한 리소스가 응답되지 않을 수 있음
PUT의 성공 응답은 서버에 사용자의 의도가 전달 됬음을 의미
201(Created), 200(OK), 204(No Content)를 응답
서버는 해석이 안되는 헤더는 무시해야 함
415(Unsupported Media Type)와 같은 상태 코드 응답 혹은 해석이 되는 헤더로 변환하여 처리
400(Bad Request)을 응답할 수 있어야 한다
POST와의 차이점
POST
PUT
POST는 호출 횟수 만큼 리소스가 생성되지만 PUT은 여러번 호출하더라도 하나의 리소스에 대해서만 영향을 받음
DELETE
리소스 삭제
정확하게는 리소스 삭제를 기대하는 것이 아닌 uri 매핑에 대한 삭제를 기대
멱등(idempotent) 만족
캐시 불가능
응답
202(Accepted)
204(No Content)
200(OK)
실행되었고 응답에 상태를 설명하는 표현이 포함된 경우
CONNECT
원본 서버에 대한 터널을 설정하도록 요청
성공할 경우 터널이 닫힐 때까지 양방향으로 패킷의 블라인드 포워딩으로 동작을 제한
대부분의 원본 서버는 CONNECT method를 구현하지 않음
멱등(idempotent)을 만족하지 않음
캐시 불가능
OPTIONS
요청 가능한 메소드 정보 요청
멱등(idempotent) 만족
캐시 불가능
TRACE
요청 메시지의 어플리케이션 레벨 루프백을 요청
멱등(idempotent) 만족
캐시 불가능
RFC5789
Tags:
CONNECT ,
DELETE ,
GET ,
HEAD ,
HTTP API ,
method ,
OPTIONS ,
PATCH ,
POST ,
PUT ,
REST ,
REST API ,
RESTful API ,
RFC5789 ,
RFC7231 ,
status code ,
TRACE
Categories:
network
Updated: March 22, 2023