django-tastypie和djangorestframework之间有什么区别?

时间:2011-09-05 02:04:12

标签: django api rest django-rest-framework

为什么要为你的Django应用程序公开API而使用其中一个?

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

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

7 个答案:

答案 0 :(得分:201)

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

TastyPie

  • 正如托尔斯滕所指出的那样,你不会错过那些与真棒django-haystack相同的窥视所写的东西。从我在他们的邮件列表中看到的,Daniel Lindsey等人非常有帮助,Tastypie稳定,全面且记录良好
  • Excel为您提供了一套合理的默认行为,并使用这种风格构建API非常容易。

Django REST框架

  • 为您提供HTML浏览式自描述API。 (EG,请参阅tutorial API。)能够直接在浏览器中导航和与API交互是一个很大的可用性胜利。
  • 试图接近Django的习语 - 建立在Django基于类的视图之上......等等(尽管TastyPie在Django的CBV存在之前出现,所以使用它自己的基于类的视图实现)
  • 我想认为底层架构很好地构建,解耦等......

无论如何,两者都很好。我可能会将Tastypie描述为为您提供开箱即用的合理默认设置,并且REST框架非常好地解耦和灵活。如果您计划在API中投入大量时间,我建议您浏览文档和文档。每个代码库,并试图让你感觉更适合你。

显然,它的自述文件中还有'Why TastyPie?'部分和'REST framework 3'

另请参阅Daniel Greenfeld在2012年5月发表在Choosing an API framework for Django上的博客文章(值得注意的是,这仍然是在大型REST框架2.0发布之前的几个月)。

Reddit上还有几个主题,人们从Dec 2013July 2013提出同样的问题。

答案 1 :(得分:19)

两者都是不错的选择。

对于过滤器,tastypie更具开箱即用功能。如果你有一个公开模型的视图,你可以做Django风格的不等式过滤器:

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

或OR查询:

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

使用djangorestframework可以实现这些功能,但您必须为每个模型编写自定义过滤器。

对于追溯,我对django-rest-framework印象更深刻。 Tastypie尝试在settings.ADMINS时通过电子邮件向DEBUG = False发送电子邮件。当DEBUG = Truethe default error message is serialised JSON更难阅读时。

答案 2 :(得分:11)

编辑过时的答案,tastypie不再真正维护。如果必须选择一个框架来执行REST,请使用Django REST框架。

有关两者之间实际差异的概述,您应该阅读他们的文档。它们或多或少完整且非常成熟。

我个人倾向于尝试tastypie。它似乎更容易设置。它是由创建django-haystack的同一个人完成的,这是很棒的,根据django-packages,它比Django REST框架使用得更多。

答案 3 :(得分:5)

值得注意的是,因为这是第一次被要求DRF不断壮大。

这是两个在github上更活跃(在提交,明星,分叉和贡献者方面)

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

老实说,最后一个功能就是杀手。能够指出我所有的前端开发人员在可浏览的API上,当他们不确定某些东西是如何工作的时候说'去玩;找出'太棒了。

尤其是因为这意味着他们可以按照自己的条件理解它,并且知道API确实绝对地完成了“文档”所说的内容。在与API集成的世界中,只有这一事实才能使DRF成为可以胜任的框架。

答案 4 :(得分:1)

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

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

答案 5 :(得分:1)

嗯,Tastypie和DRF都是很好的选择。你只是不能出错。 (我从来没有在活塞上工作过;现在它已经不再是趋势,所以不会/不能对它发表评论。采取授予。)。 以我的拙见:应该选择你的(以及你的技术团队的)技能,知识和能力。而不是关于TastyPie和DRF提供的东西,除非你正在构建一些非常像Quora,Facebook或Google。

就个人而言,当我甚至不熟悉django的时候,我最终开始在TastyPie上工作。这一切都是有意义的,只知道REST和HTTP非常好,但几乎没有或几乎没有关于django的知识。因为我唯一的目的是立即构建RESTful API,这些API将在移动设备中使用。所以,如果你就像'我恰好在那个时候叫做django-new-bie',不要再考虑更多的吃SweetPie。

但是如果你有很多多年使用Django的经验,那么就可以深入了解并使用高级概念(如基于类的视图,表单,模型验证器,QuerySet,Manager和模型实例)他们如何彼此互动),**去寻找DRF。 ** DFR基于django基于类的视图。 DRF是惯用的django。就像你正在编写模型形式,验证器等一样。(好吧,惯用的django并不适合惯用的python。如果你是python专家但没有使用Django的经验那么你可能很难适应惯用的django哲学和那个问题DRF也是如此)。 DRF带有许多内置的魔术方法,就像django一样。如果你喜欢django神奇的方法和哲学** DRF **只适合你。

现在,只是回答确切的问题:

<强> Tastypie:

优点:

  1. 易于入门并提供基本功能OOB(开箱即用)
  2. 大部分时间你都不会处理像CBV,Forms等高级Django概念
  3. 更易读的代码,更少魔法!
  4. 如果您的模型是非ORM,请选择它。
  5. 缺点:

    1. 不严格遵循惯用的Django(心灵蟒蛇和django的哲学是完全不同的)
    2. 一旦你做大的话,可能有点难以自定义API
    3. No O-Auth
    4. <强> DRF:

      1. 关注惯用的django。 (如果你知道里面的django,并且非常适合CBV,表格等毫无疑问地去了它)
      2. 使用ModelViewSets提供开箱即用的REST功能。同时,使用CustomSerializer,APIView,GenericViews等提供更好的自定义控制。
      3. 更好的身份验证。更容易编写自定义权限类。工作非常好,非常容易使它与第三方库和OAuth一起使用。 DJANGO-REST-AUTH值得一提的是用于Auth / SocialAuthentication / Registration的LIBRARY。 (https://github.com/Tivix/django-rest-auth
      4. 缺点:

        1. 如果你不熟悉Django,请不要这样做。
        2. 魔法!有时候很难理解魔法。因为它是在django的CBV之上编写的,而后者本质上相当复杂。 (https://code.djangoproject.com/ticket/6735
        3. 学习曲线陡峭。
        4. 我个人在下一个项目中会使用什么?

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

          • 但为什么呢? - 更易读,简单和易于管理的惯用python(又名pythonic)代码。虽然代码更多但最终提供了极大的灵活性和定制。

            • 明确胜于隐性。
            • 简单比复杂更好。
            • 复杂比复杂更好。
            • Flat比嵌套好。
            • 稀疏比密集更好。
            • 可读性很重要。
            • 特殊情况不足以打破规则。

          如果除了Django和TastyPie和DRF之外别无选择,该怎么办?

          • 现在,相当了解Django,我会选择** DRF。 **
          • 为什么? - 惯用的djagno! (虽然我不喜欢它)。更好的OAuth和第三方集成(django-rest-auth是我的最爱)。

          那么为什么你首先选择了DRF / TastyPie?

          • 我主要与初创公司和小公司合作,这些公司在预算和时间上都很紧张;并需要提供快速和可用的东西。 Django很好地服务于这个目的。 (我根本不是说django不可扩展。有Quora,Disquss,Youtube等网站在它上面运行。但它需要的时间多于平均技能)

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

            

          其他参考资料 -   1. Tastypie状态(http://toastdriven.com/blog/2014/may/23/state-tastypie/)   2. django-tastypie和djangorestframework之间有什么区别? (What are the differences between django-tastypie and djangorestframework?

答案 6 :(得分:1)

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

如果您愿意公开您的API,目前您应该将django-rest-framework与django一起使用。

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

django-rest-framework也有大量不断增长的第3个艺术套餐,这将帮助您更轻松地轻松构建API。

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

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

简而言之,它设计精良,维护良好,资金充足,提供庞大的第三方应用程序,受到大型组织的信任,比tastypie更容易,更少样板。