mirror of
https://github.com/encode/django-rest-framework.git
synced 2024-11-13 05:06:53 +03:00
42 lines
2.0 KiB
Markdown
42 lines
2.0 KiB
Markdown
|
Returning URIs from your Web APIs
|
||
|
=================================
|
||
|
|
||
|
> The central feature that distinguishes the REST architectural style from other network-based styles is its emphasis on a uniform interface between components.
|
||
|
> -- <cite>Roy Fielding, Architectural Styles and the Design of Network-based Software Architectures.</cite>
|
||
|
|
||
|
As a rule, it's probably better practice to return absolute URIs from you web APIs, eg. "http://example.com/foobar", rather than returning relative URIs, eg. "/foobar".
|
||
|
|
||
|
The advantages of doing so are:
|
||
|
|
||
|
* It's more explicit.
|
||
|
* It leaves less work for your API clients.
|
||
|
* There's no ambiguity about the meaning of the string when it's found in representations such as JSON that do not have a native URI type.
|
||
|
* It allows use to easily do things like markup HTML representations with hyperlinks.
|
||
|
|
||
|
Django REST framework provides two utility functions to make it more simple to return absolute URIs from your Web API.
|
||
|
|
||
|
There's no requirement for you to use them, but if you do then the self-describing API will be able to automatically hyperlink it's output for you, which makes browsing the API much easier.
|
||
|
|
||
|
reverse(viewname, request, ...)
|
||
|
-------------------------------
|
||
|
|
||
|
Has the same behavior as [`django.core.urlresolvers.reverse`](1), except that it returns a fully qualified URL, using the request to determine the host and port.
|
||
|
|
||
|
from djangorestframework.utils import reverse
|
||
|
from djangorestframework.views import View
|
||
|
|
||
|
class MyView(View):
|
||
|
def get(self, request):
|
||
|
context = {
|
||
|
...
|
||
|
'url': reverse('year-summary', request, args=[1945])
|
||
|
}
|
||
|
return Response(context)
|
||
|
|
||
|
reverse_lazy(viewname, request, ...)
|
||
|
------------------------------------
|
||
|
|
||
|
Has the same behavior as [`django.core.urlresolvers.reverse_lazy`](2), except that it returns a fully qualified URL, using the request to determine the host and port.
|
||
|
|
||
|
[1]: https://docs.djangoproject.com/en/dev/topics/http/urls/#reverse
|
||
|
[1]: https://docs.djangoproject.com/en/dev/topics/http/urls/#reverse-lazy
|