REST는 Representational State Transfer
의 약자로 웹 상에서의 통신 체계에 있어 범용적인 스타일을 규정한 아키텍쳐로 자원을 이름(자원의 표현)으로 구분하여 해당 자원의 상태(정보)를 주고 받는 모든 것을 의미한다.
구체적인 개념은 HTTP URI를 통해 자원을 명시하고, HTTP Method를 통해 자원에 대한 CRUD Operation을 적용하는 것을 의미한다.
CRUD Operation | HTTP Method | 역할 | Payload (전송되는 데이터) |
---|---|---|---|
Create (생성) | POST | 리소스를 생성 | O |
Read (조회) | GET | 모든/특정 리소스를 조회 | X |
Update (수정) | PUT or PATCH | 리소스의 전체를 교체 / 일부를 수정 | O |
Delete (삭제) | DELETE | 모든/특정 리소스를 삭제 | X |
구성 요소 | 내용 | 표현 방법 |
---|---|---|
자원 Resource | 자원 | HTTP URI |
행위 Verb | 자원에 대한 행위 | HTTP Method |
표현 Representation | 자원에 대한 행위의 내용 | HTTP Message Payload |
+ API: 프로그램 간 상호작용을 위한 인터페이스를 의미한다.
REST를 기반으로 구현한 서비스 API를 말한다. 참고로 OpenAPI 대부분은 REST API를 제공한다.
❌[DELETE] /delete/users/1 ⭕[DELETE] /users/1
❌[GET] /users/show/1 ⭕[GET] /users/1
/
)로 계층 관계를 나타내고 URI 마지막엔 슬래시를 포함하지 않는다.❌ http://forest.com/users/
⭕ http://forest.com/users
_
)대신 하이픈(-
)을 사용한다.-
)으로 구분해 가독성을 높힌다._
)는 부분적으로 가려질 수 있다.❌ /users/1/ordered_items
⭕ /users/1/ordered-items
❌ /users/1/profile-photo.jpg
⭕ /users/1/profile-photo HTTP/1.1 Host: forest.com Accept: image/jpg
REST라는 아키텍처를 구현하는 웹 서비스를 나타내는 용어로 REST API를 제공하는 웹 서비스를 RESTful하다고 할 수 있다. RESTful의 목적은 이해하기 쉽고 사용하기 쉬운 REST API를 만드는 것이다.
또한 RESTful한 API는 일관적인 컨벤션을 통한 API의 이해도 및 호환성을 높이는 것이 목적이라 성능이 중요한 상황에선 굳이 사용하지 않는다.
CRUD 기능을 모두 POST로 처리 하는 API, URI 규칙을 지키지 않은 API는 REST API를 사용했어도 RESTful 하지 못한 경우이다. 또한 잘 설계된 REST API는 요청에 대한 응답의 상태코드를 잘 전달하는 것까지 포함된다.
https://gmlwjd9405.github.io/2018/09/21/rest-and-restful.html
https://khj93.tistory.com/entry/네트워크-REST-API란-REST-RESTful이란
https://poiemaweb.com/js-rest-api