diff options
| author | Tom Christie | 2012-10-19 19:59:46 +0100 | 
|---|---|---|
| committer | Tom Christie | 2012-10-19 19:59:55 +0100 | 
| commit | efabd2bb1b762fbdee2b48fa3a6ccb8f23c7e8dc (patch) | |
| tree | 7079d77c9e1bb40a229d8d6b4f871aaa8c59155d /docs/api-guide/format-suffixes.md | |
| parent | 46dffbd5b9fcb60885067bdf65c9d63db25f543b (diff) | |
| download | django-rest-framework-efabd2bb1b762fbdee2b48fa3a6ccb8f23c7e8dc.tar.bz2 | |
docs, docs, docs, docs, docs, docs, docs
Diffstat (limited to 'docs/api-guide/format-suffixes.md')
| -rw-r--r-- | docs/api-guide/format-suffixes.md | 52 | 
1 files changed, 51 insertions, 1 deletions
| diff --git a/docs/api-guide/format-suffixes.md b/docs/api-guide/format-suffixes.md index 7d72d9f8..6d5feba4 100644 --- a/docs/api-guide/format-suffixes.md +++ b/docs/api-guide/format-suffixes.md @@ -7,5 +7,55 @@ used all the time.  >  > — Roy Fielding, [REST discuss mailing list][cite] -[cite]: http://tech.groups.yahoo.com/group/rest-discuss/message/5857 +A common pattern for Web APIs is to use filename extensions on URLs to provide an endpoint for a given media type.  For example, 'http://example.com/api/users.json' to serve a JSON representation.  + +Adding format-suffix patterns to each individual entry in the URLconf for your API is error-prone and non-DRY, so REST framework provides a shortcut to adding these patterns to your URLConf. + +## format_suffix_patterns + +**Signature**: format_suffix_patterns(urlpatterns, suffix_required=False, allowed=None) + +Returns a URL pattern list which includes format suffix patterns appended to each of the URL patterns provided. + +Arguments: + +* **urlpatterns**: Required.  A URL pattern list. +* **suffix_required**:  Optional.  A boolean indicating if suffixes in the URLs should be optional or mandatory.  Defaults to `False`, meaning that suffixes are optional by default. +* **allowed**:  Optional.  A list or tuple of valid format suffixes.  If not provided, a wildcard format suffix pattern will be used.  + +Example: + +    from rest_framework.urlpatterns import format_suffix_patterns +     +    urlpatterns = patterns('blog.views', +        url(r'^/$', 'api_root'), +        url(r'^comment/$', 'comment_root'), +        url(r'^comment/(?P<pk>[0-9]+)/$', 'comment_instance') +    ) +     +    urlpatterns = format_suffix_patterns(urlpatterns, allowed=['json', 'html']) + +When using `format_suffix_patterns`, you must make sure to add the `'format'` keyword argument to the corresponding views.  For example. +    @api_view(('GET',)) +    def api_root(request, format=None): +        # do stuff... + +The name of the kwarg used may be modified by using the `FORMAT_SUFFIX_KWARG` setting. + +Also note that `format_suffix_patterns` does not support descending into `include` URL patterns. + +--- +         +## Accept headers vs. format suffixes + +There seems to be a view among some of the Web community that filename extensions are not a RESTful pattern, and that `HTTP Accept` headers should always be used instead.   + +It is actually a misconception.  For example, take the following quote from Roy Fielding discussing the relative merits of query parameter media-type indicators vs. file extension media-type indicators:  + +“That's why I always prefer extensions. Neither choice has anything to do with REST.” — Roy Fielding, [REST discuss mailing list][cite2] + +The quote does not mention Accept headers, but it does make it clear that format suffixes should be considered an acceptable pattern. + +[cite]: http://tech.groups.yahoo.com/group/rest-discuss/message/5857 +[cite2]: http://tech.groups.yahoo.com/group/rest-discuss/message/14844
\ No newline at end of file | 
