RESTful 이란?
"HTTP URI로 잘 표현된 리소스에 대한 행위를 HTTP Method로 정의한다. 리소스의 내용은 xml, json, yaml등 다양한 표현 언어로 정의된다."
리소스(Resource)
REST Api의 수행대상이 되는 리소스는 URI로 정의된다. 어떤 대상을 처리할 것인가에 대한 정의라고 할 수 있다.
예를 들어 /post/1/ 이라는 url를 가진다면 pk=1 인 post에 대한 처리를 원한다 라는 뜻이다.
동일한 리소스는 Method에 따라 다른 처리결과를 가져온다
메서드(Method)
HTTP Method | CRUD |
POST | Create |
GET | Read |
PUT | Update |
DELETE | Delete |
즉 명시된 리소스를 명시된 메서드로 처리한다 라고 잘 정의된 것을 REST API라고 할 수 있다.
예를 들어
GET http://jamiejang.me/blog/1 => pk=1 인 블로그를 조회
PUT http://jamiejang.me/blog/1 => pk=1 인 블로그를 수정
DELETE http://jamiejang.me/blog/1 => pk=1 인 블로그를 삭제
이렇게 같은 리소스를 메서드에 따라 다르게 처리하는 방식을 말한다.
REST API 특징 및 장점
1) Client-Server
REST API 서버는 클라이언트의 실행 문맥을 이해할 필요가 없고, 독립적으로 REST API에 대한 응답만을 한다
2) Stateless
서버는 상태정보를 저장하지 않고 들어오는 요청에 대한 응답만을 제공한다
3) Cacheable
HTTP 프로토콜을 그대로 사용하기 때문에, 기존 웹 인프라를 그대로 사용할 수 있다.
같은 리소스에 대한 요청이 중복적으로 발생할 때, 캐시를 사용한 응답이 가능하다
4) Uniform
HTTP 표준에만 따른다면 어떤 기술이든지 사용 할 수 있다.
5) Layerd System
REST API는 멀티 레이어로 구성 될 수 있다.
클라이언트는 대상 서버에 직접 붙었는지 아닌지 알 수가 없다.
중간에 존재하는 부분을 사용해서 확장성과 보안성을 향상한다.
6) Code on Demand
서버에서 스크립트를 받아서 클라이언트 단에서 수행 할 수도 있다.
RESTful 하다
1. '/' 는 계층관계를 나타낸다
jamiejang.me/user/jamie
user에 속하는 jamie유저를 나타낸다. 이렇듯 /에 따라 계층관계를 나타내기때문에
RESTful URI는 / 로 끝나지 않아야 한다
2. URI의 가독성이 중요하다
가독성을 위해서 URI내에 _(언더스코어)같은 특수문자를 사용하지 않는다
3. URI에는 동사를 사용하지 않는다
동사를 사용하면 가독성도 떨어지고 모호성이 발생하기때문에 명사 위주로 사용한다
Django 에서 REST API 사용하기
django에서는 서드파티 라이브러리로 django restframework 가 존재한다
이는 사용하기 간단하기 때문에 많은 유저가 사용한다.
#> pip3 install djangorestframework
다음과 같이 설치를 진행하고, settings의 INSTALLED_APPS에 추가해준다
#settings.py INSTALLED_APPS = [ ..., 'rest_framework', ]
댓글
댓글 쓰기