REST 아키텍처 스타일을 다른 네트워크 기반 스타일과 구분하는 핵심 기능은 구성 요소 간의 균일한 인터페이스에 중점을 둔다는 점입니다.
— Roy Fielding, Architectural Styles and the Design of Network-based Software Architectures
일반적으로, Web API에서 상대 URI(/foobar 같은)보다는 절대 URI(http://example.com/foobar 같은)를 반환하는 것이 더 나은 구현 방법입니다.
그렇게 할 경우의 이점은 다음과 같습니다:
REST framework는 Web API에서 절대 URI를 반환하는 것을 더 간단하게 만들어 주는 두 가지 유틸리티 함수를 제공합니다.
이 함수들을 반드시 사용해야 하는 것은 아니지만, 사용하면 self-describing API(자체 설명 API)가 자동으로 하이퍼링크를 생성하여 API 탐색을 훨씬 쉽게 만들어 줍니다.
형식: reverse(viewname, *args, **kwargs)
이 함수는 django.urls.reverse와 동일한 동작을 하되, 요청(request)을 사용하여 호스트와 포트를 결정하고 완전히 정규화된 URL을 반환합니다.
이 함수를 사용할 때는 request를 키워드 인자로 포함해야 합니다. 예를 들어:
from rest_framework.reverse import reverse
from rest_framework.views import APIView
from django.utils.timezone import now
class APIRootView(APIView):
def get(self, request):
year = now().year
data = {
...
'year-summary-url': reverse('year-summary', args=[year], request=request)
}
return Response(data)
형식: reverse_lazy(viewname, *args, **kwargs)
이 함수는 django.urls.reverse_lazy와 동일한 동작을 하되, 요청(request)을 사용하여 호스트와 포트를 결정하고 완전히 정규화된 URL을 반환합니다.
reverse 함수와 마찬가지로 request를 키워드 인자로 포함해야 합니다. 예를 들어:
api_root = reverse_lazy('api-root', request=request)