TIL | Restful API

gemma. K·2020년 11월 29일
0
post-custom-banner

Restful API

  • 현대 웹 개발에 가장 널리 사용되는 API 엔드포인트 구조를 구현하는 방식

  • Representational State Transfer라는 용어의 약자로서 웹 설계의 우수성을 최대한 활용한 아키텍쳐

특징

  1. API에서 전송하는 resource(자원)을 URI로 표현
  2. 해당 자원에 행하고자 하는 verb(행위)를 HTTP METHOD로 정의

resource: URI

  • URI는 정보의 자원을 표현해야 한다.
  • 동사보다는 명사를 활용

잘못된 엔드포인트 예시

/showproducts/1

잘된 예시

product/1

HTTP method

  • 하고자 하는 행위와 의도는 uri가 아닌 http method를 통해 전달한다.

잘못된 엔드포인트 예시

/product_get/

get이라는 동사를 사용하고, 클라이언트 측에서 request body에 필요한 정보를 담아 보낸다.

잘된 예시

products?offset=<int:offset>&limit=<int:limit>
class PostView(View):
    def get(self, request, offset, limit):

http method를 GET으로 지정하고, query string을 활용해 id가 1-100까지의 post의 데이터를 요청한다.


PATH Parameter

  • url로 parameter(매개변수)를 받음
  • 존재하는 resource에 접근하기 위한 방법
  • restful api의 기준에 충족

urls.py 예시

posts/<int:post_id>

클라이언트 측 요청

GET http://127.0.0.0:8000/posts/3

id가 3인 post에 접근 요청

views 예시

class PostView(View):
    def get(self, request, post_id)

매개변수로 uri의 post_id를 받는다. db에서 post_id가 3인 post의 정보를 클라이언트 측에 응답한다.


Query string

  • 엔드포인트 ? 뒤에 key, value 형식으로 나타남
  • 주로 filtering(필터링), sorting, searching에 사용

urls.py

http://127.0.0.0:8000/parametername?key1=value&key2=value

key값 가져오기

key1 = request.GET.get('key1', default)
key2 = request.GET.get('key2', default)

key1, key2를 request.GET.get로 가져온다. 만약 클라이언트에서 오지 않는 경우 default 값이 대신 key1, key2에 담긴다.


정리

  • restful API는 절대적인 것이 아니다. 단지 웹 api 아키텍쳐를 유용하게 사용하기 위한 또 개발자들 간의 약속으로 널리 사용되는 방식이다.
  • restful api는 api의 유용한 재사용을 위한 하나의 방식으로 유저가 실제 만나게 되는 url와는 다른 uri(niform Resource Identifier, 통합 자원 식별자)이다.
post-custom-banner

0개의 댓글