Django API와 REST

2022. 3. 10. 11:25강의 정리/Django REST Framework

반응형

출처 : https://www.inflearn.com/course/%ED%8C%8C%EC%9D%B4%EC%8D%AC-%EC%9E%A5%EA%B3%A0-%EC%9B%B9%EC%84%9C%EB%B9%84%EC%8A%A4/dashboard

 

장고(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의 몇가지 디자인 원칙

  1. 리소스를 중심으로 디자인 -> 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/ 로 변경해서 동일한 처리를 해줌 // 즉 주소가 길어질 시 분할해줌 
  2. 클라이언트에서 액세스할 수 있는 모든 종류의 개체/서비스가 리소스에 포함함
  3. 리소스마다 해당 리소스를 고유하게 식별하는 식별자 -> ex) pk, id
    • https://adventure-works.com/orders/1
  4. 요청/응답 포맷으로 흔히 JSON을 사용함 // 과거에는 xml을 사용했었음
  5. 균일한 인터페이스를 적용
    • 리소스에 표준 HTTP 동사 (GET, POST, PUT, PATCH, DELETE)를 적용

 

 

HTTP 동사(메소드)

 

_GET 메서드는 특정 리소스의 표시를 요청합니다. GET을 사용하는 요청은 오직 데이터를 받기만(조회) 합니다.

 

_POST 메서드는 특정 리소스에 엔티티를 제출할 때 쓰입니다, 즉 새 리소스를 생성 요청합니다. 이는 종종 서버의 상태의 변화나 부작용을 일으킵니다.

 

_PUT 메서드는 기존 리소스를 대체하고, 요청 본문에 갱신할 리소스 정보를 제공합니다.

 

_DELETE 메서드는 특정 리소스를 삭제합니다.

 

_PATCH 메서드는 리소스의 부분만을 수정하는 데 쓰입니다.

https://developer.mozilla.org/ko/docs/Web/HTTP/Methods

 

HTTP 요청 메서드 - HTTP | MDN

HTTP는 요청 메서드를 정의하여, 주어진 리소스에 수행하길 원하는 행동을 나타냅니다. 간혹 요청 메서드를 "HTTP 동사"라고 부르기도 합니다. 각각의 메서드는 서로 다른 의미를 구현하지만, 일부

developer.mozilla.org

 

 

요청 / 응답 형식 지정

 

_요청 : 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/

 

Home - Django REST framework

 

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

 

웹 API 디자인 모범 사례 - Azure Architecture Center

플랫폼 독립성과 서비스 진화를 지원하는 웹 API 설계를 위한 모범 사례를 알아봅니다.

docs.microsoft.com

 

 

_아키텍쳐란??

 

최적화를 목표로 두고, 스템 구성과 동작원리 그리고 시스템의 구성환경등을 설명 및 설계하는 청사진 또는 설계도

https://tuhbm.github.io/2019/04/24/architecture/

 

아키텍처란 무엇인가?

용어정리이 카테고리는 비전공자로서 개발자로써 공부하며, 평소 이해하지 못한 단어를 제방식대로 정리하는 카테고리입니다.제방식대로 풀어 쓴것이므로 오류가 있을 수 있습니다.오류가 있

tuhbm.github.io

 

 

_아키텍쳐 스타일이란??

 

아키텍처 설계에서 반복해서 나타나는 문제를 해결하고 아키텍처가 만족 시켜야하는 시스템 품질 속성을 달성할 수 있는 방법을 정리한 문서

https://itpenote.tistory.com/76

 

소프트웨어 아키텍처 스타일(Software Architecture Style)

MVC (Model, View, Control), 저장소, 클라이언트-서버, 데이터플로우, 계층형 I. 시스템 품질 향상을 위한 패턴, 소프트웨어 아키텍처 스타일의 개요 가. 소프트웨어 아키텍처 스타일(Software Architecture Sty

itpenote.tistory.com

 

 

반응형

'강의 정리 > 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