Web, Django, DB

Django : REST API

Disciple428 2024. 4. 13. 19:34
  • API

두 소프트웨어가 서로 통신할 수 있게 하는 메커니즘

→ 클라이언트 - 서버 처럼 서로 다른 프로그램에서 요청과 응답을 받을 수 있도록 만든 체계

→ 소프트웨어 간에 지정된 형식으로 소통하는 수단

⇒ 복잡한 코드를 추상화하여 대신 사용할 수 있는 쉬운 구문들을 제공한다.

 

  • REST ( = Representational State Tranfer )

API Server 를 개발하기 위한 일종의 소프트웨어 설계 ‘방법론’

 

  • REST ful API

REST 원리를 따르는 시스템을 RESTful 하다고 부른다.

자원을 정의하고 자원에 대한 주소를 지정하는 전반적인 방법을 서술한다.

 

  • REST API : REST 라는 설계 디자인 약속을 지켜서 구현한 API

 

  • REST에서 자원을 사용하는 법 3가지
  1. 자원의 ‘식별’ = URI
  2. 자원의 ‘행위’ = HTTP Methods
  3. 자원의 ‘표현’ = JSON 데이터, 궁극적으로 표현되는 데이터 결과물

 

  • URI (통합 자원 식별자)

인터넷에서 자원을 식별하는 문자열

일반적인 URI는 웹 주소로 알려진 URL 이 있다.

 

  • URL

웹에서 주어진 자원의 주소

네트워크 상에 리소스가 어디 있는지를 알려주기 위한 약속

⇒ Schema + Domain Name + Port + Path + Parameters + Anchor

 

  • Schema (Protocol)

브라우저가 리소스를 요청할 때 사용해야 하는 규약

URL의 첫 부분은 브라우저가 어떤 규약을 사용하는지를 나타낸다.

기본적으로 웹은 http를 요구한다.

 

  • Domain Name

요청 중인 웹 서버를 나타낸다.

어떤 웹 서버가 요구되는 지를 나타내는데, 직접 IP 주소를 사용하는 것도 가능하지만, 직관성이 떨어지기 때문에 주로 Domain Name 을 사용한다.

ex) 구글의 도메인 : google.com / IP 주소 : 142.251.42.142

 

  • Port

웹 서버의 리소스에 접근하는데 사용되는 기술적인 gate

표준 포트만 작성할 시 생략 가능하다.

 

  • Path

웹 서버의 리소스 경로

초기에는 실제 파일이 위치한 물리적 위치를 나타냈지만, 요즘엔 실제 위치가 아닌, 추상화된 형태의 구조를 표현한다.

 

  • Parameters

웹 서버에 제공하는 추가 데이터

& 기호로 구분되는 key, value 쌍 목록

서버는 리소스를 응답하기 전, 파라미터를 사용하여 추가 작업을 수행할 수 있다.

 

  • Anchor

일종의 북마크처럼 해당 콘텐츠가 존재하는 브라우저의 지점을 표시

부분 식별자라고 부르는 # 이후 부분은 서버에 전송되지 않고 브라우저에게 해당 지점으로 이동하도록 한다.

 

  • HTTP Request Methods : 리소스에 대해 수행하고자 하는 동작, 행위를 정의 (=HTTP verbs)

⇒ CRUD 가 나뉘어 있음.

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

 

  • HTTP response status codes : 특정 HTTP 요청이 성공적으로 완료 되었는지 여부를 나타낸다.

200번대 → 성공했다.

400번대 → 사용자 잘못이다.

500번대 → 서버 잘못이다.

 

  • Django REST framework ( = DRF )

Django에서 Restful API 서버를 쉽게 구축할 수 있도록 도와주는 오픈소스 라이브러리

 

  • Serialization (직렬화)

여러 시스템에서 활용하기 위해 데이터 구조나 객체 상태를 나중에 재구성할 수 있는 포맷으로 변환하는 과정 ( django 말고 자바 같이 다른 프로그램을 사용하는 곳에서도 데이터를 조회할 수 있도록 )

⇒ 어떠한 언어나 환경에서도 나중에 다시 사용할 수 있는 포맷으로 변환하는 과정

 

  • Serializer

Serialization 을 진행하여 Serialized data를 반환해주는 클래스

 

  • ModelSerializer

Django 모델과 연결된 Serializer 클래스

일반 Serializer와 달리 사용자 입력 데이터를 받아 자동으로 모델 필드에 맞추어 직렬화를 진행한다.

 

  • ModelSerializer 의 인자 및 속성

many 옵션 → Serialize 대상이 QuerySet인 경우 입력한다.

data 속성 - Serialized data 객체에서 실제 데이터를 추출한다.

 

  • ‘api_view’ decorator

DRF view 함수에서는 필수로 작성된다. view 함수 실행 전, HTTP 메서드를 확인한다.

DRF view 함수가 응답해야 하는 HTTP 메서드 목록을 작성한다.

 

  • partial

부분 업데이트를 허용하기 위한 인자

partial 인자 값이 False 인 경우, 한 필드값을 수정하려면 모든 필드값도 요청 시 함께 전송해야 한다.

기본적으로 Serializer 는 모든 필수 필드에 대한 값을 전달받기 때문이다.

 

  • raise_exception

is_valid( ) 의 선택 인자

유효성 검사를 통과하지 못할 경우 ValidationError 예외를 발생시킨다.

DRF에서 제공하는 기본 예외 처리기에 의해 자동으로 처리되며, 기본적으로 HTTP 400 응답을 반환한다.