이전까지 Django 프레임워크로 웹페이지를 만들어보는 실습을 해봤다면 이제부터는 Django Rest Framework로 실습을 진행해볼까 한다. 먼저 Django와 DRF(Django REST framework)의 차이를 짚고 넘어가자.
1.RESTful의 의미
REST(Representational State Transfer)는 로이 필딩(Roy Fielding)이 자신의 2000년 박사 학위 논문에 정의한 웹 기반 아키텍쳐다. 자원을 이름(자원의 표현)으로 구분하여 해당 자원의 상태(정보)를 주고 받는 모든 것을 의미한다. 즉, 데이터가 요청되어지는 시점에서 자원의 상태(정보)를 전달한다. 그리고 그 표현은 보통 JSON 혹은 XML를 통해 데이터를 주고 받는 것이 일반적이다.
REST는 기본적으로 웹의 기존 기술과 HTTP 프로토콜을 그대로 활용하기 때문에 웹의 장점을 최대한 활용할 수 있는 아키텍처 스타일이다. REST는 네트워크 상에서 Client와 Server 사이의 통신 방식 중 하나이다.
REST의 구체적인 개념
HTTP URI(Uniform Resource Identifier)를 통해 자원(Resource)을 명시하고, HTTP Method(POST, GET, PUT, DELETE)를 통해 해당 자원에 대한 CRUD Operation을 적용하는 것을 의미한다.
#CRUD Operation
Create : 생성(POST)
Read : 조회(GET)
Update : 수정(PUT)
Delete : 삭제(DELETE)
HEAD: header 정보 조회(HEAD)
REST의 장단점
⭕HTTP 프로토콜의 인프라를 그대로 사용하므로 REST API 사용을 위한 별도의 인프라를 구출할 필요가 없다.
⭕HTTP 프로토콜의 표준을 최대한 활용하여 여러 추가적인 장점을 함께 가져갈 수 있게 해준다.
❌표준이 존재하지 않는다.
❌구형 브라우저가 아직 제대로 지원해주지 못하는 부분이 존재한다.(PUT, DELETE를 사용하지 못하는 점)
2.RESTful API 서버란
*API(Application Programming Interface)란
데이터와 기능의 집합을 제공하여 컴퓨터 프로그램간 상호작용을 촉진하며, 서로 정보를 교환가능 하도록 하는 것
REST API의 정의
REST 기반으로 서비스 API를 구현한 것. REST는 HTTP 표준을 기반으로 구현하므로, HTTP를 지원하는 프로그램 언어로 클라이언트, 서버를 구현할 수 있다.
REST API 서버를 구축하기 위한 방법은 여러가지가 있지만, 그 중에 Django 프레임워크를 이용한 Django Rest Framework 패키지에 대한 내용을 정리해보려 한다.
3.Django vs. DRF , JSON
Django와 DRF 둘 다 파이썬기반의 웹 프레임 워크이다. 그러나 Django는 서버와 클라이언트 사이에 html,css,JS주고 받는다(request&response).반면 DRF는 서버와 클라이언트 사이에 JSON형식의 데이터만 상태를 표시하며 주고 받는다.(XML도 데이터표현식 중 하나이나 용량이 커서 JSON에 비해 비선호)
JSON이란
JavaScript Object Notation
데이터의 송수신을 자바스크립트의 객체로서 수행할수 있게끔 하는 가벼운 문자열 데이터 표현식이다.
서버와 클라이언트 사이 주고받는 자료형을 훼손하지 않고 보내도록 가볍게 한것!
Json이 있어 클라이언트와 자바스크립트로 만들어진 서버가 아닌 다른 서버라도(Django,PHP등)통신가능하다.
그 형태는 {"name":"value"} 으로 JavaScript의 객체형식,파이썬의 딕셔너리형과 같다.
Data={
"id":3,
"title":"오늘은",
"body":"내 생일이다"
}
그런데 JSON형식으로 모든 서버와 클라이언트가 통신할 수 있는 것은 아니다. 이해 못할 수도 있으므로
모든 송신,수신체가 알만한 자료형인 "문자열"로 실제로는 주고받는다.
따라서 JSON을 문자열로 바꾸는 방식인 직렬화(Serialization)를 이용하는데, 메모리 효율에도 좋다.
=>즉,클라이언트와 서버사이에 데이터를 JSON모양의 문자열을 주고 받는것!
객체->문자열,객체<-문자열
-Json을 직렬화(<->비직렬화?) 하는 기능을 모듈같이 두었는데 이것이 Python을 지원하므로
(Python 표준 라이브러리에서 JSON을 제공)DRF에서는 import만 하면 쉽게 사용가능하다
참고
https://gmlwjd9405.github.io/2018/09/21/rest-and-restful.html
[Network] REST란? REST API란? RESTful이란? - Heee's Development Blog
Step by step goes a long way.
gmlwjd9405.github.io
*REST API 심화
*REST Architecture
Reprsentational State Transfer
HTTP를 이용해 통신하는 네크워크상에서 정한 약속
분산 하이퍼미디어 시스템을 위한 소프트웨어 설계형식
:자원을 대표하는 단어/식별자로로써 상태(이름)를 전송
웹의 발전 측면에서 REST
네트워크 발전측면에서 REST의 장점 :하위호환을 깨뜨리지 않고 독립적으로 발전했다
REST의 설계 조건
-server-client의 존재
-stateless:클라이언트의 기존상태를 기록하지 않는 연결방식:HTTP가 대표적 프로토콜
-cache:캐시처리할수 있어야
-uniform interface:일관적인 인터페이스
-layered system:계층적 구조
-code-on-demans:원격으로?
API:Application Program Interface,Request와 Response로 오가는 구조화된 데이터
Client:손님
API:웨이터 -서버와 클라이언트 사이의메신저,특정형식에 맞게 전달
-어떤 형식으로 주고받겠다는 '형식':API문서
Server:요리사
-클라이언트의 요청에 따라 다른 결과
REST API:REST 아키텍쳐 스타일을 따르는 API
-REST API를 제공하는 웹서비스:Restful 하다
-REST아키텍쳐 스타일을 따르는 API가이드라인 링크
-설계원칙을 잘 따르는 API
-HTTP기반으로 CRUD를 구현할 수 있는 API
*현대의 REST API는 조건들을 잘 지키즈는 못한다:
-JSON으로는 모든 태그가 만들어져 있는게 아니라서 만든이가 정의하기 나름
-JSON데이터가 어디서 와서 어디로 가는지 모른다
->이들 모두를 알려면 REST의 탄생 목적에서 벗어나게 된다(하위호환 유지가능하고 독,립,적 발전하는)
-uniform interface의 상세조건을 모두 지키기 힘들다
'[Python,Django]' 카테고리의 다른 글
Django Rest Framework 2.실습-Serializer,ViewSets (0) | 2020.03.16 |
---|---|
Django Rest Framework 1.이론2 (0) | 2020.03.14 |
Generic View (0) | 2020.03.13 |
Anaconda 에서 vs code 에디터 사용하기 (0) | 2020.03.06 |
Python 파이썬 기초 문법 (0) | 2020.03.06 |