Django에서 Model 을 정의하면 ORM을 통해 데이터 베이스와 소통할 수 있는 API를 제공함.
API란?
데이터 베이스를 조작할때 사용했던 모든 명령어들
ex) <model>.objects.all() #<model>의 모든 데이터 Queryset 가져오기
<model>.objects.get()
Queryset 이란?
Django Model 의 데이터가 담겨있는 목록 (파이썬의 리스트와 비슷한 형태)
데이터 베이스로부터 가져온 여러개의 model 데이터
Queryset을 반환하는 API
하나의 데이터 객체를 반환하는 API
그 외 API...
필드 조건 옵션 (Field Lookups)
Queryset 연산을 할 때 사용할 수 있는 여러 필드 조건 옵션
필드명 뒤에 __을 쓰고 사용할 옵션 인자를 적어주자. (아래 문서 참고)
https://docs.djangoproject.com/en/2.2/ref/models/querysets/#field-lookups
https://meetup.toast.com/posts/92
참고
REST API란?
Representational State Transfer 의 약자
- 자원(RESOURCE) - URI
- 행위(Verb) - HTTP METHOD
- 표현(Representations)
로 구성
REST API 디자인 가이드
가장 중요한 항목은 두가지로 나눌 수 있다.
1. URI는 정보의 자원을 표현해야한다.
2. 자원에 대한 행위는 HTTP method (GET, POST, PUT, DELETE)로 표현한다
예시)
회원정보를 삭제하는 URI
DELETE /members/1
회원정보를 가져오는 URI
GET /members/1
회원정보를 추가할 때
POST /members/2
회원 정보를 가져올 때에는 GET
회원 추가시의 행위를 표현 할때에는 POST METHOD를 사용하여 표현합니다.
[참고]HTTP METHOD의 알맞은 역할
POST, GET, PUT, DELETE 이 4가지의 Method를 가지고 CRUD를 할 수 있습니다.
METHOD역할
POST | POST를 통해 해당 URI를 요청하면 리소스를 생성합니다. |
GET | GET를 통해 해당 리소스를 조회합니다. 리소스를 조회하고 해당 도큐먼트에 대한 자세한 정보를 가져온다. |
PUT | PUT를 통해 해당 리소스를 수정합니다. |
DELETE | DELETE를 통해 리소스를 삭제합니다. |
URI 설계 할때 주의할 점
1. / 는 계층관계를 나타내는데 사용함
2. URI 마지막 문자로 / 를 포함하면 안됨
참고)
URI 와 URL의 차이?
URL는 Uniform Resource Locator로 인터넷상 자원의 위치를 의미함(파일의 위치)
URI는 Uniform Resource Identifier로 인터넷 상의 자원을 식별하기 위한 문자열의 구성
-> URI는 URL을 포함(더 포괄적인 범위)
POST / PUT / PATCH 메소드의 차이?
POST 연산은 결과가 Idempotent 하지 않지만, PUT 은 반복 수행해도 그 결과가 Idempotent 하다.
PUT 요청 시에는 변경되지 않는 데이터도 모두 전송해야 한다.
만약 수정된 값만 보낼 경우, 보내지 않은 데이터는 null 로 변경되어 버린다.
PATCH 요청 시에는 새롭게 바뀐 부분만 반영되며 나머지는 기존의 데이터가 유지된다.