본문 바로가기

인문학도 개발일지/웹프로그래밍

Build a Backend REST API with Python & Django - API View 1

장고에서 API 엔드포인트를 만드는데 사용할 수 있는 클래스는 아래 두 가지가 있다.

1) APIView

2) Viewset

 

 

 

APIView란?

- API를 구축할 수 있는 가장 기본적인 유형의 view

- API 엔드포인트를 만드는 로직을 구현할 수 있도록 해준다.

- 표준 HTTP 메소드와 매치되는 함수를 만들 수 있게 해준다.
1. HTTP GET: 하나 또는 그 이상의 항목 가져오기
2. HTTP POST: 항목 생성
3. HTTP PUT: 항목 업데이트
4. HTTP PATCH: 항목의 부분적인 업데이트
5. HTTP DELETE: 항목 삭제

- 로직 컨트롤에 최적
1. 복잡한 로직 실행할 경우
2. 다른 API 호출할 경우
3. 로컬파일로 작업할 경우

 

 

 

 

 

APIView 만들기

- profiles-rest-api > view.py

- view: API  애플리케이션 로직, 사용자가 API 엔드포이트를 방문할 때 실행되는 코드

 

hello world api view 만들기

1. APIView, Response 객체 임포트

from rest_framework.views import APIView
from rest_framework.respons import Response

- response 객체는 API 출력으로 렌더링 할 수있는 API 뷰에서 반환하는 표준적인 응답객체, 로직을 실행하고 응답을 반환하고 싶을 때 출력해야하는 응답을 표준화 해준다.

 

2. get 함수

특정 API로부터 리스트나 객체를 받아오고 싶을 때 사용

APIView가 제공하는 features의 리스트를 반환하기 위한 함수 생성

직접 생성한 features 리스트를 만들고 그 객체를 반환할 것

APIView의 기능을 적은 리스트를 an_apiview 변수에 저장

class HelloAPIView(APIView):
    """Test API View."""

    def get(self, request, format=None):
        """Returns a list of APIView features."""

        an_apiview = [
            'Uses HTTP methods as functions (get, post, patch, put, delete)',
            'It is similar to a traditional Django view',
            'Gives you the most control over your logic',
            'Is mapped manually to URLs'
        ]

        return Response({'message': 'Hello!', 'an_apiview': an_apiview})

response 객체에서 리스트 반환 ->  API로부터 형성된 출력물이 된다.

화면에서 JSON으로 변환되는 결과물을 출력하기 위해 딕셔너리 형태를 사용하자.

 

 

 

 

 

view URLs 구성

URL을 view에 매핑 시켜야 한다.

HTTP 서버를 통해 접근 가능

URL dispatcher로 장고에서 view와 url을 매핑할 수 있다.

profiles_project > urls.py

- 사이트에 존재하는 url 설정을 확인할 수 있다.

from django.conf.urls import url
from django.contrib import admin

urlpatterns = [
    url(r'^admin/', admin.site.urls),
]

 

url(r'^admin/', admin.site.urls): admin 사이트가 admin.site.urls에 매핑되어 있음

=> 127.0.0.1:8080/admin

 

이 URL 파일 구성은 django에게 어떤 것이든 admin /을 사용하여 관리자 앱에 전달하도록 지시

 

URL/API를 호출하기 위해

include 함수를 포함하면서 시작

앱에 추가하는 각 Python 프로젝트에 대해 URLs.py 파일을 유지하는 것이 가장 좋다.

그래서 URLs.py프로젝트를 여기 생성하고 include 기능을 임포트해서 루트 프로젝트의 URLs.py로부터 포함시킬 것

 

URL을 URL 패턴 리스트에 추가한다.

from django.conf.urls import include

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^api/', include('profiles_api.urls'))
]

 

 

정규식이라는 기술을 사용하여 장고 URL을 기술한다.

정규식: 어떤 문자열 패턴을 문자열로 부터 감지하고 특정 데이터를 추출하기 하기 위해 문자식을 조작하는 것

r: 정규식

 ^: 문자열의 시작이 API로 시작하는지 확인, api/로 시작하는 어떤 것이라도 profiles_api.urls로 매치되어 전달

 

profiles api project에 작성한 urls 파일 만들기

profiles_api > urls.py 파일 생성

from django.conf.urls import url

# 루트에서 views모듈 임포트
from . import views

urlpatterns = [
    url(r'^hello-view/', views.HelloAPIView.as_view()),
]

 

 

 

 

 

Testing our APIView

vagrant 서버 실행

/api url에 매치되는 view가 없기 때문에 페이지를 찾을 수 없다고 나온다.

 

 

/api/hello-view/

 

 

django rest framework는 탐색하기 쉬운 페이지로 결과를 렌더링하기 때문에 개발하는 동안 브라우저에서 실제 API를 볼 수 있다.