DRF
Django REST framework
Django를 기반으로 한 웹 프레임워크
RESTful API를 구축하기 위한 도구
Pure Django는 모델-뷰-컨트롤러(MVC) 아키텍처 기반으로
백엔드 로직과 데이터 처리를 처리하도록 설계되어 있음
프론트엔드/백엔드 분리!
백엔드는 데이터 부분만 처리해 json 형식으로 보내주는 방식
웹브라우저 흐름
- DNS(Domain name system) 조회
- HTTP 요청 메시지 작성
- Socket 라이브러리를 통해 전달
- TCP/IP 작성되고 이 안에 HTTP 메시지가 포함
프로토콜 계층
어플리케이션 → Socket Library → TCP → IP → LAN → 인터넷
Internet Protocol
- 지정한 IP주소로 전송
- 출발지 IP와 목적지 IP를 작성
- 송신하면 노드들을 거쳐서 송신이 됨
- 받을 대상이 없을 수 있다
- 중간에 패킷이 손실되거나 순서대로
TCP
- IP를 TCP로 보완
- 출발지 port와 목적지 port 정보
- 전송제어와 순서
- 검증 정보 등
- 연결지향 TCP 3 way handshake
UDP
User Datagram Protocol
TCP 기능들이 없다
IP와 유사한데 포트와 체크섬만 추가
PORT
항구
URI (Uniform Resource Identifier) : 리소스 식별
URL
URN
포트는 같은 IP내에서 프로세스 구분을 해줄 수 있다
포트 생략시 http 80 https 443
http가 더 옛날 방식이고 그걸 보완한 https가 더 안전한 방식
HTTP
HyperText Transfer Protocol
원래는 HTML 전송용, 현재는 모든 형태를 전송
클라이언트 서버 구조
클라이언트는 Request를 보내고 Response를 기다림
무상태 프로토콜(Stateless) (↔ Stateful)
세션이 종료될 때까지 클라이언트 세션 정보를 저장하지 않음
무상태는 응답 서버를 쉽게 바꿀 수 있음
세션 로그인은 상태가 있음. 최소한으로만 사용한다는 개념
비연결성
연결 유지를 하지 않으며 최소한의 자원 사용
HTTP는 기본적으로 연결을 유지하지 않음
초단위 이하의 빠른 응답
HTTP 메시지
요청메시지와 응답메시지가 다르게 생김
중요한 것은 리소스 식별
리소스
회원이라는 개념. 이것이 URI에 매핑되며
거기에 하는 행위가 메서드로 하는 것
Restful API
리소스와 행위를 분리하는 것
- 리소스 : 회원
- 행위 : 조회, 등록, 삭제, 변경
메서드의 종류
- GET : 조회
데이터를 쿼리스트링으로 전달
- POST : 등록
메시지 바디를 통해 서버로 요청 데이터 전달
데이터 처리
프로세스 처리
새로운 리소스가 생성되지 않을 수도 있음
JSON으로 조회 데이터를 넘기고 싶은데 GET 메서드를 쓰기 힘든 경우
- PUT : 대체, 혹은 생성
파일 붙여넣기와 동일. 없으면 만들고 있으면 덮어쓴다
포스트와의 차이점 : PUT은 클라이언트가 URI를 지정하여 보냄
- PATCH : 부분 변경
- HEAD : GET과 동일하지만 상태줄과 헤더만 반환
- DELETE
- CONNECT
- OPTIONS
- TRACE
https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods
데이터 전송
- 쿼리 파라미터 : GET (검색, 정렬 필터)
- 메시지 바디 : POST, PUT, PATCH (회원가입, 상품주문, 리소스 등록 변경)
HTML Form : GET, POST만 지원
Content-Type: application/x-www-form-urlencoded
Content-Type: multipart/form-data
HTTP API : POST, PUT, PATCH도 메시지 바디로 데이터 전송 가능
서버 to 서버, 앱 클라이언트, 웹 클라이언트(ajax)
Content-Type: application/json
API 설계 예시
회원 관리 - 컬렉션 기반
- GET /members : 회원 목록
- POST /members : 회원 등록
- GET /members/{id} : 회원 조회
- PATCH,PUT,POST /members/{id} : 회원 수정
- DELETE /members/{id} : 회원 삭제
HTTP Header
종류가 많음
field-name(key)는 대소문자 구분이 없다
content-type = Content-Type
표현 Header
리소스에 대한 정보. (html, xml, json)
Content-Type : 형식
- text/html; charset-utf-8
- application/json
- image/png
https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers
공식 문서 읽기
https://mypy.readthedocs.io/en/stable/
https://black.readthedocs.io/en/stable/#
https://django-ninja.rest-framework.com/
Django 배포할 때 runserver로 해도 되나요?
https://uiandwe.tistory.com/1268
'Django' 카테고리의 다른 글
파이썬 장고 실무 심화 2주차 1_api view, response (0) | 2023.04.19 |
---|---|
DRF 시작하기 (0) | 2023.04.19 |
HTTP response status codes 상태 코드 (0) | 2023.04.18 |
Django 이미지 파일 삭제 cleanup (2) | 2023.04.16 |
Django 한국 시간 설정 (0) | 2023.04.16 |