diff options
Diffstat (limited to 'docs/urls.md')
| -rw-r--r-- | docs/urls.md | 42 |
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 |
