클라이언트는 서버에게 데이터를(JSON, XML…) 요구한다.
서버는 클라이언트에게 HTML을 요구한다.
모든 프로토콜에 REST를 구현할 수 있지만, 일반적으로 HTTP를 사용함.
리소스를 중심으로 디자인
장고로 따지면 장고 모델. 예를 들어 Post 모델
클라이언트에게 액세스할 수 있는 모든 종류의 개체/서비스가 리소스에 포함
리소스마다 해당 리소스를 고유하게 식별하는 식별자 → https://my-trips.com/trips/1/
요청/응답 포맷으로 흔히 JSON을 사용 →
{
“pk” : 1,
“name” : “프라하 여행”,
“user_id” : 100,
“place_set” : [100, 102, 200]
}
균일한 (uniform) 인터페이스를 적용
리소스를 표준 HTTP 동사 (GET, POST, PUT, PEACH, DELETE)를 적용
/customers/1/orders/99/products/ → 유연성이 떨어짐.
/customers/1/orders/ 를 통해 고객1의 모든 주문을 찾은 후에,
/orders/99/products/ 로 변경해서 동일한 처리
ex) application/json, application/vnd.ms-excel, image/jpeg, application/pdf 등
요청 시에 처리를 원하는 형식 지정하면, 서버에서는 이 형식으로 응답
서버에서 해당 형식을 지원하지 않으면 HTTP 상태 코드 415 (지원하지 않는 미디어 유형) 반환
일반적으로 200 (OK) 응답, 리소스를 못 찾을 경우 404 (Not Found)응답
201 (Created) 응답. 새 리소스의 URI는 응답의 Location 헤더에.
새 리소스를 만들지 않은 경우, 200 응답하고 응답 본문에 포함할 수도. 반환할 결과가 없으면
204 (내용없음) 반환할 수도.
잘못된 데이터로 요청하면 400 (잘못된 요청) 응답하고 응답 본문에 오류정보 또는 자세한 정를 제공하는 URI 링크 포함.
기존 리소스를 업데이트할 경우 200 (OK) 또는 204 (내용없음) 반환. 상황에 따라 업데이트할 수 없는 경우 409 (충돌) 반환.
성공하면, 응답 본문에 추가정보가 포함되지 않았음의 의미로 204 응답. 리소스가 없는 경우 404 응답.
작업 완료에 시간이 오래 걸릴 경우, 다른 Task Queue를 통해 비동기 처리를 할 수 있습니다. (예: Celery 등). 이때 요청은 수락되었지만 아직 완료되지 않았음을 나타내는 202 (수락됨) 응답
클라이언트가 이 작업을 Polling을 통해 모니터링할 수 있도록, 비동기 요청의 상태를 반환하는 URI을 Location 헤더로 반환
장고의 패러다임 하에 빠르고 관리하기 쉬운 API를 만들 수 있다.
DRF는 아래 REST API 컨셉을 쉽게 만들 수 있도록 도와준다.
https://{serviceRoot}/{collection}/{id}
형식이어야 한다.위키백과 : https://ko.wikipedia.org/wiki/CRUD
모든 데이터는 기본적으로 "추가/조회/수정/삭제" 액션으로 관리될 수 있습니다.
주의) CRUD는 리소스에 대한 대표적인 동작일 뿐, API의 전부는 아니다.