REST (Representational State Transfer)
- API Server를 개발하기 위한 일종의 소프트웨어 설계 "방법론"
- REST API : REST라는 설계 디자인 약속을 지켜 구현한 API
RESTful API
- REST 원리를 따르는 시스템을 RESTful 하다고 부름
- "자원을 정의"하고 "자원에 대한 주소를 지정"하는 전반적인 방법을 서술
- 자원의 "식별"
- 자원의 "행위"
- 자원의 "표현"
- JSON 데이터
- 궁극적으로 표현되는 데이터 결과물
자원의 식별
- 인터넷에서 리소스(자원)를 식별하는 문자열
- 가장 일반적인 URI는 웹 주소로 알려진 URL
- 웹에서 주어진 리소스의 주소
- 네트워크상에 리소스가 어디 있는지를 알려주기 위한 약속

Schema (or Protocol)
- 브라우저가 리소스를 요청하는 데 사용해야 하는 규약
- URL의 첫 부분은 브랑줘가 어떤 규약을 사용하는지를 나타냄
- 기본적으로 웹은 http(s)를 요구하며 메일을 열기 위한 mailto:, 파일을 전송하기 위한 ftp: 등 다른 프로토콜도 존재
Domain Name
- 요청중인 웹 서버를 나타냄
- 어떤 웹 서버가 요구되는지를 가리키며 직접 IP 주소를 사용하는 것도 가능하지만, 사람이 외우기 어렵기 때문에 주로 Domain Name으로 사용
- 예를 들어 도메인 google.com의 IP 주소는 142.251.42.142
Port
- 웹 서버를 리소스에 접급하는데 사용되는 기술적인 문(Gate)
- HTTP 프로토콜의 표준 포트
- 표준 포트만 작성시 생략 가능
Path
- 웹 서버의 리소스 경로
- 초기에는 실제 파일이 위치한 물리적 위치를 나타냈지만, 오늘날은 실제 위치가 아닌 추상화된 형태의 구조를 표현
- 예를 들어 /articles/create/라는 주소가 실제 articles 폴더 안에 create 폴더 안을 나타내는 것은 아님
Parameters
- 웹 서버에 제공하는 추가적인 데이터
- '&' 기호로 구분되는 key-value 쌍 목록
- 서버는 리소스를 응답하기 전에 이러한 파라미터를 사용하여 추가 작업을 수행할 수 있음
Anchor
자원의 행위
HTTP Request Methods
- 리소스에 대한 행위(수행하고자 하는 동작)를 정의
- HTTP verbs라고도 함
대표 HTTP Request Methods
- GET
- 서버에 리소스의 표현을 요청
- GET을 사용하는 요청은 데이터만 검색해야 함
- POST
- 데이터를 지정된 리소스에 제출
- 서버의 상태를 변경
- PUT
- DELETE
HTTP response status codes
- 특정 HTTP 요청이 성공적으로 완료되었는지 여부를 나타냄
- 5개의 응답 그룹
- Informational responses (100-199)
- Successful responses (200-299)
- Redirection messages (300-399)
- Client error responses (400-499)
- Server error responses (500-599)
자원의 표현
- REST API 는 JSON 타입으로 응답하는 것을 권장
python으로 json 응답 받기
import requests
from pprint import pprint
response = requests.get('http://127.0.0.1:8000/api/v1/articles/')
result = response.json()
print(type(result))