160

你为什么要使用一个而不是另一个来为你的 Django 应用程序公开一个 API?

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

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

4

7 回答 7

207

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

美味派

  • 正如 Torsten 所指出的,与令人敬畏的django-haystack相同的窥视者编写的东西不会出错。从我在他们的邮件列表中看到的内容来看,Daniel Lindsey 等人非常有帮助,而且 Tastypie 稳定、全面且有据可查
  • 擅长为您提供一组合理的默认行为,并使构建具有这种风格的 API 变得异常容易。

Django REST 框架

  • 为您提供 HTML 可浏览的自描述 API。(例如,请参阅教程 API。)能够直接在浏览器中导航并与 API 交互是一个巨大的可用性胜利。
  • 尝试始终接近 Django 惯用语 - 建立在 Django 的基于类的视图等之上……(而 TastyPie 在 Django 的 CBV 存在之前就出现了,所以使用它自己的基于类的视图实现)
  • 我想认为底层架构构建得非常好,解耦等......

无论如何,两者都很好。我可能会将 Tastypie 描述为开箱即用地为您提供一组合理的默认值,而 REST 框架非常好地解耦和灵活。如果您打算在 API 上投入大量时间,我强烈建议您浏览每个文档和代码库,并尝试了解哪个更适合您。

显然,还有“为什么是 TastyPie?” 它的 README 和'REST framework 3'中的部分。

另请参阅 Daniel Greenfeld 的博客文章,从 2012 年 5 月开始为 Django 选择一个 API 框架(值得注意的是,这距离大型 REST 框架 2.0 发布还有几个月的时间)。

从 2013 年12 月和2013 年7 月开始,Reddit 上也有几个线程问同样的问题。

于 2011-09-22T16:56:22.857 回答
19

两者都是不错的选择。

对于过滤器,sauthenticpie 开箱即用更强大。如果你有一个暴露模型的视图,你可以做 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.ADMINSDEBUG = False. 当 时DEBUG = True默认错误信息为序列化 JSON,更难阅读。

于 2013-06-04T10:28:07.637 回答
13

编辑过时的答案,美味派不再真正维护。如果您必须选择一个框架来做 REST,请使用 Django REST 框架。

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

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

于 2011-09-05T04:26:27.073 回答
5

值得注意的是,自从第一次提出这个问题以来,DRF 已经越来越强大。

它是 github 上两者中更活跃的一个(无论是在提交、星号、分叉和贡献者方面)

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

老实说,对我来说,最后一个功能是杀手。当我的所有前端开发人员不确定某些东西如何工作并说“开始玩;发现'太棒了。

尤其是因为这意味着他们可以按照自己的方式理解它,并且知道 API 确实、绝对、绝对地按照“文档”所说的那样做。在与 API 集成的世界中,仅这一点就使 DRF 成为可击败的框架。

于 2015-06-21T22:49:29.510 回答
2

嗯,Tastypie 和 DRF 都是很好的选择。您根本不会对其中任何一个出错。(我从来没有在活塞上工作过;而且它现在不再流行了,所以不会/不能评论它。理所当然。)。在我看来:应该根据您(和您的技术团队)的技能、知识和能力做出选择。而不是 TastyPie 和 DRF 提供的东西,除非你正在构建真正大的东西,比如 Quora、Facebook 或 Google。

就个人而言,我最终开始在 TastyPie 上工作,当时我什至不了解 django。那时一切都说得通,只是非常了解 REST 和 HTTP,但对 django 几乎一无所知或知之甚少。因为我的唯一目的是立即构建将在移动设备中使用的 RESTful API。因此,如果您只是喜欢“我当时恰好被称为 django-new-bie”,请不要想更多去 TastyPie。

但是,如果您有多年使用 Django 的经验,对它了如指掌,并且非常熟悉使用高级概念(如基于类的视图、表单、模型验证器、查询集、管理器和模型实例以及它们如何相互交互),* *去DRF。**DFR 基于 django 的基于类的视图。DRF 是惯用的 django。就像您正在编写模型表单、验证器等。(好吧,惯用的 django 与惯用的 python 相差甚远。如果您是 python 专家但没有使用 Django 的经验,那么您最初可能很难适应惯用的 django 哲学和DRF 也很重要)。DRF 带有许多内置的魔法方法,就像 django 一样。如果你喜欢 django 神奇的方法和哲学 **DRF ** 就是为你准备的。

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

好吃的:

好处:

  1. 易于上手并提供基本功能 OOB(开箱即用)
  2. 大多数时候,您不会处理高级 Django 概念,例如 CBV、表单等
  3. 更易读的代码和更少的魔法!
  4. 如果你的模型是 NON-ORM,那就去吧。

缺点:

  1. 不严格遵循惯用的 Django(请注意 python 和 django 的理念完全不同)
  2. 一旦你做大了,定制 API 可能有点困难
  3. 没有 O-Auth

DRF:

  1. 遵循惯用的 django。(如果你对 django 了如指掌,并且对 CBV、Forms 等非常熟悉,毫无疑问,那就去吧)
  2. 使用 ModelViewSets 提供开箱即用的 REST 功能。同时,使用 CustomSerializer、APIView、GenericViews 等为自定义提供更大的控制。
  3. 更好的身份验证。更容易编写自定义权限类。工作得很好,重要的是很容易使它与 3rd 方库和 OAuth 一起工作。DJANGO-REST-AUTH 值得一提的是用于 Auth/SocialAuthentication/Registration 的 LIBRARY。( https://github.com/Tivix/django-rest-auth )

缺点:

  1. 如果您不太了解 Django,请不要这样做。
  2. 魔法!有一段时间很难理解魔法。因为它是在 django 的 CBV 之上编写的,而 CBV 在本质上又非常复杂。(https://code.djangoproject.com/ticket/6735
  3. 有陡峭的学习曲线。

就个人而言,我将在下一个项目中使用什么?

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

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

    • 显式优于隐式。
    • 简单胜于复杂。
    • 复杂胜于复杂。
    • 平面优于嵌套。
    • 稀疏比密集好。
    • 可读性很重要。
    • 特殊情况不足以打破规则。

如果您别无选择,只能选择 Django 以及 TastyPie 和 DRF 之一怎么办?

  • 现在,我相当了解 Django,我将使用 **DRF。**
  • 为什么?- 惯用的 djagno!(虽然我不喜欢它)。更好的 OAuth 和 3rd 方集成(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 有什么区别?(django-tastypie 和 djangorestframework 有什么区别?

于 2016-08-18T07:38:18.070 回答
1

两者都使用后,我喜欢(首选)Django Rest Framwork 的一件事是它与 Django 非常一致。

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

于 2016-05-12T13:52:04.747 回答
1

Django-tastypie 不再由它的原始创建者维护,他创建了自己的新轻量级框架。

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

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

django-rest-framework 也有大量不断增长的 3rd arty 包,这将帮助您更轻松地构建 API,减少麻烦。

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

drf 提供了比 django-tastypie 更好的模式和工具。

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

于 2016-12-26T13:52:43.017 回答