URL에 선택적 형식 접미사(optional format suffixes) 추가하기
응답이 더 이상 단일 콘텐츠 유형에 고정되어 있지 않다는 것을 활용하기 위해 API 엔드포인트에 형식 접미사 지원을 추가해 보자. 형식 접미사를 사용하면 특정 형식을 명시적으로 참조하는 URL이 제공되므로 API가 http://example.com/api/items/4.json 같은 URL을 처리할 수 있다.
다음과 같이 두 뷰에 형식 키워드 인수를 추가하자.
def snippet_list(request, format=None):
def snippet_detail(request, pk, format=None):
이제 snippets/urls.py 파일을 업데이트하여 기존 URL에 format_suffix_patterns 세트를 추가한다.
# snippets/urls.py
from django.urls import path
from rest_framework.urlpatterns import format_suffix_patterns
from snippets import views
urlpatterns = [
path('snippets/', views.snippet_list),
path('snippets/<int:pk>/', views.snippet_detail),
]
urlpatterns = format_suffix_patterns(urlpatterns)
이러한 추가 URL 패턴을 반드시 추가할 필요는 없지만 특정 형식을 간단하고 깔끔하게 참조할 수 있는 방법을 제공한다.
How's it looking?
튜토리얼 1에서 했던 것처럼 커맨드 라인에서 API를 테스트 해보자. 전과 유사하게 작동하지만, 잘못된 요청을 보낼 경우 오류 처리가 좀 더 개선된 것을 볼 수 있다.
http http://127.0.0.1:8000/snippets/
HTTP/1.1 200 OK
...
[
{
"id": 1,
"title": "",
"code": "foo = \"bar\"\n",
"linenos": false,
"language": "python",
"style": "friendly"
},
{
"id": 2,
"title": "",
"code": "print(\"hello, world\")\n",
"linenos": false,
"language": "python",
"style": "friendly"
}
]
Accept 헤더를 사용하여 반환되는 응답의 형식을 제어할 수 있다.
http http://127.0.0.1:8000/snippets/ Accept:application/json # Request JSON
http http://127.0.0.1:8000/snippets/ Accept:text/html # Request HTML
또는 형식 접미사를 추가하여 사용할 수도 있다.
http http://127.0.0.1:8000/snippets.json # JSON suffix
http http://127.0.0.1:8000/snippets.api # Browsable API suffix
마찬가지로 콘텐츠 유형 헤더를 사용하여 전송하는 요청의 형식을 제어할 수 있다.
# POST using form data
http --form POST http://127.0.0.1:8000/snippets/ code="print(123)"
{
"id": 3,
"title": "",
"code": "print(123)",
"linenos": false,
"language": "python",
"style": "friendly"
}
# POST using JSON
http --json POST http://127.0.0.1:8000/snippets/ code="print(456)"
{
"id": 4,
"title": "",
"code": "print(456)",
"linenos": false,
"language": "python",
"style": "friendly"
}
위의 http 요청에 --debug 스위치를 추가하면 요청 헤더에서 요청 유형을 확인할 수 있다.
Browsability
API는 클라이언트 요청에 따라 응답의 콘텐츠 유형을 선택하기 때문에 기본적으로 웹 브라우저에서 리소스를 요청할 때 리소스의 HTML 형식 표현을 반환한다. 이를 통해 API는 웹 브라우저에서 완전히 검색 가능한 HTML 표현을 반환할 수 있다.
웹 브라우징이 가능한 API를 사용하면 사용 편의성이 크게 향상되고 API 개발과 사용이 훨씬 쉬워집니다. 또한 API를 검사하고 작업하려는 다른 개발자의 진입 장벽을 크게 낮출 수 있다.
'DRF Tutorial' 카테고리의 다른 글
DRF Tutorial 4: Authentication & Permissions 1 (0) | 2023.02.15 |
---|---|
DRF Tutorial 3: Class-based Views (0) | 2023.02.14 |
DRF Tutorial 2: Requests and Responses 1 (0) | 2023.02.14 |
DRF Tutorial 1: Serialization 3 (0) | 2023.02.14 |
DRF Tutorial 1: Serialization 2 (0) | 2023.02.14 |