django-tastypie和djangorestframework有什么区别?

为什么你会使用另一个,为您的Django应用程序公开一个API?

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

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

作为django-rest-framework的作者,我有一个明显的偏见;)但是,我希望对此相当客观的看法是这样的:

TastyPie

  • 正如Torsten所指出的那样,你不会用与真棒django大海捞针相同的东西来写错误。 从我在邮件列表上看到的Daniel Lindsey等人超级有用,而Tastypie是稳定的,全面的,有据可查的
  • 优秀的给你一个明智的默认行为,并build立一个API风格非常容易。

Django REST框架

  • 为您提供HTML浏览式自描述API。 (EG,请参阅教程API 。)能够直接在浏览器中浏览和与API进行交互是一个很大的可用性胜利。
  • 在Django的基于类的视图等的基础上,试图保持与Django习惯用法紧密相关(而TastyPie是在Django的CBV存在之前出现的,所以它使用它自己的基于类的视图实现)
  • 我想认为,基础架构是非常好的build立,解耦等…

无论如何,两者都是好的。 我可能会把Tastypie描述为给你一个明智的默认设置,而REST框架是非常好的分离和灵活的。 如果您打算在API中投入大量时间,我build议您浏览一下每个文档和代码库,然后试着去了解哪些更适合您。

显然,还有“为什么好吃的馅饼? 它的README部分和“REST框架2公告” 。

另请参阅Daniel Greenfeld在2012年5月发表的关于为DjangoselectAPI框架的博客文章(值得注意的是,这仍然是大REST框架2.0版本的前几个月)。

还有一些关于Reddit的post与人们询问了同样的问题,从2013年12月到2013 年 7月 。

上次更新2014年2月

两者都是不错的select。

对于filter,tastypie更加强大的开箱即用。 如果您有一个公开模型的视图,则可以使用Django风格的不等式filter:

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

或OR查询:

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

这些可能与djangorestframework,但你必须编写自定义filter为每个模型。

为了回溯,我对django-rest-framework印象深刻。 当DEBUG = False时,Tastypie尝试通过电子邮件向settings.ADMINS发送exception。 当DEBUG = True , 默认的错误消息是序列化的JSON ,这很难读取。

编辑过时的答案,tastypie不是真正维护了。 如果您必须select框架来执行REST,请使用Django REST框架。

有关他们之间的实际差异的概述,你应该阅读他们的文档。 他们或多或less都是完整和相当成熟的。

我个人倾向于品味。 这似乎更容易设置。 它是由创builddjango-haystack的同样的人完成的,根据django-packages,它比Django REST框架更多地使用它。

值得注意的是,由于这是第一次被要求,DRF已经不断壮大。

这是在github上的两个(在提交,明星,叉子和贡献者方面)

DRF具有OAuth 2支持和可浏览的API。

老实说,最后一个特点就是杀手。 能够把所有的前端开发者指向可浏览的API,当他们不确定某些事情是如何工作的时候,说“去玩吧, 找出'太棒了。

不仅仅是因为这意味着他们可以根据自己的条件来理解它,并且知道API确实绝对符合“文档”所说的。 在与API集成的世界中,这一事实本身使得DRF的框架被打败。

在使用了两者之后,我喜欢(首选)关于Django Rest Framwork的一件事就是与Django非常一致。

写模型序列化程序与写模型表单非常相似。 内置的通用视图非常类似于Django的HTML通用视图。

那么,Tastypie和DRF都是很好的select。 你们其中任何一个都不会出错。 (我从来没有在活塞上工作过,现在这种情况已经不是现在了,所以不会/不能评论它,采取授予)。 在我的愚见中: 应该select你的(和你的技术团队的)技能,知识和能力。 而不是在TastyPie和DRF提供什么,除非你正在build立像Quora,Facebook或Google这样的非常大的东西。

就我个人而言,当我甚至不知道django的时候,我最终开始在TastyPie上工作。 这一切都是有道理的,只知道REST和HTTP很好,但几乎没有或几乎没有关于Django的知识。 因为我唯一的目的是立即构buildRESTful API,以便在移动设备中使用。 所以,如果你就像“当时恰好被称为django-new-bie”那样, 不要再为TastyPie去尝试。

但是如果你有多年使用Django的经验,使用高级概念(如基于类的视图,表单,模型validation器,QuerySet,pipe理器和模型实例以及它们如何相互交互) *去DRF。 ** DFR是基于Django基于类的观点。 DRF是惯用的django。 它就像你正在写模型的forms,validation等(嗯,惯用的Django不是靠近惯用python的地方,如果你是python专家,但是没有Django的经验,那么你最初可能很难适应django的惯用哲学,这也是DRF的问题)。 DRF带有许多像Django一样的内置魔法方法。 如果你喜欢Django神奇的方法和哲学** DRF **只是为你。

现在,回答确切的问题:

Tastypie:

优点:

  1. 易于入门并提供基本的functionOOB(开箱即用)
  2. 大多数情况下,您不会处理像CBV,Forms等高级Django概念
  3. 更可读的代码和更less的魔法!
  4. 如果你的模型是非ORM,那就去做吧。

缺点:

  1. 不严格遵循惯用的Django(心态很好,python和django的哲学很不一样)
  2. 一旦你变大,可能有点难以定制API
  3. 没有Oauthentication

DRF:

  1. 遵循惯用的django。 (如果你知道django在里面,并且非常适合CBV,Forms等毫无疑问的去做)
  2. 使用ModelViewSets提供开箱即用的RESTfunction。 同时,使用CustomSerializer,APIView,GenericViews等为定制提供更好的控制。
  3. 更好的authentication。 更容易编写自定义权限类。 工作得很好,重要的是非常容易使其与第三方库和OAuth一起工作。 DJANGO-REST-AUTH值得一提的是Auth / SocialAuthentication / Registration库。 ( https://github.com/Tivix/django-rest-auth

缺点:

  1. 如果你不是很了解Django,就不要这样做。
  2. 魔法! 有些时候很难理解魔法。 因为它被写在django的CBV之上,而CBV本质上是相当复杂的。 ( https://code.djangoproject.com/ticket/6735
  3. 有陡峭的学习曲线。

我个人将在我的下一个项目中使用什么?

  • 现在,我不再是MAGIC和开箱即用function的粉丝。 因为他们都付出了很高的代价。 *假设我对项目时间和预算有所有的select和控制权,我会从像RESTLess( https://github.com/toastdriven/restless )(由TastyPie和django-haystack( http: //haystacksearch.org/ ))。 同样的事情可能/明确地select像Flask这样的轻量级Web框架

  • 但为什么? – 更可读,简单和可pipe理的惯用python(又名pythonic)代码。 尽pipe更多的代码,但最终提供了很大的灵活性和定制。

    • 显式比隐式更好。
    • 简单胜于复杂。
    • 复杂比复杂好。
    • 平面比嵌套更好。
    • 稀疏比密集好。
    • 可读性计数。
    • 特例不足以打破规则。

如果只有Django和TastyPie和DRF之一,那么该怎么办?

  • 现在,在了解Django的情况下,我会和DRF一起去。 **
  • 为什么? – 惯用的djagno! (虽然我不喜欢)。 更好的OAuth和第三方整合(django-rest-auth是我最喜欢的)。

那你为什么selectDRF / TastyPie呢?

  • 大多数情况下,我曾与初创公司和小公司合作,这些公司和预算紧张, 并需要提供一些快速和可用的东西。 Django很好地服务于这个目的。 (我一点也不说django是不可扩展的,有Quora,Disquss,Youtube等网站,但是这些都需要时间和更多的平均技能)

我希望这会帮助你做出更好的决定。

其他参考文献 – 1. Tastypie的状态( http://toastdriven.com/blog/2014/may/23/state-tastypie/)2 . django-tastypie和djangorestframework之间有什么区别? ( django-tastypie和djangorestframework有什么区别? )

Django-tastypie不再由它的原创者维护,他创造了一个新的轻量级框架。

目前你应该使用django-rest-framework和django,如果你愿意公开你的API的话。

大公司正在使用它。 django-rest-framework是django团队的核心成员,他获得资金来维护django-rest-framework。

django-rest-framework也有大量不断增长的第三个附庸风格的软件包,这将帮助你更轻松地构build你的API。

drf的某些部分也将在django中合并。

drf提供更好的模式和工具,然后django-tastypie。

简而言之,它devise得很好,维护得当,资助,提供大型组织信任的第三方应用程序,比tastypie更容易和更less的样板等。