티스토리 뷰

일상코딩/노트

Django : REST API 1

코딩애벌레 2024. 4. 11. 23:07

지금까지는 데이터를 출력하기위한 전반적인 과정을 배웠다면, 이제부터는 데이터에 집중하게 될 목차다. 더이상 django만 이용하지 않고 다양한 프로그램을 사용할테니 어지러워도 열심히 배워보자.


API (Application Programming Interface)

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

: 클라이언트 <=> 서버처럼 서로 다른 프로그램에서 요청과 응답을 받을 수 있는 체계

 

공공기관의 제공해주는 데이터를 통해 클라이언트에게 앱, 웹 사이트의 정보 등 다양한 서비스들을 해당 기관의 시스템으로부터 데이터를 요청해서 받아가는 것을 뜻하는데, 와닿는 예시로는 지도, 날씨가 있다. 데이터들을 얻으려면 시스템 별 정보들을 요청하는 지정된 형식을 공식 문서를 통해 사용 가능하며, 지역 / 날짜 / 조회할 내용들(온도, 바람 등)을 제공하는 매뉴얼을 적절히 이용하면 된다.

요청을 보내면 정보를 제공하는 과정

  • 소프트웨어와 소프트웨어간 지정된 형식(정의)으로 소통하는 수단
  • "이러한 요청을 보내면, 이러한 정보를 제공해줄 것이다"라는 매뉴얼이 존재
  • Web API
    • 웹 서버 또는 웹 브라우저를 위한 API
    • 현대 웹 개발은 하나부터 열까지 직접 개발하기보다 여러 Open API 들을 활용하는 추세
    • 대표적인 Third Party Open API : Youtube API, Google Map API, Naver Papago API, Kakao Map API

REST (Representational State Transfer)

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

= > 각각의 API 서버 구조가 다르다면 어느정도 약속을 만들어서 같은 API 서버를 설계(뼈대)를 구성하자

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

Ncloud API 도 RESTful API 방식을 따른다

 

: REST에서 자원을 사용하는 법 3가지

  1. 자원의 "식별" : URL
  2. 자원의 "행위" : HTTP Methods
  3. 자원의 "표현" : JSON 데이터, 궁극적으로 표현되는 데이터 결과물

 


자원의 식별 : URL (Uniform Resource Identifier)

 

: 통합 자원 위치를 의미하며 웹에서 주어지는 리소스의 주소를 의미한다

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

  • URI : 인터넷에서 리소스(자원)를 식별하는 문자열 : 가장 일반적인 URI는 웹 주소로 알려진 URL에 정의되어 있다

URL의 구성요소

 

Scheme (or Protocol)

  • 브라우저가 리소스를 요청하는 데 사용해야 하는 규약
  • URL의 첫 부분은 브라우저가 어떤 규약을 사용하는지 나타낸다
  • 기본적으로 웹은 http(s)를 요구한다 (메일 : mailto: , 파일 전송 : ftp: 등)

Domain Name

  • 요청중인 웹 서버를 나타낸다
  • 어떤 웹 서버가 요구되는 지 가리키며 직접 IP 주소를 사용할 수 있음, 하지만 외우기 어렵다는 단점이 있기 때문에 Domain Name을 사용한다. ex ) Domain : google.com = IP : 142.251.42.142

왼쪽처럼 URL칸에 입력하면 자동으로 google.com으로 이동하게 된다

 

Port

  • 웹 서버의 리소스에 접근하는데 사용되는 기술적인 문(Gate)
  • HTTP 프로토콜의 표준 포트 : HTTP(80), HTTPS(443)
  • 표준 포트만 작성 시 생략 가능하여 평상시에 보기 어렵다

Path

  • 웹 서버의 리소스 경로
  • 초기에는 실제 파일이 위치한 물리적 위치를 나타냈지만, 현재는 추상화된 형태의 구조를 표현
  • path/to/myfile.html으로 예시가 되어있으나, 무조건 path.dir / to.dir / myfile.html 의 구성읠 띄는 것은 아니다

Parameters

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

Anchor

  • 일종의 "북마크"를 나타내며 브라우저에 해당 지점에 있는 콘텐츠를 표시
  • fragment identifier (부분 식별자)라고 부르는 ' # ' 이후 부분은 서버에 전송되지 않는다

Anchor를 추가하지 않고 호출했을 경우 해당 페이지의 최상단
링크가 #quick-install-guide인 headerlink를 입력해보자
페이지의 최상단이 아닌, 북마크처럼 지정된 부분부터 볼 수 있다. 즉, 페이지는 같지만 북마크 부분부터 시작하겠다.

 


자원의 행위 : HTTP Request Methods

 

: 리소스에 대한 행위(수행하고자 하는 동작)를 정의 = HTTP verbs (문법)

대표 HTTP Request Methods
GET
- 서버에 리소스의 표현을 요청

- GET을 사용하는 요청은 데이터만 검색해야 한다

POST
- 데이터를 지정된 리소스에 제출

- 서버의 상태를 변경

PUT
- 요청한 주소의 리소스를 수정

PATCH
- 요청한 주소의 리소스를 '일부' 수정
DELETE
- 지정된 리소스를 삭제

 

HTTP response status codes

= > 특정 HTTP 요청이 성공적으로 완료 되었는지 여부를 나타내는 코드

  • Informational responses (100-199)
  • Successful responses (200-299)
  • Redirection messages (300-399)
  • Client error responses (400-499)
  • Server error responses (500-599)

흔히 보던 404 error, 403 error 등이 여기에 속한다.

 


자원의 표현(전달)

 

이 부분부터는 우리가 django에서 다루었던 html을 사용하지 않게 된다. Front의 영역을 제외하고 데이터를 전달하는 것으로 나뉘게 된다. REST API는 JSON 타입으로 응답하는 것을 권장하기 때문에 행동은 동일하지만, 응답을 html으로 하는 것이 아닌 JSON으로 변환해서 전달해주는 것이다.

이 과정에서 더이상 django는 front를 제외하고 back의 영역을 담당하게 된다

 

이 과정에서 json 파일을 전달해주면서, front의 영역은 Front-end-Framework 인 Vue3, React가 맡게 된다. 이제 해야할 부분은 django 서버를 이용하여 RESTful API 서버를 구축하는 것이 목표다. (나중에 Vue3를 다룰 예정이다)


Django 에서의 RESTful API


requests 라이브러리

 

Django에서는 HTTP 요청을 보내고 응답을 받는 방식이 내장되어있지 않기 때문에 requests 라이브러리를 설치 및 사용해야한다. 

설치 키워드
따로 페이지를 띄우는 것이 아닌 실행 결과를 보기위해 python 파일로 위처럼 코드 작성해보자, 또한 오른쪽 데이터를 api에서 제공받았다고 가정하자
requests 라이브러리의 get 함수를 통해 요청받는 url을 전달해준다.

 

requests의 역할과 django의 json() 함수의 역할을 알아보자.

  • requests.get()으로 전달받은 response는 models의 형식을 띄고있고 데이터가 감싸져있는 것을 확인 할 수 있다
  • json 파일을 python 타입으로 변환해주기 위해 django 내장 함수인 json() 을 사용해주면 파이썬에서 해석할 수 있는 list 형식을 형변환하게 된다
  • 이후 데이터는 list와 dictionary로 이루어져 있는 데이터로 접근이 가능하다.
  • result[0]의 경우 데이터 리스트 중 0번 index에 속한 데이터 상자를 가져오며, dictionary의 key 값을 입력해주면 내용물을 확인할 수 있다


오늘은 데이터 주고받는 것의 맛보기를 했는데, 충격 받은 사람도 있을 지도 모른다.. django의 풀스택 면모가 있었고 사용했지만 이젠 사용하지 않는다는 점. html에도 신경 써줘야 할 것들이 많았기 때문이다. 하지만 더 배우다보면 왜 django에서 front까지 진행하지 않는지 알게되니 천천히 따라가보자.

'일상코딩 > 노트' 카테고리의 다른 글

Django : REST API 3  (0) 2024.04.15
Django : REST API 2  (0) 2024.04.12
Django : Many to one relationship  (0) 2024.04.05
DB : SQLite JOIN  (0) 2024.04.04
DB : SQLite (DDL, DML) 명령어  (0) 2024.04.03
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함