2020. 10. 5. 23:25ㆍdjango
이번 글에서 볼 내용은 Rest API이다. 지금까지는 django를 html즉 templates를 이용해서 표현을 했는데 이번 글부터는 django에서 표현을 html로 표현하는것이아니라 데이터로 사용할수 있게 JSON으로 넘겨준다.
오늘의 주제
- API Server
- RESTful API
- Django REST Framework
1. API Server
API란?
Application Programming Interface의 약자로
운영체제나 프로그래밍 언어가 제공하는 기능을 제어할수 있게 만드는 인터페이스
Application과 Programming은 대충 먼지 알겠는데 Interface는 들어는 봤는데 정확히 뭐지??
I(Interface)?
Interface에 대해서 알아보기전 Interface라는 용어를 쓰는 단어들을 먼저 예시로 보면
CLI
gitbash같이 명령으로서 소통하는것
GUI
아이콘을 통해 접속을해서 소통하는것
등의 뜻을 가진 단어들이 있다.
이제 API의 뜻을 알아보면 다음과 같은 뜻이 있다.
API
프로그래밍을 통해 무언가를 하는것
그래서 우리의 첫번째 주제인 API server는 사용자에 요청에 대해서 서버가 응답해 주는것
위의 첫번째 그림은 이전까지 했던 HTML을 넘겨주는것인데 우리는 이제부터 HTML대신 JSON을 넘겨준다.
이때 API를 쓰는 이유도 JSON을 넘겨주기 위해서 인데 HTML을 사용하면 페이지 전체가 바뀌는것이므로 어떠한 동작을 했을때 전체 페이지가 다시 로드되지만 JSON을 사용하면 일부분만 바뀌기 때문에 JSON을 사용한다.
지금까지 우리는 API를 사용하는 사용자였지만 지금부터는 프로그래밍을 통해 요청에 JSON을 응답하는 서버를 만드는 제공자가 되어볼것이다.
2. RESTful API
지금부터는 2번째 주제인 RESTful API에 대해서 설명하겠다.
REST는 REpresentational State Transfer(상태전송표현)의 약자로
자원을 정의하고 자원에 대한 주소를 지정하는것을 말한다. 웹상의 자료를 HTTP위에서 전송하기 위한 간단한 인터페이스로
자원과 주소의 지정 방법이다.
REST 구성
REST의 구성은 다음과 같이 세부분으로 나뉜다.
REST 중심 규칙
REST의 중심 규칙은 위의 세가지와 당연히 관련이 있다. 두 가지 규칙이 있다.
- URI는 정보의 자원을 표현해야한다.
- 자원에 대한 (어떠한)행위는 HTTP Method로 표현한다.
첫번째 규칙에 대해서 설명하면 우리에게는 URI대신 지금까지 계속 사용했던 URL이 조금 더 익숙할 것이다.
그래서 URI를 이해하기 위해 비슷하게 생긴 URL에 대해서 먼저 알아보면
URL(Uniform Resource Locator) 파일 식별자
네트워크 상에서 자원이 어디에 있는지를 알려주기 위한 규약으로
인터넷에서 자원 위치를 말한다.
과거에는 위치는 서버상의 물리적인 위치를 말했지만 지금은 추상적인 위치를 뜻한다.
URI(Uniform Resource Identifier) 통합 자원 식별자
인터넷에 있는 자원을 나타내는 유일한 주소를 말하고
하나의 리소스를 가리키는 문자열 가장 흔한 URI는 URL로 URL은 URI에 포함된다.
우리가 어떤 사이트를 접속하기 위해서는 주소를 입력한다. 이때 주소는 각각 의미를 가지고 있는데
주소에 대해서 알아보면
http
(Scheme/Protocla)://localhost
(Host):3000
(Port)/posts/3
(path)
http://google.com/search?`q=http`(Query)
http://getbootstrap.com/docs/4.1/layout/overview`#containers`(fragment)
- Protocol은 어떠한 규약
- Host는 메인서버 주소
- Port는 어떠한 메인 서버에서 열어놓은 문으로 기본포트 예시로는 http는 8000 https는 443이다.
- Path는 django를 하면서 했던 그때에 해당하는 그 주소를 의미
- Query는 get 요청같은거 했을때 경우에 key와 value해당하는 의미
- fragment는 html의 문서가 길경우 우리가 원하는 리소스를 한번에 찾기 어려울때 마치 북마크를 걸어놓는것처럼 바로 해당하는 곳에 갈경우 이거는 서버에서 요청 x 브라우저에서 하는것
두 번째 REST 중심 규칙인2. 자원에 대한 (어떠한)행위는 HTTP Method로 표현한다.
에 대해서 알아보면
HTTP Method
HTTP(Hyper Text Transfer Protocol)는 어떠한 컨텐츠를 전송하기 위한 프로토콜(규약)으로
HTTP의 기본속성은 다음과 같다.
- Stateless : 상태 정보가 저장되지 않음
- Connetless : 서버에 요청을 하고 응답을 한 이후에 연결은 끊어짐
이 내용은 이전글의 쿠키와 세션에서 한번 배웠었다.
그래서 HTTP에 대해서 알아보았고
HTTP Method의 종류에 대해서 알아보면
- GET : 지정 리소스의 표시를 요청하며, 오직 데이터를 받기만 함
- POST : 클라이언트 데이터를 서버로 보냄
- PUT/PATCH : 서버로 보낸 데이터를 저장/지정리소스의 부분만을 수정
- DELETE : 지정 리소스를 삭제
위의 Method중 우리에겐 PUT
보다는 앞에서 계속 해왔던 update
가 조금더 익숙할 것이다.
이제부터는 수정에 관련한것은 모두 PUT을 사용할것이다.
이제 RESTful의 두가지 중심규칙에 대해서 모두 알아보았는데 이제 예시를 통해 RESTful이 어떤것인지 예시로 한번 더 살펴보면
GET /articles/1/read/ 잘못됨 동사가 들어있는데 이거는 httpmethod로 표현해야함
GET /articles/1/ 따라서 이게 맞음 자원만 표시
GET /articles/1/delete/ X
DELETE /articles/1/ O
GET /articles/1/create/ X
POST /articles/1/ O
실제 예시
GET /samsug.com/sec/
위의 예시들을 보면 행동은 Method로 주소는 URI로 표현하는것을 알수 있다.
그리고 RESTful은 계층적 상위범주에서 하위범주에서 아래와 같이 내려온걸 확인가능하다.
실제 삼성 홈페이지를 보면 다음과 같이 나타나있는데
GET /smartphones/ 스마트폰
GET /smartphones/galaxy-note20/ 스마트폰중 갤럭시 20
GET /smartphones/galaxy-note20/accessories/ 스마트폰 중 갤럭시 20의 악세사리
이처럼 URI는 정보를 표현하는것 뿐만아니라 계층적표현을 한다.
한번더 강조하면
URI은 정보 표현
HTTP Method는 조작행위
를 말한다.
Django REST Framwork
이제 마지막 주제인 Django REST Framwork에서 설명한다.
하나씩 모르는 용어에 대해서 알아보면
Django REST Framwork에서 REST
는 http protocol을 조금더 잘써보자에 대한 주제의 논문안에 있던 내용으로
data가 포함되고 그리고 data를 표현하는 metadata 포함되고 그리고 그 metadata를 설명하는 데이터 포함된다라는 문구로 설명이 되어있다. 굉장히 난해한데 지금은 데이터의 표현? 이라고 알아두면되는데 예시로는 당분간 우리는 REST는 JSON이라고 칭할것이다. 이것이 완전 정확한 내용은 아니기 때문에 지금 당장은 이렇게 알고 차후에 정의를 다시 내릴것이다.
JSON
REST를 JSON이라고 했으니 JSON에 대해알아보면
JSON은 {"Key": Value}로 표현할수 있고
JavaScript Object Notation으로 자바스크립트의 object 표기법을 따라한 데이터를 JSON이라고 한다.\
JSON의 문자 교환 형식
JSON은 가벼운 데이터 교환 형식 사람이 읽거나 쓰기 굉장히 편함 머신들도 해석하거나 만들기 편함
text format인데 완전하게 언어 독립적인 format
여러가지 언어로 변환(조작)가능함 그래서 편함
JSON -> 데이터 덩어리 인데 각 언어별로 데이터 덩어리로 무언가를 할수있다.
지금까지 배운것은 client가 무언가를 요청하면 서버는 문서하나(HTML)를 줌
이때 HTML은 문서하나로 완성이 되기 때문에 HTML에서 원하는 정보를 뽑아내기가 어렵다.
그리고 더 나아가서 ISO나 안드로이드등 여러가지 언어? 경우? 에서 사용할경우 더욱 더 어렵다.
따라서 우리는 요청의 응답으로 HTML대신 JSON을 주면 조금더 원하는 정보를 뽑아내기가 쉬울것이기 때문에 JSON을 준다.
결국에는 Data Serving에 집중하자는 것이다.
즉 지금까지는 서버에서 어떠한 그림을 던져줬다면 지금부터는 JSON(데이터)을 던져주자는것 이게 편하기때문에
우리가 JSON을 던져주면 JSON을 다시 프로그램으로 조작해서 사용자에게 줌 이때 사용하는 프로그램이 자바스크립트
그래서 앞으로의 목표는 프로그래밍을 통해 요청에 RESTful한 방식으로 JSON을 응답하는 서버를 만드는것이다.
Django REST Framwork
Django REST Framwork 에는 Serialization(직렬화)이라는 말이 나오는데 이게 설명하기가 조금 어렵다.
Serialization은 queryset이나 다른 인스턴스를 JSON으로 바꾸어주는것을 뜻한다.
정리해서 말하면 어떠한 데이터 타입을 JSON이나 XML로 바꾸는것을 Serialization 이라고 함
그리고 REST framework는 django의 form과 modelform과 비슷
JSON이 HTML의 역할을 하고 (Response)
ModelSerializer가 ModelForm의 역할을한다. (Model)
이제 Rest API의 3가지 주제에 대한 설명이 끝이 났다. 이제 부터는 조금 코드와 함께 알아보겠다.
응답을 HTML로 표현하고 응답했던 django를 JSON으로 표현하고 응답하는것으로 변환한다고 생각하면 조금 더 편하게 받아 들일수 있을것같다.
'django' 카테고리의 다른 글
2. Django app (0) | 2020.10.08 |
---|---|
5. Django AUTH (0) | 2020.10.08 |
3. Django CRUD (0) | 2020.10.08 |
1-2. Django Start (0) | 2020.10.06 |
1. Django? (0) | 2020.10.06 |