aboutsummaryrefslogtreecommitdiffstats
path: root/docs/howto/reverse.rst
diff options
context:
space:
mode:
authorTom Christie2012-02-21 06:09:30 -0800
committerTom Christie2012-02-21 06:09:30 -0800
commit49ebaf106d4c4357f51f6b2bbe533512340ea113 (patch)
treeddb6cb637899a327253bffc2888e376eeab4e9f1 /docs/howto/reverse.rst
parent5a5f24f263c218f4f04a6ea54bfc48a2794e152b (diff)
parentf17f3886f42c2068e6e8a41c6e5fe6bfe1408add (diff)
downloaddjango-rest-framework-49ebaf106d4c4357f51f6b2bbe533512340ea113.tar.bz2
Merge pull request #175 from izquierdo/custom_reverse
Custom reverse() and drop set_script_prefix
Diffstat (limited to 'docs/howto/reverse.rst')
-rw-r--r--docs/howto/reverse.rst47
1 files changed, 47 insertions, 0 deletions
diff --git a/docs/howto/reverse.rst b/docs/howto/reverse.rst
new file mode 100644
index 00000000..e4efbbca
--- /dev/null
+++ b/docs/howto/reverse.rst
@@ -0,0 +1,47 @@
+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."
+
+ -- Roy Fielding, Architectural Styles and the Design of Network-based Software Architectures
+
+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".
+
+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 us to easily do things like markup HTML representations with hyperlinks.
+
+Django REST framework provides two utility functions to make it simpler 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 its output for you, which makes browsing the API much easier.
+
+reverse(viewname, request, ...)
+-------------------------------
+
+The :py:func:`~utils.reverse` function has the same behavior as :py:func:`django.core.urlresolvers.reverse` [1]_, except that it takes a request object and 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, ...)
+------------------------------------
+
+The :py:func:`~utils.reverse_lazy` function has the same behavior as :py:func:`django.core.urlresolvers.reverse_lazy` [2]_, except that it takes a request object and returns a fully qualified URL, using the request to determine the host and port.
+
+.. rubric:: Footnotes
+
+.. [1] https://docs.djangoproject.com/en/dev/topics/http/urls/#reverse
+.. [2] https://docs.djangoproject.com/en/dev/topics/http/urls/#reverse-lazy