Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What are the differences between django-tastypie and djangorestframework? [closed]

Why would you use one over the other, for exposing an API for your Django app?

http://pypi.python.org/pypi/djangorestframework/

http://pypi.python.org/pypi/django-tastypie

like image 315
coffee-grinder Avatar asked Sep 05 '11 02:09

coffee-grinder


People also ask

What is difference between Django and Django REST framework?

Django is the web development framework in python whereas the Django Rest Framework is the library used in Django to build Rest APIs. Django Rest Framework is especially designed to make the CRUD operations easier to design in Django. Django Rest Framework makes it easy to use your Django Server as an REST API.

What is use of Django REST API?

Django REST framework is a powerful and flexible toolkit for building Web APIs. Some reasons you might want to use REST framework: The Web browsable API is a huge usability win for your developers. Authentication policies including packages for OAuth1a and OAuth2.

Is Django REST framework part of Django?

The Django REST Framework (DRF) is a package built on top of Django to create web APIs. One of the most remarkable features of Django is its Object Relational Mapper (ORM) which facilitates interaction with the database in a Pythonic way.

What is Django REST framework Quora?

DRF is a flexible tool with a customizable structure that enables the development of both simple API endpoints and complex REST structures. Advantages of Django REST framework; Generic classes for Create, Read, Updete, Delete operations. Clean, simple, views for Resources, using Django's new class based views.


7 Answers

As the author of django-rest-framework, I've got an obvious bias ;) but my hopefully-fairly-objective opinion on this is something like:

TastyPie

  • As Torsten noted, you're not going to go far wrong with something written by the same peeps as the awesome django-haystack. From what I've seen on their mailing list Daniel Lindsey et al are super-helpful, and Tastypie is stable, comprehensive and well documented
  • Excels in giving you a sensible set of default behaviour and making building an API with that style incredibly easy.

Django REST framework

  • Gives you HTML browse-able self-describing APIs. (EG, see the tutorial API.) Being able to navigate and interact with the API directly in the browser is a big usability win.
  • Tries to stay close to Django idioms throughout - built on top of Django's class based views, etc... (Whereas TastyPie came along before Django's CBVs existed, so uses it's own class-based views implementation)
  • I'd like to think that the underlying architecture is pretty nicely built, decoupled etc...

In any case, both are good. I would probably characterise Tastypie as giving you a sensible set of defaults out of the box, and REST framework as being very nicely decoupled and flexible. If you're planning on investing a lot of time in the API, I'd def recommend browsing through the docs & codebase of each and trying to get a feel for which suits you more.

Obviously, there's also the 'Why TastyPie?' section in it's README, and the 'REST framework 3'.

See also Daniel Greenfeld's blog post on Choosing an API framework for Django, from May 2012 (Worth noting that this was still a few months before the big REST framework 2.0 release).

Also a couple of threads on Reddit with folks asking this same question, from Dec 2013 and July 2013.

like image 116
Tom Christie Avatar answered Oct 05 '22 13:10

Tom Christie


Both are good choices.

For filters, tastypie is more powerful out-of-the-box. If you have a view that exposes a model, you can do Django-style inequality filters:

http://www.example.com/api/person?age__gt=30

or OR queries:

http://www.example.com/api/mymodel?language__in=en&language__in=fr

these are possible with djangorestframework, but you have to write custom filters for each model.

For tracebacks, I've been more impressed with django-rest-framework. Tastypie tries to email settings.ADMINS on exceptions when DEBUG = False. When DEBUG = True, the default error message is serialised JSON, which is harder to read.

like image 30
Wilfred Hughes Avatar answered Oct 05 '22 14:10

Wilfred Hughes


EDIT Outdated answer, tastypie is not really maintained anymore. Use Django REST framework if you have to choose a framework to do REST.

For an overview about the actual differences between both of them you should read their documentation. They are both more or less complete and quite mature.

I personally tend to tastypie though. It seems to be easier to set it up. It's done from the same people which created django-haystack which is awesome and according to django-packages it is used more than Django REST framework.

like image 28
Torsten Engelbrecht Avatar answered Oct 05 '22 15:10

Torsten Engelbrecht


It's worth noting that since this was first asked DRF has gone from strength to strength.

It's the more active of the two on github (both in terms of commits, stars, forks and contributors)

DRF has OAuth 2 support and the browsable API.

Honestly for me that last feature is the killer. Being able to point all my front-end devs at the browsable API when they aren't sure how something works and say 'Go play; find out' is fantastic.

Not least because it means they get to understand it on their own terms and know that the API really, definitely, absolutely does what the 'documentation' says it does. In the world of integrating with APIs, that fact alone makes DRF the framework to beat.

like image 21
Tom Manterfield Avatar answered Oct 05 '22 15:10

Tom Manterfield


Well, Tastypie and DRF both are excellent choices. You simply can’t go wrong with either of them. (I haven’t worked on Piston ever; and its kind of not trending anymore now a days so won’t / can’t comment on it. Taken for Granted.). In my humble opinion: Choice should be made on yours (and your tech team’s) skills, knowledge and capabilities. Rather than on what TastyPie and DRF offers, unless off-course you are building something really big like Quora, Facebook or Google.

Personally, I ended up starting working first on TastyPie at a time when I didn’t even know django properly. It all made sense at that time, only knowing REST and HTTP very well but with almost no or little knowledge about django. Because my only intention was to build RESTful APIs in no time which were to be consumed in mobile devices. So if you are just like ‘I happen to be at that time called django-new-bie’, Don’t think more go for TastyPie.

But if you have many years of experience working with Django, knows it inside out and very comfortable using advanced concepts (like Class Based Views, Forms, Model Validator, QuerySet, Manager and Model Instances and how all they interact with one another), **go for DRF. **DFR is bases on django’s class based views. DRF is idiomatic django. Its like you are writing model forms, validators etc. (Well, idiomatic django is no where near to idiomatic python. If you are python expert but have no experience with Django then you might be having hard time initially fit into idiomatic django philosophy and for that matter DRF as well). DRF comes with lots of inbuilt magic methods just like django. If you love the django magical methods and philosophy **DRF **is just for you.

Now, just to answer the exact question:

Tastypie:

Advantages:

  1. Easy to get started with and provide basic functionalities OOB (out of the box)
  2. Most of the time you won’t be dealing with Advanced Django concepts like CBVs, Forms etc
  3. More readable code and less of magic!
  4. If your models are NON-ORM, go for it.

Disadvantages:

  1. Doesn’t strictly follow idiomatic Django (mind well python and django’s philosophies are quite different)
  2. Probably bit tough to customize APIs once you go big
  3. No O-Auth

DRF:

  1. Follow idiomatic django. (If you know django inside out, and very comfortable with CBV, Forms etc without any doubt go for it)
  2. Provides out of the box REST functionality using ModelViewSets. At the same time, provides greater control for customization using CustomSerializer, APIView, GenericViews etc.
  3. Better authentication. Easier to write custom permission classes. Work very well and importantly very easy to make it work with 3rd party libraries and OAuth. DJANGO-REST-AUTH is worth mentioning LIBRARY for Auth/SocialAuthentication/Registration. (https://github.com/Tivix/django-rest-auth)

Disadvantages:

  1. If you don’t know Django very well, don’t go for this.
  2. Magic! Some time very hard to understand magic. Because its been written on top of django’s CBV which are in turn quite complex in nature. (https://code.djangoproject.com/ticket/6735)
  3. Has steep learning curve.

Personally what would I use in my next project?

  • Now, I am no more a fan of MAGIC and Out-of-box functionalities. Because all they come at a *great cost. * Assuming I have all choices and control over project time and budget, I would start with something light weight like RESTLess (https://github.com/toastdriven/restless) (created by the creator of TastyPie and django-haystack (http://haystacksearch.org/)). And for the same matter probably/definately choose the lightweight web framework like Flask.

  • But why? - More readable, simple and manageable idiomatic python (aka pythonic) code. Though more code but eventually provide great flexibility and customization.

    • Explicit is better than implicit.
    • Simple is better than complex.
    • Complex is better than complicated.
    • Flat is better than nested.
    • Sparse is better than dense.
    • Readability counts.
    • Special cases aren't special enough to break the rules.

What if you have only no choice but Django and one of TastyPie and DRF?

  • Now, knowing the Django reasonably well, I will go with **DRF. **
  • Why? - idiomatic djagno! (I don’t love it though). Better OAuth and 3rd party integration (django-rest-auth is my favorite).

Then why you chose the DRF/TastyPie at first place?

  • Mostly I have worked with startups and small firms, which are tight on budget and time; and need to deliver something quick and usable. Django serve this purpose very well. (I am not at all saying that django is not scalable. There are websites like Quora, Disquss, Youtube etc run on it. But all it require time and more then average skills)

I hope, it will help you to take better decision.

Other references - 1. The State of Tastypie (http://toastdriven.com/blog/2014/may/23/state-tastypie/) 2. What are the differences between django-tastypie and djangorestframework? (What are the differences between django-tastypie and djangorestframework?)

like image 41
Jadav Bheda Avatar answered Oct 05 '22 14:10

Jadav Bheda


Having used both, one thing that I liked (preferred) about Django Rest Framwork is that is is very consistent with Django.

Writing model serializers is very similar to writing model forms. The built in Generic Views are very similar to Django's generic views for HTML.

like image 33
wobbily_col Avatar answered Oct 05 '22 15:10

wobbily_col


Django-tastypie is no longer maintained by it's original creator and he created a new light weight framework of his own.

At present you should use django-rest-framework with django if you are willing to expose your API.

Large corporations are using it. django-rest-framework is a core member of django team and he get funding to maintain django-rest-framework.

django-rest-framework also have huge number of ever growing 3rd arty packages too which will help you build your API's more easily with less hassles.

Some part of drf will also be merged in django proper.

drf provide more better patterns and tools then django-tastypie.

In short it's well designed, well maintained, funded, provide huge 3rd party apps, trusted by large organisations, easier and less boilerplate etc over tastypie.

like image 23
auvipy Avatar answered Oct 05 '22 13:10

auvipy