REST API
API (Application Programming Interface)
- 프로그래밍 언어가 제공하는 기능을 수행할 수 있게 만든 인터페이스
- 어플리케이션과 프로그래밍으로 소통하는 방법
- 프로그래밍을 활용해서 할 수 있는 어떤 것
- CLI, GUI는 각각 명령줄과 그래픽(아이콘)을 통해서 특정 기능을 수행하는 것이며, API는 프로그래밍을 통해 그 일을 수행할 수 있음
Web API
- 웹 어필리케이션 개발에서 다른 서비스에 요청을 보내고 응답을 받기 위해 정의된 명세
- 현재 웹 개발은 추가로 모든 것을 개발하지 않고 여러 Open API를 가져와서 활용하는 추세
- 예시) 구글 및 카카오 지도 API, 우편번호/도로명/지번 검색 API 등
- API Server
- Client가 Server에 요청
- Server는 Client에 응답(비디오, 문서, 이미지, 애플리케이션 등)
- 우리는 기존에 응답의 형태로 HTML 문서를 전송
- JSON 데이터로 응답을 주고 해당 데이터를 활용하게 끔 유도
- (JSON 데이터를 주로 사용하는 이유는 하단에서 다룰 예정)
"프로그래밍을 통한 요청에 JSON을 응답하는 서버를 만들자"
REST API
Representaitional State Transfer
- 웹 설계 상의 장점을 최대한 활용할 수 있는 아키텍처 방법론
- 네트워크 아키텍처 원리의 모음
- 자원(데이터)을 정의
- 자원에 대한 주소를 지정하는 방법
- REST 원리를 따르는 시스템 혹은 API를 RESTful API라고 하기도 함
- 즉, 자원과 주소를 지정하는 방법
- REST 구성
- 자원 URI
- 행위 HTTP Method
- 표현 Representations
1. URI
- Uniform Resource Identifier
- 통합 자원 식별자
- 인터넷의 자원을 나타내는 유일한 주소
- 인터넷에서 자원을 식별하거나 이름을 지정하는데 사용되는 간단한 문자열
- 하위 개념으로 URL, URN이 존재
URL
- Uniform Resource Locator
- 통합 자원 위치
- 네트워크 상에 자원(리소스)이 어디 있는지(주소)를 알려주기 위한 약속
- 자원은 HTML 페이지, CSS 문서, 이미지 등이 될 수 있음
- '웹 주소' 또는 '링크'라고도 불림
URN
- Uniform Resource Name
- 통합 자원 이름
- URL과 달리 자원의 위치에 영향을 받지않는 유일한 이름 역할을 함 (독립적 이름)
- 자원의 이름이 변하지 않는 한 자원의 위치를 이곳 저곳 옯겨도 문제없이 동작
- 예시
- ISBN (국제표준도서번호)
- ISBN 0-486-27557-4 : 로미오와 줄리엣
- 실제로 직접 작성하는 경우는 매우 드묾
URL과 URN 비교 예시
- '서울시 여의도 MBC'
- 만일 MBC가 새로운 곳으로 이사 가게 된다면,
- 더 이상 위의 주소(URL)로 MBC를 찾을 수 없음
- 새로운 주소(URL) '상암 MBC'로 찾아야 함
- 하지만 MBC가 다른 곳으로 가더라도 URN을 통해 MBC라는 것을 식별 가능
- 즉, MBC라는 고유한 이름(URN)은 변함 없음
- URN은 자원의 ID를 정의, URL은 자원을 찾는 방법을 제공
- 따라서 URN과 URL은 상호 보완적
- URI는 크게 URL과 URN으로 나눌 수 있지만, URN을 사용하는 비중이 매우 적기 때문에 일반적으로 URL은 URI를 통칭하는 말로 사용하기도 함
URI 설계 주의 사항
- 밑줄(_)이 아닌 하이픈(-)을 사용
- URI의 가독성을 위함
- 소문자 사용
- 대소문자에 따라 다른 자원으로 인식하게 됨
- 파일 확장자는 포함시키지 않음
2. HTTP Method
- HTML 문서와 같은 자원들을 가져올 수 있도록 해주는 프로토콜 (규칙, 약속)
- 웹에서 이루어지는 모든 데이터 교환의 기초
- 클라이언트 - 서버 프로토콜
- 요청(requests)
- 클라이언트(브라우저)에 의해 전송되는 메시지
- 응답(responses)
- 서버에서 응답으로 전송되는 메시지
HTTP
- HTTP 특징
- 비연결지향(connectionless)
- 서버는 응답 후 접속을 끊음
- 무상태(stateless)
- 접속이 끊어지면 클라이언트와 서버 간의 통신이 끝나면 상태를 저장하지 않음
- 비연결지향(connectionless)
HTTP Method
- 자원에 대한 행위
- 즉, HTTP는 HTTP Method를 정의하여 주어진 자원에 수행하길 원하는 행동을 나타냄
- 의미론적으로 행위를 규정하기 때문에 '실제 그 행위 자체가 수행됨'을 보장하진 않음
- HTTP verbs 라고도 함
HTTP Method 종류
- GET
- 특정 자원의 표시를 요청하며, 오직 데이터를 받기만 함
- POST
- 서버로 데이터를 전송하며, 서버에 변경사항을 만듦
- PUT
- 요청한 주소의 자원을 수정
- DELETE
- 지정한 자원을 삭제
3. 표현 (Representations)
자원에 대한 표현은 JSON 데이터로
JSON
{ "key": "value" }
- JavaScript Object Notation
- Lightweight data-interchange format
- 자바스크립트 객체 문법을 따르며, 구조화된 데이터를 표현하기 위한 문자 기반 데이터 포맷
- 일반적으로 웹 어플리케이션에서 클라이언트로 데이터를 전송할 때 사용
- 자바스크립트 구문에 기반을 두고 있지만 차이점이 있으니 주의
JSON 특징
- 사람이 읽고 쓰기 쉽고 기계가 파싱(해석 & 분석)하고 만들어 내기 쉬움
- 파이썬의 dictionanry, 자바스크립트의 object처럼 C 계열의 언어가 갖고 있는 자료구조로 쉽게 변환할 수 있는 key-value의 구조로 되어 있음
- 자바스크립트가 아니어도 JSON을 읽고 쓸 수 있는 기능이 다양한 프로그래밍 언어 환경에서 지원
JSON 타입 변환
- 문자열 -> Parsing -> JSON 객체
- JSON 객체 -> Stringification -> 문자열
REST 핵심 규칙
- URI는 정보의 자원을 표현해야 한다.
- 자원에 대한 행위는 HTTP Method로 표현한다.
최종 웹 구현 예시
- 백엔드
- 백엔드 + 프론트엔드
'Web > Django' 카테고리의 다른 글
DRF - single model (0) | 2021.05.09 |
---|---|
DRF (Django REST Framework) (0) | 2021.05.08 |
django_09_model_relationship (0) | 2021.04.01 |
django_08_model_relationship (0) | 2021.03.29 |
django_07_custom_authentication (0) | 2021.03.25 |