REST는 2000년에 로이 필딩(Roy Fielding)의 논문에서 최초로 소개되었다. 로이 필딩은 당시 웹(HTTP)의 우수성에 비해 제대로 사용되지 못하는 모습에 안타까워 웹(HTTP)의 장점을 최대로 활용할 수 있는 아키텍처로 REST를 발표했다고 한다.
(아키텍처 : 애플리케이션을 설계, 제작하는데 사용하는 패턴과 기술의 총칭)
Representational State Transfer의 약자로 자원을 이름(자원의 표현)으로 구분하여 해당 자원의 상태를 주고받는 모든 것을 의미한다.
즉, REST란
1. HTTP URI(Uniform Resource Identifier)를 통해 자원(Resource)을 명시하고,
2. HTTP Method(POST, GET, PUT DELETE 등)를 통해
3. 해당 자원에 대한 CURD Operation을 적용하는 것을 의미한다.
CRUD Operation이란?
CRUD는 대부분의 컴퓨터 소프트웨어가 가지는 기본적인 데이터 처리 기능인 Create(생성), Read(읽기), Update(갱신), Delete(삭제)를 묶어서 일컫는 말로 REST에서의 CRUD Operation 동작 예시는 다음과 같다.
- Create : 데이터 생성 (POST)
- Read : 데이터 조회 (GET)
- Update : 데이터 수정 (PUT, PATCH)
- Delete : 데이터 삭제 (DELETE)
REST API는 다음과 같은 요소로 이루어져있다.
REST API란 REST를 기반으로 서비스 API를 구현한 것을 말한다.
(API, Application Programming Interface 는 데이터와 기능의 집합을 제공하여 컴퓨터 프로그램 사이의 상호작용을 촉진하며, 서로 정보 교환이 가능하도록 하는 것)
GET /books/delete/1 (x)
DELETE /books/1
http://restapi.example.com/animals/mammals/whales
http://restapi.example.com/houses/apartments/ (x)
http://restapi.example.com/members/soccer/345/photo.jpg (x)
GET / members/soccer/345/photo HTTP/1.1 Host: restapi.example.com Accept: image/jpg
리소스 간에 연관 관계가 있을 경우 다음과 같은 표현 방법을 사용한다.
GET : /users/{userid}/devices (일반적으로 소유 ‘has’의 관계를 표현할 때)
GET : /users/{userid}/likes/devices (관계명이 애매하거나 구체적 표현이 필요할 때)
http:// restapi.example.com/sports/soccer/players/13
위의 예시에서 sports, players 컬렉션과 soccer, 13(13번 선수)를 의미하는 도큐먼트로 URI가 이루어져있다. 좀 더 직관적이고 이해하기 쉬운 URI를 설계하기 위해 단수, 복수를 지켜준다.
잘 설계된 REST API는 URI 뿐만 아니라 리소스에 대한 응답을 잘 내어주는 것까지 포함되어야 한다. 정확한 응답 상태 코드만으로도 많은 정보를 전달할 수 있기 때문에 상태 코드 값을 명확히 돌려주는 것이 중요하다.
200, OK - 서버가 요청을 성공적으로 처리함
201, Created - 요청이 처리되어 새로운 리소스가 생성됨
204, No Content - 처리를 성공했지만, 클라이언트에게 돌려줄 컨텐츠가 없음 (응답 바디가 없음 예를 들어 DELETE 요청 시 자주 사용)
400, Bad Request - 요청의 구문이 잘못됨
401, Unauthorized - 지정한 리소스에 대한 액세스 권한이 없음
403, Forbidden - 지정한 리소스에 대한 액세스가 금지됨 (401 인증 처리 이외의 사유로 리소스에 대한 액세스가 금지된 경우)
404, Not Found - 지정한 리소스를 찾을 수 없음
409, Conflict - 서버가 요청을 수행하는 중에 충돌이 발생 (예를 들어, 사용자가 변경하려는 닉네임이 이미 서버에서 사용 중인 경우)
500, Internal Server Error - 서버에서 예기치 못한 에러가 발생함
References
https://www.youtube.com/watch?v=7LbylTMlj8M
https://meetup.nhncloud.com/posts/92
https://gmlwjd9405.github.io/2018/09/21/rest-and-restful.html
https://hongong.hanbit.co.kr/http-%EC%83%81%ED%83%9C-%EC%BD%94%EB%93%9C-%ED%91%9C-1xx-5xx-%EC%A0%84%EC%B2%B4-%EC%9A%94%EC%95%BD-%EC%A0%95%EB%A6%AC/