Возвращение URL-адресов

Центральной особенностью, отличающей архитектурный стиль REST от других сетевых стилей, является акцент на едином интерфейсе между компонентами.

‒ Рой Филдинг, <<<0>>.

Как правило, лучше возвращать абсолютные URI из ваших Web API, например http://example.com/foobar , а не относительные URI, например /foobar.

Преимуществами этого являются:

  • Это более четко выражено.

  • Это оставляет меньше работы для ваших клиентов API.

  • Нет никакой двусмысленности относительно значения строки, когда она встречается в таких представлениях, как JSON, которые не имеют собственного типа URI.

  • С его помощью легко делать такие вещи, как разметка HTML-представлений с гиперссылками.

Фреймворк REST предоставляет две служебные функции для упрощения возврата абсолютных URI из вашего Web API.

Использовать их не обязательно, но если вы их используете, то самоописывающийся API сможет автоматически делать для вас гиперссылки на свой вывод, что значительно упростит просмотр API.

обратный

Подпись: reverse(viewname, *args, **kwargs)

Имеет такое же поведение, как ** ``django.urls.reverse:doc:` <https://docs.djangoproject.com/en/stable/topics/http/urls/#reverse>`** , за исключением того, что возвращает полностью определенный URL, используя запрос для определения хоста и порта.

Вы должны включить запрос в качестве аргумента ключевого слова в функцию, например:

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:doc:` <https://docs.djangoproject.com/en/stable/topics/http/urls/#reverse-lazy>`** , за исключением того, что возвращает полностью определенный URL, используя запрос для определения хоста и порта.

Как и в случае с функцией reverse, вы должны включить запрос в качестве аргумента ключевого слова в функцию, например:

api_root = reverse_lazy('api-root', request=request)
Вернуться на верх