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: 서버 문제