Web/Django

REST API

5_ssssseung 2021. 5. 8. 03:15

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)
      • 접속이 끊어지면 클라이언트와 서버 간의 통신이 끝나면 상태를 저장하지 않음

 

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 핵심 규칙

  1. URI는 정보의 자원을 표현해야 한다.
  2. 자원에 대한 행위는 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