[Django] REST API

3849 단어 djangodjango

HTTP

HyperText Transfer Protocol

  • 웹 상에서 컨텐츠를 전송하기 위한 약속
  • 웹에서 이루어지는 모든 데이터 교환의 기초
  1. 요청(Request): 클라이언트에서 서버로
    • 클라이언트에 의해 전송되는 메시지
    • Method + Path + Version of the protocal + Headers
  2. 응답(Response): 서버에서 클라이언트에게
    • 서버에서 응답으로 전송되는 메시지
    • Version of the protocol + Status code + Status message + Headers

HTTP Request methods

자원에 대한 행위를 정의

  • HTTP Medhod
    - GET (조회)
    - POST (작성)
    - PUT (수정)
    - DELETE (삭제)

HTTP Response status codes

특정 HTTP 요청이 성공적으로 완료되었는지 여부를 나타냄

  1. 1xx : Informational response
  2. 2xx : Successful response
  3. 3xx : Redirection message
  4. 4xx : Client error response
  5. 5xx : Server error response

참고: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status

URI (Uniform Resource Identifier)

리소스 식별을 위해 사용됨

  • 리소스(resource): HTTP 요청의 대상
    • 리소스는 문서, 사진 또는 기타 대상이 될 수 있다.
  • 통합 자원 식별자
  • 인터넷의 자원을 식별하는 유일한 주소
  • URI = URL + URN

URL(Uniform Resource Locator)

  • 통합 자원 위치
  • 네트워크 상 자원이 어디 있는지 알려주기 위함

URN (Uniform Resource Name)

  • 통합 자원 이름
  • URL과 달리 자원의 위치에 영향을 받지 않는 유일한 이름 역할

URL의 구조

  • Scheme(protocol)
  • Host(Domain name)
  • Port
  • Path
  • Query(Identifier)
  • Fragment

RESTful API

REST 원리를 따라 설계한 API

  • 프로그래밍을 통해 클라이언트의 요청에 JSON을 응답(데이터)하는 서버를 구성

API (Application Programming Interface)

프로그래밍 언어가 제공하는 기능을 수행할 수 있게 만든 인터페이스

  • 애플리케이션과 프로그래밍으로 소통하는 방법

소통 방법들

CLI

  • 명령줄을 통해 소통(특정 기능 수행)

GUI

  • 그래픽을 통해 소통(특정 기능 수행)

API

  • 프로그래밍을 통해 소통(특정 기능 수행)

Web API

웹 애플리케이션 개발에서 다른 서비스에 요청을 보내고 응답을 받기 위해 정의된 명세

  • 현재는 Open API를 활용하는 추세
    - ex) TMDB API : 서비스에 요청을 보내고, 영화에 대한 데이터(응답)를 JSON형태로 받음 (영화에 대한 정보를 제공하는 별도의 다른 서비스)
  • 응답 데이터 타입
    - HTML, XML, JSON

REST (REpresentational State Transfer)

API Server를 개발하기 위한 일종의 소프트웨어 설계 방법론

  • 네트워크 구조 원리의 모음
  • REST 원리를 따르는 시스템을 'RESTful' 용어로 지칭

REST 자원과 주소의 지정 방법

  1. 자원(정보)
    • URI로써 식별
  2. 행위 (URI를 통한 자원에 대한 행위)
    • HTTP Method (GET/POST/PUT/DELETE)
  3. 표현
    • 자원과 행위를 통해 궁극적으로 표현되는 결과물
    • JSON으로 표현된 데이터

JSON (JavaScript Object Notation)

"JSON is a lightweight data-interchange format"
(데이터의 송/수신을 자바스크립트 객체로서 수행할 수 있게끔 하는 가벼운 문자열 데이터 표현식)

  • JavaScript의 표기법을 따른 단순 문자열
  • 파이썬의 dictionary타입, 자바스크립트의 object타입으로 변환할 수 있는 key-value 형태 구조

Serialization

데이터 구조나 객체 상태를 동일하거나 다른 컴퓨터 환경에 저장하고 나중에 재구성할 수 있는 포멧으로 변환하는 과정
(자바스크립트 객체를 JSON으로 바꾸는 과정)

  • Django에서 Serializer는 Queryset 및 Model Instance(단일 객체의 경우)같은 복잡한 데이터를 JSON이나 XML 등의 유형으로 쉽게 변환할 수 있는 Python 데이터 타입으로 만들어 준다.

DRF

Django REST Framework
클라이언트의 요청에 따라 JSON을 돌려주며 소통

  • Web API 구축을 위한 Toolkit를 제공하는 라이브러리
  • DRF의 Serializer는 Django의 Form 및 ModelForm 클래스와 매우 유사하게 구성되고 작동함
$ pip install djangorestframework

좋은 웹페이지 즐겨찾기