2012-02-21 10:23:31 +04:00
|
|
|
Returning URIs from your Web APIs
|
|
|
|
=================================
|
|
|
|
|
2012-02-23 20:02:16 +04:00
|
|
|
As a rule, it's probably better practice to return absolute URIs from you web
|
|
|
|
APIs, e.g. "http://example.com/foobar", rather than returning relative URIs,
|
|
|
|
e.g. "/foobar".
|
2012-02-21 10:23:31 +04:00
|
|
|
|
|
|
|
The advantages of doing so are:
|
|
|
|
|
|
|
|
* It's more explicit.
|
|
|
|
* It leaves less work for your API clients.
|
2012-02-23 20:02:16 +04:00
|
|
|
* 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 us to easily do things like markup HTML representations
|
|
|
|
with hyperlinks.
|
2012-02-21 10:23:31 +04:00
|
|
|
|
2012-02-23 20:02:16 +04:00
|
|
|
Django REST framework provides two utility functions to make it simpler to
|
|
|
|
return absolute URIs from your Web API.
|
2012-02-21 10:23:31 +04:00
|
|
|
|
2012-02-23 20:02:16 +04:00
|
|
|
There's no requirement for you to use them, but if you do then the
|
|
|
|
self-describing API will be able to automatically hyperlink its output for you,
|
|
|
|
which makes browsing the API much easier.
|
2012-02-21 10:23:31 +04:00
|
|
|
|
2012-02-23 20:02:16 +04:00
|
|
|
reverse(viewname, ..., request=None)
|
2012-02-21 10:23:31 +04:00
|
|
|
-------------------------------
|
|
|
|
|
2012-02-23 20:02:16 +04:00
|
|
|
The `reverse` function has the same behavior as
|
|
|
|
`django.core.urlresolvers.reverse`_, except that it optionally takes a request
|
|
|
|
keyword argument, which it uses to return a fully qualified URL.
|
2012-02-21 10:23:31 +04:00
|
|
|
|
2012-02-22 00:47:55 +04:00
|
|
|
from djangorestframework.reverse import reverse
|
2012-02-21 10:23:31 +04:00
|
|
|
from djangorestframework.views import View
|
|
|
|
|
|
|
|
class MyView(View):
|
|
|
|
def get(self, request):
|
|
|
|
context = {
|
2012-02-23 20:02:16 +04:00
|
|
|
'url': reverse('year-summary', args=[1945], request=request)
|
2012-02-21 10:23:31 +04:00
|
|
|
}
|
|
|
|
|
|
|
|
return Response(context)
|
|
|
|
|
2012-02-23 20:02:16 +04:00
|
|
|
reverse_lazy(viewname, ..., request=None)
|
2012-02-21 10:23:31 +04:00
|
|
|
------------------------------------
|
|
|
|
|
2012-02-23 20:02:16 +04:00
|
|
|
The `reverse_lazy` function has the same behavior as
|
|
|
|
`django.core.urlresolvers.reverse_lazy`_, except that it optionally takes a
|
|
|
|
request keyword argument, which it uses to return a fully qualified URL.
|
2012-02-21 10:23:31 +04:00
|
|
|
|
2012-02-22 00:47:55 +04:00
|
|
|
.. _django.core.urlresolvers.reverse: https://docs.djangoproject.com/en/dev/topics/http/urls/#reverse
|
|
|
|
.. _django.core.urlresolvers.reverse_lazy: https://docs.djangoproject.com/en/dev/topics/http/urls/#reverse-lazy
|