2022. 3. 10. 11:25ㆍ강의 정리/Django REST Framework
장고(Django)를 배우기 시작한 입문자이시거나, 또는 배우고 싶은 생각이 있으신 분은 위 출처의 강의를 적극 추천드립니다!!!
Django API와 REST
API 서버란?
_앱 / 웹 서비스를 만드는 개발자들이 이용하는 데이터 위주의 서비스 // request를 받으면, 서버측에서 주로 json으로 응답합니다.
_시간이 지나도 호환성을 유지해야 합니다.
- 앱 등의 유저가 사용하는 UI는 유저가 원할 때 업데이트가 됩니다.
- 유저층이 사용하는 앱의 버전이 다양하기에, API에도 버전 개념을 둡니다.
- 그에 반해, 웹 서비스를 이용하는 유저는 항상 최신 버전을 사용합니다. 그 이유는 웹 브라우저로 접속한 유저는 앱을 사용하는 유저와 다르게 웹브라우저에 접속할 때 최신버전의 HTML, css, js, static files를 다운받기 때문입니다.
REST란?
_Representational State Transfer :
HTTP URI(Uniform Resource Identifier)를 통해 자원(Resource)을 명시하고, HTTP Method(POST, GET, PUT, DELETE)를 통해 해당 자원에 대한 CRUD Operation을 적용하는 것을 의미한다.
https://gmlwjd9405.github.io/2018/09/21/rest-and-restful.html
_아키텍쳐 스타일을 REST라고 부르며, 프로토콜에 독립적입니다. 즉 어떠한 프로토콜에도 아키텍쳐를 적용할 수 있습니다.
_일반적인 REST 구현에서는 HTTP를 많이 사용합니다.
_RESTful API의 몇가지 디자인 원칙
- 리소스를 중심으로 디자인 -> ex) 장고 모델, 포스팅, 댓글, 프로필 사진 등등
- 리소스를 중심으로 한 API 구성 예시
- /orders/ 로의 POST 요청 -> 리소스를 직접 명시해주는 것이 좋다.
/create-order/ 로의 POST 요청-> 동사는 url에 적합하지않다.- /customers/ -> 고객 컬렉션
- /customers/5/ -> pk가 5인 고객 -> 직관적인 웹 API
- /customers/5/orders/ -> 고객 5에 대한 모든 주문
- /orders/99/customers/ -> 주문 99의 고객
- 심플하게 URL를 구성하기
- /customers/1/orders/99/products/ -> 유연성이 떨어짐.
- /customers/1/orders/ 를 통해서 고객 1의 모든 주문을 찾은 후에 주소를 /orders/99/products/ 로 변경해서 동일한 처리를 해줌 // 즉 주소가 길어질 시 분할해줌
- 리소스를 중심으로 한 API 구성 예시
- 클라이언트에서 액세스할 수 있는 모든 종류의 개체/서비스가 리소스에 포함함
- 리소스마다 해당 리소스를 고유하게 식별하는 식별자 -> ex) pk, id
- https://adventure-works.com/orders/1
- 요청/응답 포맷으로 흔히 JSON을 사용함 // 과거에는 xml을 사용했었음
- 균일한 인터페이스를 적용
- 리소스에 표준 HTTP 동사 (GET, POST, PUT, PATCH, DELETE)를 적용
HTTP 동사(메소드)
_GET 메서드는 특정 리소스의 표시를 요청합니다. GET을 사용하는 요청은 오직 데이터를 받기만(조회) 합니다.
_POST 메서드는 특정 리소스에 엔티티를 제출할 때 쓰입니다, 즉 새 리소스를 생성 요청합니다. 이는 종종 서버의 상태의 변화나 부작용을 일으킵니다.
_PUT 메서드는 기존 리소스를 대체하고, 요청 본문에 갱신할 리소스 정보를 제공합니다.
_DELETE 메서드는 특정 리소스를 삭제합니다.
_PATCH 메서드는 리소스의 부분만을 수정하는 데 쓰입니다.
https://developer.mozilla.org/ko/docs/Web/HTTP/Methods
요청 / 응답 형식 지정
_요청 : Content-Type 헤더
ex) application/json, image/jpeg, application/pdf 등 요청시에 처리를 원하는 형식을 url에 지정하면, 서버에서는 해당 형식으로 응답합니다.
_서버에서 해당 형식을 지원하지 않는다면 HTTP 상태 코드 415 (지원하지 않는 미디어 유형)을 반환합니다.
django-rest-framework
_ 장고의 패러다임 하에 빠르고 관리하기 쉬운 API를 만들 수 있습니다.
_ DRF는 REST API 컨셉을 쉽게 만들 수 있도록 도와줍니다.
_ Serializer / ModelSerializer를 통한 데이터 유효성 검증 및 데이터 직렬화 -> Json
_ 각종 Parser를 통한 데이터 처리
_ APIView / Generic / ViewSet / ModelViewSets 를 통한 요청 처리
_ 각종 Render를 통한 다양한 응답 포맷 지원 -> xml, pdf, excel etc...
_ 인증(Authentication) / 권한(Permission) 체계 -> 써트파티를 통한 JWT 지원
_ Throttling (최대 호출 횟수 제한)
https://www.django-rest-framework.org/
REST API는 단순히 URL 형식만 맞춰준다고 REST API가 되는게, 아닙니다.
_URL은 'http://{serviceRoot}/{collection}/{id}' 형식이어야 합니다.
_ GET, PUT, DELETE, POST, HEAD, PATCH, OPTIONS를 지원해야합니다.
_ API 버저닝은 Major.minor로 하고, URL에 버전 정보를 포함시킵니다.
프레임워크를 쓴다는 것은, 그 프레임워크가 제시하는 길을
명확히 이해하고 존중하는 것에서 시작합니다.
참고 문서 및 추가 용어 정리
https://docs.microsoft.com/ko-kr/azure/architecture/best-practices/api-design
_아키텍쳐란??
최적화를 목표로 두고, 스템 구성과 동작원리 그리고 시스템의 구성환경등을 설명 및 설계하는 청사진 또는 설계도
https://tuhbm.github.io/2019/04/24/architecture/
_아키텍쳐 스타일이란??
아키텍처 설계에서 반복해서 나타나는 문제를 해결하고 아키텍처가 만족 시켜야하는 시스템 품질 속성을 달성할 수 있는 방법을 정리한 문서
https://itpenote.tistory.com/76
'강의 정리 > Django REST Framework' 카테고리의 다른 글
DRF ViewSet과 Router (0) | 2022.07.13 |
---|---|
DRF mixins 상속을 통한 APIView (0) | 2022.07.12 |
DRF로 APIView, Json 응답뷰 만들기 (0) | 2022.07.11 |
Django JSON 직렬화 (0) | 2022.03.22 |
Django JSON 응답뷰 (0) | 2022.03.12 |