The main REST framework options for Django seem to be:<p>* Piston (<a href="https://bitbucket.org/jespern/django-piston/" rel="nofollow">https://bitbucket.org/jespern/django-piston/</a>)<p>* Tastiepie (<a href="http://toastdriven.github.com/django-tastypie/" rel="nofollow">http://toastdriven.github.com/django-tastypie/</a>)<p>* django-rest-framework (<a href="http://django-rest-framework.org/" rel="nofollow">http://django-rest-framework.org/</a>)<p>* Web Machine (<a href="https://github.com/benoitc/dj-webmachine" rel="nofollow">https://github.com/benoitc/dj-webmachine</a>)<p>* Dagny (<a href="https://github.com/zacharyvoase/dagny" rel="nofollow">https://github.com/zacharyvoase/dagny</a>)<p>* Roll your own (surprisingly common since it's not too hard)<p>I think it's great that there are so many options but it's starting to get bewildering. I think part of the reason for this is how un-restful the default django routing/view technique is. The code samples in the Django documentation don't exactly start beginners down the right track the way other web frameworks do. You can do it the right way, but it requires a fair amount of discipline.<p>I've been toying with replacing all of my django routing/views with a framework (or at least a pattern) that encourages more restful design.
If you're looking for a REST framework for Django, be sure to see this table:<p><a href="http://www.djangopackages.com/grids/g/api/" rel="nofollow">http://www.djangopackages.com/grids/g/api/</a><p>At this point (mid-2011) Django-Tastypie is the clear winner by its number of authors, updated codebase, documentation, and overall activity.
Do not believe any programmer, manager, or salesperson who claims that code can be self-documenting or automatically documented. It ain't so. Good documentation includes background and decision information that cannot be derived from the code.
- Jef Raskin on self-documenting code<p><a href="http://queue.acm.org/detail.cfm?id=1053354" rel="nofollow">http://queue.acm.org/detail.cfm?id=1053354</a><p>The project page itself says 'self-describing'
I wish there was something like Selector's named arguments (<a href="http://lukearno.com/projects/selector/" rel="nofollow">http://lukearno.com/projects/selector/</a>):<p>Selector().add(path, GET=get_entity, PUT=put_entity, ...)<p>It's nicer with a mapping file:<p>/path
GET get_entity
PUT put_entity