REpresentational State Transfer : 대표적인 상태 전달(직역)
로이 필딩(Roy filding) 2000년 박사 학위 논문에 정의한 웹 기반 소프트웨어 아키텍쳐
예시)
# bad
GET /getTodos/1
GET /todos/show/1
# good
GET /todos/1
REST 아키텍쳐에 적용되는 6가지 제한 조건
역할이 분명하게 나누고 개발해야 할 내용이 명확학하게 나뉘어지고 서로간 의존성을 낮춤
Context(세션, 쿠키 정보 등)를 별도 저장하지 않아 서버는 요청만 단순 처리하여 단순화
HTTP 표준을 그대로 사용하기 때문에 캐시 처리 가능함(Last-Modifed, E-Tag 등)
서버 앞 단에 다중 계층('중간' 서버)을 설정하여 사용할 수 있음
코드만 보고도 어떤 행위를 하고 어떤 목적으로 사용되는지 알 수 있음
HTTP 표준(URI 표준)만 맞춘다면, 어떤 플랫폼이든 특정 언어나
기술에 종속되지 않고 모든 플랫폼에서 사용 가능
1. URI는 정보의 자원을 표현해야 한다.
2. 자원에 대한 행위는 HTTP Method로 표현한다.
# bad
GET /members/delete/1
# good
DELETE /members/1
# bad
GET /members/insert/2
# good
POST /members/2
http://restapi.example.com/houses/apartments
http://restapi.example.com/animals/mammals/whales
URI에 포함되는 모든 글자는 리소스의 유일한 식별자로 사용되어야 하며 URI가 다르다는 것은 리소스가 다르다는 것이고, 역으로 리소스가 다르면 URI도 달라져야 한다.
REST API는 분명한 URI를 만들어 통신을 해야 하기 때문에 혼동을 주지 않도록 URI 경로의 마지막에는 슬래시(/)를 사용하지 않는다.
# bad
http://restapi.example.com/houses/apartments/
# good
http://restapi.example.com/houses/apartments
불가피하게 긴 URI경로를 사용하게 된다면 하이픈을 사용해 가독성을 높일 수 있음
글꼴에 따라 다르긴 하지만 밑줄은 보기 어렵거나 밑줄 때문에 문자가 가려지기도 한다.
이런 문제를 피하기 위해 밑줄 대신 하이픈(-)을 사용하는 것이 좋다.(가독성)
대소문자에 따라 다른 리소스로 인식
RFC 3986(URI 문법 형식)은 URI 스키마와 호스트를 제외하고는 대소문자를 구별하도록 규정
REST API에서는 메시지 바디 내용의 포맷을 나타내기 위한 파일 확장자를 URI 안에 포함시키지 않는다.
Accept header를 사용
# bad
http://restapi.example.com/members/soccer/345/photo.jpg
# good
GET /members/soccer/345/photo HTTP/1.1
Host: restapi.example.com
Accept: image/jpg
/리소스명/리소스 ID/관계가 있는 다른 리소스명
GET : /users/{userid}/devices (일반적으로 소유 ‘has’의 관계를 표현할 때)
GET : /users/{userid}/likes/devices (관계명이 애매하거나 구체적 표현이 필요할 때)
http://restapi.example.com/sports/soccer
# collection : sports
# document : soccer
http://restapi.example.com/sports/soccer/players/13
# collection : sports, players
# document : 13
위에서 Collection은 복수로 사용하고 있음.
좀 더 직관적인 REST API를 위해서는 Collection과 Document를 사용할 때 단수 복수도 지켜준다면 좀 더 이해하기 쉬운 URI를 설계할 수 있다.
https://meetup.toast.com/posts/92
https://ko.wikipedia.org/wiki/REST
https://brainbackdoor.tistory.com/53
https://medium.com/@hckcksrl/rest%EB%9E%80-c602c3324196