Django : REST API
- API
두 소프트웨어가 서로 통신할 수 있게 하는 메커니즘
→ 클라이언트 - 서버 처럼 서로 다른 프로그램에서 요청과 응답을 받을 수 있도록 만든 체계
→ 소프트웨어 간에 지정된 형식으로 소통하는 수단
⇒ 복잡한 코드를 추상화하여 대신 사용할 수 있는 쉬운 구문들을 제공한다.
- REST ( = Representational State Tranfer )
API Server 를 개발하기 위한 일종의 소프트웨어 설계 ‘방법론’
- REST ful API
REST 원리를 따르는 시스템을 RESTful 하다고 부른다.
자원을 정의하고 자원에 대한 주소를 지정하는 전반적인 방법을 서술한다.
- REST API : REST 라는 설계 디자인 약속을 지켜서 구현한 API
- REST에서 자원을 사용하는 법 3가지
- 자원의 ‘식별’ = URI
- 자원의 ‘행위’ = HTTP Methods
- 자원의 ‘표현’ = JSON 데이터, 궁극적으로 표현되는 데이터 결과물
- URI (통합 자원 식별자)
인터넷에서 자원을 식별하는 문자열
일반적인 URI는 웹 주소로 알려진 URL 이 있다.
- URL
웹에서 주어진 자원의 주소
네트워크 상에 리소스가 어디 있는지를 알려주기 위한 약속
⇒ Schema + Domain Name + Port + Path + Parameters + Anchor
- Schema (Protocol)
브라우저가 리소스를 요청할 때 사용해야 하는 규약
URL의 첫 부분은 브라우저가 어떤 규약을 사용하는지를 나타낸다.
기본적으로 웹은 http를 요구한다.
- Domain Name
요청 중인 웹 서버를 나타낸다.
어떤 웹 서버가 요구되는 지를 나타내는데, 직접 IP 주소를 사용하는 것도 가능하지만, 직관성이 떨어지기 때문에 주로 Domain Name 을 사용한다.
ex) 구글의 도메인 : google.com / IP 주소 : 142.251.42.142
- Port
웹 서버의 리소스에 접근하는데 사용되는 기술적인 gate
표준 포트만 작성할 시 생략 가능하다.
- Path
웹 서버의 리소스 경로
초기에는 실제 파일이 위치한 물리적 위치를 나타냈지만, 요즘엔 실제 위치가 아닌, 추상화된 형태의 구조를 표현한다.
- Parameters
웹 서버에 제공하는 추가 데이터
& 기호로 구분되는 key, value 쌍 목록
서버는 리소스를 응답하기 전, 파라미터를 사용하여 추가 작업을 수행할 수 있다.
- Anchor
일종의 북마크처럼 해당 콘텐츠가 존재하는 브라우저의 지점을 표시
부분 식별자라고 부르는 # 이후 부분은 서버에 전송되지 않고 브라우저에게 해당 지점으로 이동하도록 한다.
- HTTP Request Methods : 리소스에 대해 수행하고자 하는 동작, 행위를 정의 (=HTTP verbs)
⇒ CRUD 가 나뉘어 있음.
- GET (조회) = 서버에 리소스의 표현을 요청한다. GET을 사용하는 요청은 데이터만 검색해야 한다.
- POST (상태 변경) = 데이터를 지정된 리소스에 제출한다. 서버의 상태를 변경한다.
- PUT (수정) = 요청한 주소의 리소스를 수정한다.
- DELETE (삭제) = 지정된 리소스를 삭제한다.
- HTTP response status codes : 특정 HTTP 요청이 성공적으로 완료 되었는지 여부를 나타낸다.
200번대 → 성공했다.
400번대 → 사용자 잘못이다.
500번대 → 서버 잘못이다.
- Django REST framework ( = DRF )
Django에서 Restful API 서버를 쉽게 구축할 수 있도록 도와주는 오픈소스 라이브러리
- Serialization (직렬화)
여러 시스템에서 활용하기 위해 데이터 구조나 객체 상태를 나중에 재구성할 수 있는 포맷으로 변환하는 과정 ( django 말고 자바 같이 다른 프로그램을 사용하는 곳에서도 데이터를 조회할 수 있도록 )
⇒ 어떠한 언어나 환경에서도 나중에 다시 사용할 수 있는 포맷으로 변환하는 과정
- Serializer
Serialization 을 진행하여 Serialized data를 반환해주는 클래스
- ModelSerializer
Django 모델과 연결된 Serializer 클래스
일반 Serializer와 달리 사용자 입력 데이터를 받아 자동으로 모델 필드에 맞추어 직렬화를 진행한다.
- ModelSerializer 의 인자 및 속성
many 옵션 → Serialize 대상이 QuerySet인 경우 입력한다.
data 속성 - Serialized data 객체에서 실제 데이터를 추출한다.
- ‘api_view’ decorator
DRF view 함수에서는 필수로 작성된다. view 함수 실행 전, HTTP 메서드를 확인한다.
DRF view 함수가 응답해야 하는 HTTP 메서드 목록을 작성한다.
- partial
부분 업데이트를 허용하기 위한 인자
partial 인자 값이 False 인 경우, 한 필드값을 수정하려면 모든 필드값도 요청 시 함께 전송해야 한다.
기본적으로 Serializer 는 모든 필수 필드에 대한 값을 전달받기 때문이다.
- raise_exception
is_valid( ) 의 선택 인자
유효성 검사를 통과하지 못할 경우 ValidationError 예외를 발생시킨다.
DRF에서 제공하는 기본 예외 처리기에 의해 자동으로 처리되며, 기본적으로 HTTP 400 응답을 반환한다.