aboutsummaryrefslogtreecommitdiffstats
path: root/docs/urls.md
diff options
context:
space:
mode:
Diffstat (limited to 'docs/urls.md')
-rw-r--r--docs/urls.md42
1 files changed, 42 insertions, 0 deletions
diff --git a/docs/urls.md b/docs/urls.md
new file mode 100644
index 00000000..1828dd68
--- /dev/null
+++ b/docs/urls.md
@@ -0,0 +1,42 @@
+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 \ No newline at end of file