[Django] REST API

한결·2023년 4월 13일
0

WEB

목록 보기
22/63

HTTP

  • HyperText Transfer Protocol
  • HTML 문서와 같은 리소스(자원)들을 가져올 수 있도록 하는 프로토콜(규칙)
  • 웹 상에서 컨텐츠를 전송하기 위한 약속
  • 웹에서 이루어지는 모든 데이터 교환의 기초가 됨
  • "클라이언트-서버 프로토콜"이라고도 부름
  • 클라이언트와 서버는 다음과 같은 개별적인 메시지 교환에 의해 통신
    • 요청(request)
      • 클라이언트에 의해 전송되는 메시지
    • 응답(response)
      • 서버에서 응답으로 전송되는 메시지
  • 실제로는 브라우저와 요청을 처리한는 서버 사이에는 더 많은 기술 및 컴퓨터들이 존재하지만 우리는 HTTP의 기본 명세에 대해서만 학습할 예정

HTTP 특징

  • Stateless (무상태)
    • 동일한 연결(connection)에서 연속적으로 수행되는 두 요청 사이에 링크가 없음
    • 즉, 응답을 마치고 연결을 끊는 순간 클라이언트와 서버 간의 통신이 끝나며 상태 정보가 유지되지 않음

이는 특정 페이지와 일관되게 상호작용 하려는 사용자에게 문제가 될 수 있으며, (예를 들어 e-commerce에서 장바구니를 사용하는 경우) 이를 해결하기위해 쿠키와 세션을 사용해 서버 상태를 요청과 연결하도록 함

HTTP Request Methods

  • 리소스에 대한 행위(수행하고자 하는 동작)를 정의
  • 즉, 리소스에 대해 수행할 원하는 작업을 나타내는 메서드 모음을 정의
  • HTTP verbs 라고도 함
  • HTTP Method 예시
    • GET, POST, PUT, DELETE ,,,

[참고] 리소스

  • HTTP 요청의 대상을 리소스라고 함

대표 HTTP Request Methods

  1. GET
  • 서버에 리소스의 표현을 요청
  • GET을 사용하는 요청은 데이터만 검색해야 함
  1. POST
  • 데이터를 지정된 리소스에 제출
  • 서버의 상태를 변경
  1. PUT
  • 요청한 주소의 리소스를 수정
  1. DELETE
  • 지정된 리소스를 삭제

HTTP response status codes

  • 특정 HTTP요청이 성공적으로 완료 되었는지 여부를 나타냄

  • 200번대 -> 정상적인 상태

  • 400번대 -> 클라이언트 잘못

  • 500번대 -> 서버 잘못
    http캣

Identifying resources on the web

  • 웹에서 리소스를 식별하는 방법에 대해 학습

웹에서의 리소스 식별

  • HTTP 요청의 대상을 리소스라고 함
  • 리소스는 문서, 사진 또는 기타 어떤 것이든 될 수 있음
  • 각 리소스는 식별을 위해 URI로 식별됨

URI

  • Uniform Resource Identifier(통합 자원 식별자)
  • 인터넷에서 리소스를 식별하는 문자열
  • 가장 일반적인 URI는 웹 주소로 알려진 URL
  • 특정 이름공간에서 이름으로 리소스를 식별하는 URI는 URN

[참고] URN

  • Uniform Resource Name (통합 자원 이름)
  • URL과 달리 자원의 위치에 영향을 받지 않는 유일한 이름 역할을 함 (주민등록번호처럼 절대 안 겹침)
  • URL의 단점을 극복하기 위해 등장했으며 자원이 어디에 위치한지 여부와 관계없이 이름만으로 자원을 식별
  • 하지만 이름만으로 실제 리소스를 찾는 방법은 보편화 되어있지 않아 현재는 URL을 대부분 사용
  • 예시
    • ISBN(국제 표준 도서번호)
      • 국제적으로 책에 붙이는 고유 식별자
    • ISAN (국제 표준 시청각 자료 번호)
      • 도서의 ISBN과 유사한 시청각 작품 및 관련 버전의 고유 식별자

URL

  • Uniform Resource Locator (통합 자원 위치)
  • 웹에서 주어진 리소스의 주소
  • 네트워크 상에 리소스가 어디 있는지(주소)를 알려주기 위한 약속
    • 이러한 리소스는 HTML, CSS, 이미지 등이 될 수 있음
  • URL은 다음과 같이 여러 부분으로 구성되며 일부는 필수이고 나머지는 선택사항
  • parameters 자리에는 query string들어감

URL 구조

  • Scheme (or protocol)

    • 브라우저가 리소스를 요청하는 데 사용해야 하는 프로토콜
    • URL의 첫 부분은 브라우저가 어떤 규약을 사용하는지를 나타냄
    • 기본적으로 웹은 HTTP(S)를 요구하며 메일을 열기위한 mailto:, 파일을 전송하기 위한 ftp: 등 다른 프로토콜도 존재
  • Authority

    • Scheme 다음은 문자 패턴 ://으로 구분된 Authority(권한)이 작성됨
    • Authority는 domain과 port를 모두 포함하며 둘은 :(콜론)으로 구분됨
    1. Domain Name

      • 요청 중인 웹 서버를 나타냄
      • 어떤 웹 서버가 요구되는 지를 가리키며 직접 IP주소를 사용하는 것도 가능
        하지만, 사람이 외우기 어렵기 때문에 주로 Domain Name으로 사용
      • 예를 들어 도메인 google.com의 IP 주소는 142.251.42.142
    2. Port

      • 웹 서버의 리소스에 접근하는데 사용되는 기술적인 문(Gate)
      • HTTP 프로토콜의 표준 포트는 다음과 같고 생략이 가능
        • HTTP - 80
        • HTTPS - 443
      • Django의 경우 8000(80+00)이 기본 포트로 설정되어 있음
  • Path

    • 웹 서버의 리소스 경로
    • 초기에는 실제 파일이 위치한 물리적 위치를 나타냈지만,
      오늘날은 실제 위치가 아닌 추상화된 형태의 구조를 표현
    • 예를 들어 /article/create/가 실제 articles 폴더안에 create 폴더 안을 나타내는 것은 아님
  • Parameters

    • 웹 서버에 제공하는 추가적인 데이터
    • 파라미터는 '&'기호로 구분되는 key-value 쌍 목록
    • 서버는 리소스를 응답하기 전에 이러한 파라미터를 사용하여 추가 작업을 수행할 수 있음
  • Anchor

    • 리소스의 다른 부분에 대한 앵커
    • 리소스 내부 일종의 "북마크"를 나타내며 브라우저에 해당 북마크 지점에 있는 콘텐츠를 표시
      • 예를 들어 HTML문서에서 브라우저는 앵커가 정의한 지점으로 스크롤 함
    • fragment identifier(부분 식별자)라고 부르는 '#' 이후 부분은 서버에 전송되지 않음
      • '#' 이후 부분은 서버에 전달되지 않고 브라우저에게 해당 지점으로 이동할 수 있도록 함
    • 하이퍼링크와 비슷한 기능을 하는 인터넷상의 다른 문서와 연결된 문자 혹은 그림

정리

  • 웹에서의 리소스 식별
    • 자원의 식별자 (URI)
      • 자원의 위치로 자원을 식별 (URL)
      • 고유한 이름으로 자원을 식별 (URN)

클라이언트와 서버

  • 발전하는 프론트엔드 Templates로는 한계에 봉착 + 다양한 프론트엔드 프레임워크 등장
    -> 이제 django는 API서버의 용도로만 사용
    -> 역할 분리

REST API

API

  • Application Programming Interface
  • 애플리케이션과 프로그래밍으로 소통하는 방법
    • 개발자가 복잡한 기능을 보다 쉽게 만들 수 있도록 프로그래밍 언어로 제공되는 구성
  • API를 제공하는 애플리케이션과 다른 소프트웨어 및 하드웨어 등의 것들 사이의 간단한 계약이라고 볼 수 있음
  • API는 복잡한 코드를 추상화하여 대신 사용할 수 있는 몇 가지 더 쉬운 구문을 제공

WEB API

  • 웹 서버 또는 웹 브라우저를 위한 API
  • 현재 웹 개발은 모든 것을 하나부터 열까지 직접 개발하기 보다 여러 Open API를 활용
  • API는 다양한 타입의 데이터를 응답
    • 예) JSON

REST

  • Representaional State Trasfer
  • API Server를 개발하기 위한 일종의 소프트웨어 설계 방법론
  • REST원리를 따르는 시스템을 RESTful하다고 부흠
  • 자원을 정의하고 자원에 대한 주소를 지정하는 전반적인 방법을 서술
  • "HTTP 프로토콜을 사용해서 제한된 인터페이스 상에서 클라이언트-서버 간 상호작용을 하게 해주는 아키텍쳐"

REST에서 자원을 정의하고 주소를 지정하는 방법

  1. 자원의 식별
  2. 자원의 행위
  3. 자원의 표현

JSON

"JSON is a lightweught data-interchange format"

  • 자료구조로 쉽게 변환할 수 있는 key-value 형태의 구조를 갖고있다
  • 사람이 읽고 쓰기 쉽고 기계가 파싱하고 만들어내기 쉽기 때문에 API에서 가장 많이 사용하는 데이터 타입
  • 요즘은 하나의 데이터 표현법으로 굳어짐

REST 정리

  1. 자원 식별 - URI
  2. 자원 행위 - HTTP methods
  3. 자원 표현 - JSON

0개의 댓글