당신은 멋쟁이, 우리는 장고쟁이~

0%

Django API Fundamentals

Fundamental Terms


Django API 공부를 시작하기 전에, 알아야 할 기본적인 terminology 를 정리해 보았다.

API 공부를 시작하기전에는 잘 몰랐던 단어들과 컨셉을 다시 정리해 본다.


1. HTTP VERBS


HTTP 프로토콜은 요청 방법 이라는것이 존재한다. 각 요청은 request method 라는 요청 방법을 가지고 있어서, 요청 방법에 따라 CRUD 연산이 가능하다.

CRUD 는 웹개발에서 너무 기본적인 텀이지만, Create, Read, Update, Delete 의 앞 글자들을 따서 만들어진 단어라고 볼수 있다.


가장 흔한 4개의 요청 방법은, 아래와 같다.


  1. POST
  2. GET
  3. PUT
  4. DELETE

이 요청 방법들을 HTTP Verbs 라고 부르는데, 영어 단어 verbs 는 동사라는 뜻을 가지고 있고. HTTP 가 가진 동사 (포스트 하다, 겟 하다, 풋 하다, 딜리트 하다, ~~하다 라는 동사) 라고 해서 HTTP Verbs 라고 불리우는것 같다.


보통 이 동사들은, 각각의 CRUD 동작과 매칭이 되는데. 각 동작들이 어떤 HTTP VERB 들과 매칭이 되는지 테이블로 정리해 보았다.



CRUD (Create, Read, Update, Delete) HTTP Verbs
Create (생성) POST
Read (읽기) GET
Update (갱신) PUT
Delete (삭제)

2. Endpoints


REST FRAMEWORK 튜토리얼을 따라했었을때, 몰랐던 단어가 바로 이 endpoints 였다.


Endpoints 가 무엇인지 이해하려면, URL 부터 알아야 한다.


거의 모든 웹페이지는 HTML, CSS, JavaScript 혹은 다른 element 와 함께 구성이 되어 있고. 해당 웹페이지를 위한 URL 이 존재한다.

예를들면, mysite.com.au/page/1 이라는 URL 주소가 존재할때, 해당 URL 을 브라우저 주소창에 입력하면 웹페이지가 화면에 출력이 된다.



웹 API도 같은 개념인데, 예를들어 mysite.com.au/page/api/1 이라는 특정 API를 호출하는 URL이 존재한다고 가정했을때.

이 URL을 호출했을 경우, 보통의 웹페이지가 화면에 출력되는 대신에, API endpoints 가 생성된다.


mysite.com/page/api/1

이라는 URL 을 호출하면, API endpoints 를 생성한다.

하나의 endpoint 는 보통 JSON 포맷으로 된 데이터와 동작 가능한 HTTP verbs 정보를 가지고 있다.


간단한 투두 리스트를 위한 mytodolist.com 이라는 사이트가 있다고 가정했을때. 아래와 같은 api endpoints를 만들어 볼수 있다.

  1. https://mytodolist.com/api/list - 모든 투두리스트의 정보를 반환
  2. https://mytodolist.com/api/detail/1 - 투두리스트중 id 값이 1 인 투두리스트의 디테일을 반환

위의 두가지 endpoint 는 모두 GET 요청으로, 두가지 모두 정보만 조회하는 개념이지만, 요청 방법을 POST, PUT, DELETE 로 만든다면, 생성, 수정, 삭제 도 가능하다.

URL 을 가지고 화면에 웹페이지를 보여주는것 대신에, 특정 데이터들을 생성, 조회, 갱신, 삭제 같은 동작을 행할수 있다.


3. Status Codes (상태코드)


우리가 웹브라우저를 사용하여 url을 통해 HTTP 요청 (HTTP REQUEST) 을 보내면, 해당 요청에 대한 HTTP 응답 (HTTP RESPONSE) 에 상태 코드를 가지고 있어서. 어떤 결과가 나왔는지 유추해 볼수 있다.


상태 코드는 꽤나 많은 종류가 있는데, 모든 상태 코드를 다 외우기 보다는 보편적인 코드들을 알고 지나가고 나중에 필요에 의해 상태 코드들을 더 알아보는것이 좋다.

상태 코드는, https://developer.mozilla.org/en-US/docs/Web/HTTP/Status 에서 확인해 볼수 있다.


현재 중요한것은 보편적인 상태 코드 종류를 이해하는것이 중요한데. 상태 코드가 어떤 숫자로 시작하는가에 따라서, 요청에 대한 응답이 어떤 상태인지 쉽게 파악할수가 있다.

아래 표에 가장 보편적인 상태 코드들에 대해서 정리를 해보았다.


상태코드 결과 비고
2xx (상태코드가 2로 시작하는 경우) 성공 클라이언트가 요청한 동작이 정상적으로 받아졌고, 이해되었고, 접수가 완료 되었음
3xx (상태코드가 3 으로 시작하는 경우) 리다이렉션 요청된 URL 이 옮겨졌음
4xx (상태코드가 4 로 시작하는 경우) 에러 에러가 발생함. 보통은 클라이언트가 잘못된 URL 요청을 했을때 발생.
5xx (상태코드가 5 로 시작하는 경우) 에러 서버가 요청을 처리할수 없음.

Django 개발을 하면서 가장 많이 접할 상태코드는, 아래와 같다.


  1. 200 - 성공
  2. 201 - 생성됨
  3. 404 - 404 Error
  4. 500 - 서버 에러

이런 상태값은 서버를 구동하고 브라우저를 통해 요청들을 넣었을때, 터미널에 표시되기도 한다.

4. REST


REST FRAMEWORK 이라고 해서, 왜 REST 라는 단어가 API 개발에 들어가는지 이해를 할수가 없었다.


REST 는

REpresentational State Transfer(REST) 의 줄임말이다.


REST 는 2000년대에 생겨난 방법으로, 웹상에서 API 를 만드는 방법을 의미한다. 즉, HTTP protocol 위에 API를 만드는 방식이다.


이런 특성을 가진 API 를 RESTFul API 라고 표현을 하는데. 모든 RESTful API는 아래와 같은 특성을 가지고 있다.


  1. HTTP 처럼 상태가 없다 (stateless). 이를 무상태라고 하는데 클라이언트와 서버 관계에서 서버가 클라이언트의 상태를 보존하지 않다는것을 의미한다.
  2. 보편적인 HTTP verbs 를 지원한다. HTTP verbs 는 보통 (GET, POST, PUT, DELETE)
  3. JSON 이나 XML 포맷으로 데이터를 반환한다.

보통 RESTful API 이라 함은 위의 세가지 특성을 가진, HTTP 프로토콜 위에 얹혀서 만들어진 API를 의미한다.