REST
-
REST: Representational State Transfer의 줄임말.
-
표현 방식
-
자원: URL
-
행위: HTTP Method
-
표현: 응답
-
-
자원에 고유한 URIUniform Resource Identifier를 할당함으로써 표현력 있는 API를 정의하기 위한 아키텍처
representation
-
이거보고 정리
-
서버가 보내준 '것’은 '리소스’가 아니다. 'representation data’이다.
-
GET 메서드가 하는 일
-
'target resource’에 대해서 현재 선택된 'representation' 하나를 전달하는 것.
-
-
'target resource’는 uri가 가르키는 리소스
-
'representation’은 어떤 리소스의 특정 시점의 상태를 반영하고 있는 정보.
-
representation은 representation data와 representation metadat로 구성됨.
HATEOAS
-
Hypermidia As The Engine Of Application State
-
REST API를 사용하는 클라이언트가 전적으로 서버와 동적인 상호작용이 가능하도록 하는 것
조건
Uniform Interface
stateless
Stateful
-
서버사이드에 클라이언트와 서버의 동작, 상태정보를 저장하는 형태
-
세션 상태에 기반하여 서버의 응답이 달라짐
-
서버와 클라이언트간 세션의 상태에 기반하여 클라이언트에게 응답을 보낸다.
-
ex) TCP
Stateless
-
서버사이드에 클라이언트와 서버의 동작, 상태정보를 저장하지 않는 형태
-
서버의 응답이 클라이언트와의 세션 상태와 독립적임
-
떼로는 DB를 통해 상태를 저장함
-
ex) UDP
-
유저의 엔티티 데이터에 따라 API 응답이 달라진다 → 이것은 여기서 말하는 stateful은 아닌 것 같음
Layered System
Cacheable
온디맨드 코드
규칙
-
URL 경로는 소문자 (RFC 3986 참고)
-
URI에 밑줄 말고 하이픈 사용
-
URI 마지막에 슬래시 포함하지 않음
-
파일 확장자는 URI에 포함하지 않음 → 헤더
-
URI는 명사
-
표현 방법
-
has 관계를 표현할 때:
/users/{id}/devices
-
서브 시소스를 명시적으로 표현하는 방법:
/users/{id}/likes/devices
-
-
document, collection 표현 방법
-
document: 문서/객체
-
collection: 문서의 집합/객체의 집합, 복수로 표현
-
모두 리소스로 URI에 표현
-
/sports/soccer/players/13
: sports, players 컬렉션, soccer 도큐먼트
-
HTTP Methods
GET
-
리소스 조회
POST
-
리소스 생성, create
PUT
-
리소스 수정(엎어치기?, 전체 교체), replace
PATCH
-
리소스 수정(덮어쓰기, 일부 수정), modify
DELETE
-
리로스 삭제
Response
Response State Code
2xx
-
200: 정상
-
201 Created: 성공적으로 리소스 생성
-
202 Accepted: 요청은 성공적으로 접수되었으나 처리는 진행중이거나 시작전을 나타냄
-
polling, callback, websocket?, sse?
-
-
204 No Content
4xx
-
400
-
401 Unauthorized: 인증 실패
-
403 Forbidden: 리소스는 존재하지만, 권한 없음
-
404 Not Found: 리소스 없음
-
405 Method Not Allowed: 사용 불가능한 method
5xx
-
500: 서버 문제