-
[Django] REST framework공부/Django 2020. 8. 4. 20:01
필요성
설명이 잘되어 있어서 첨부합니다!
프론트 개발자와 협력하여 프로젝트를 진행하다 보면 REST API의 필요성을 느끼는 순간이 분명 온다. 가령, 프론트 개발자가 React JS를 쓰려고 한다면 정보 송수신을 어떻게 할 것인가? 프론트로부터 정보를 받고 데이터베이스에 저장하는 것은 기존의 방법으로 할 수 있겠지만 정보를 전달하려면 REST API를 써야 한다. 이때는 Django Rest Framework(DRF)를 사용하여 코드를 작성해야 한다.
처음에는 이 과정이 귀찮을 수 있다. 사실 기존에 있던 코드를 탈바꿈하는 것을 누가 반기겠는가? 하지만, 현재 그 과정을 겪고 REST API를 사용하여 프로젝트를 진행하고 있는 일인으로서 귀찮음에 대한 대가는 충분히 크다고 말하고 싶다.
REST API를 활용하지 않는다면 프론트와 백엔드의 완전한 분리가 불가능하다.
URL을 바라보는 측면 <RPC 와 REST>
url은 웹 클라이언트에서 호출한다는 시점에서 보면, 웹 서버에 존재하는 애플리케이션에 대한 API 라고 할 수 있다.
API의 명명 규칙을 정하는 방법 두 가지 RPC , REST
RPC
클라이언트가 네트워크 상에서 원격에 있는 서버가 제공하는 API 함수를 호출하는 방식
URL 설계 == API 설계
URL의 경로 API 함수명 쿼리 파라미터 함수의 인자 URL 경로가 대부분 동사
http://kimgaegul.tistory.com//search?q=test&debug=true
REST = Representational State Transfer
웹 서버에 존재하는 요소들을 모두 리소스라고 정의하고 URL을 통해 웹 서버의 특정 리소스를 표현한다.
리소스는 시간이 지남에 따라 상태가 변할 수 있다.
-> 데이터의 교환을 리소스의 상태의 교환으로 간주
리소스에 대한 조작은 HTTP 메소드로 구분
-> GET, POST, PUT, DELETE 등
URL 전송 == 웹 서버의 있는 리소스 상태에 대한 데이터 주고 받기
http://kimgaegul.tistory.com//search//test
- 자원의 표현에 의한 상태 전달
- HTTP를 이용해 통신하는 네트워크상에서 정한 약속
- 분산 하이퍼미디어(웹, 앱 등) 시스템을 위한 소프트웨어 설계 형식
자원 : 인터넷에서 제공하고 얻을 수 있는 모든 것
Representational : 자원을 대표하는 단어 or 식별자료
State Transfer : 자원의 상태를 전송하는 방법
- 하위 호환을 깨뜨리지 않고 독립적 발전, (일일이 패치버전이 나온 것을 알려주지 않을 수 있음 )
REST 설계 조건(필요충분조건)
1. Sercer - Client
2. STATELESS : 클라이언트의 이전 상태를 기록하지 않는 연결 방식( http가 대표적)
3. Cache
4. Uniform Interface
5. Layered System
6. Code-On-Demand : 자바스크립트처럼 서버와 같은 원격장소에서 옴
API
Application Programming Interface
이런 형식으로 주고받겠다는 '형식' = api 문서
REST API
REST 아키텍쳐 스타일을 따르는 API
=설계 조건을 잘 지키는 API
설계 조건을 잘 지킬까?
`NONO`
why 안지켜?
- Json을 사용하기 떄문
- Json 모든 태그가 만들어져 있는 것도 아님, 만든 이가 정의하기 나름
좀 더 자세하게 아래가 지켜지지 않기 때문에 REST 설계 조건을 충족하지 못한다.
4. Uniform Interface : 일관된 인터페이스를 지켜야 한다.
self-descriptive message
메세지는 그 하나만으로 모든 것이 설명되어야 한다.
예) 목적지, 송신지, 어떤 언어, 어떤 문법, 어떻게 읽을 지
JSON : HOST 도메인, Content type 헤더, json 명세 등등안지킴HATEOAS
애플리케이션의 상태는 하이퍼링크를 이용해서 전이되어야한다.
예측가능성, 투명한 정보 전이
'공부 > Django' 카테고리의 다른 글
[Django] 작성한 글의 Search 기능 구현 (0) 2020.08.05 [Django] 내가 작성한 글만 Filtering (0) 2020.08.05 [Django] DRF 시작하기 (0) 2020.08.05 [Django] Json (0) 2020.08.04 django.db.utils.OperationalError: no such table: auth_user 에러 (0) 2020.07.28