JSON(JavaScript Object Notation)
데이터의 송수신을 자바스크립트의 객체로서 수행할 수 있게 하는 가벼운 문자열 데이터 표현식
django REST framework
API 서버는 데이터만 주고받는다. 스타일이나 로직 없이 JSON 데이터로서 표현된 요청과 응답 결과를 담은 의사만 전달한다.
cf. XML(Extensible Markup Language)
데이터 표현식 중 하나
장점 : JSON에 비해 다양한 데이터를 나타낼 수 있지만
단점 : 데이터의 크기가 너무 크다.
그렇다면 자바스크립트 객체 그대로 보내면 안되나?
답은 안된다.
통신하는 대상, 즉 모든 수신자가 자바스크립트 객체 표현식을 아는건 아니다.
이런 고민을 해결해주기 위해서 자바스크립트 문법(객체)을 그대로 보내는 대신, '만국 공통 자료형'인 '문자열'로 보내는 것이다. 이렇게 송신자는 표현하고자 하는 데이터를 문자열로 변환해서 전송한다. 이 과정을 직렬화(Serialization)이라고 한다.
import json
diary = {
'id': 3,
'title': 'I\'m starving..',
'body': 'Blabla',
}
print(diary)
print(type(diary)) # dict
diary_s = json.dumps(diary) # dumps는 딕셔너리 자료형을 json의 문자열로 변환해준다.
print(type(diary_s)) # str
diary_back = json.loads(diary_s) # loads는 json의 문자열을 딕셔너리 자료형으로 역변환해준다.
print(type(diary_back)) # dict
Http Request & Method
웹상에서 통신을 수행할 수 있게 하는 통신규약, 프로토콜을 http라고 한다.
프로토콜 메소드에는 크게 두가지 GET과 POST 방식이 있다.
http 메소드에 따라서 같은 url 같은 view의 로직이어도 수행하는 업무가 다를 수 있다.
GET은 '갖다주는' 업무를 하고, URL 입력 데이터가 뜬다는 특징을 가지고 있고,
POST는 '처리해주는' 업무를 하고, URL 입력 데이터가 뜨지 않는 특징을 가지고 있다.
Httpie
Httpie는 요청과 응답을 CLI(Command Line)로 구현하는 python 기반의 프로그램이다.
Httpie 설치
pip install --upgrade httpie
Httpie 명령어 : http [flags] [METHOD] URL [ITEM [ITEM]]
flags는 옵션, ITEM은 인자를 뜻한다.
POST, PUT 방식 요청 : =로 표현 ex) x = a
GET 방식 요청 : ==로 표현 ex) x == a
http get "example.com"
http :8000
http get "http://127.0.0.1:8000/classcrud/"
# 보안상의 이유로 요청이 거부된다.
http --form post "http://127.0.0.1:8000/classcrud/newblog/" title="new title" body="new body"
http delete "http://127.0.0.1:8000/classcrud/detail/6"
# httbin.org는 http method를 테스트하기 위한 서버
http "httbin.org/method_name"
http "httbin.org/get" x==1 y==2
http --form post "httbin.org/post" x=1 y="hello"
http --json post "httbin.org/post" x=1 y="hello"
http delete "httbin.org/delete"
'Server > django' 카테고리의 다른 글
[Django] JSON 직렬화 - Serializer (0) | 2020.04.28 |
---|---|
[Django] REST Architecture (0) | 2020.04.28 |
[Django] CRUD (0) | 2020.04.16 |
[Django] 장고 기초 - AWS 배포하기 (0) | 2020.03.05 |
[Django] 장고 기초 - PostgreSQL DB연동 (0) | 2020.03.05 |