Django 和 Restful API

Posted

技术标签:

【中文标题】Django 和 Restful API【英文标题】:Django and Restful APIs 【发布时间】:2010-10-14 00:10:01 【问题描述】:

我一直在努力选择一种使用 Django 创建 RESTful API 的方法。我尝试过的所有方法似乎都不是“银”子弹。来自http://fi.am 的 WAPI 可能是最接近我想要完成的,但是我不确定在真正的 RESTful API 中是否可以接受将作为资源标识符的参数放在查询字符串中而不是在“干净”的 URL 中格式。有关修改 WAPI RestBinding.PATTERN 以“清理” URL 的任何建议?我探索的另一个选择是 Django-Rest-Interface。然而,这个框架似乎违反了我需要的最重要的部分之一,那就是包含完整的资源 URL 以引用其他资源(请参阅 http://jacobian.org/writing/rest-worst-practices/ 链接的不当使用)。最后的选择是使用 django-multiresponse 并且基本上可以长期使用。

请给我你最好的建议,尤其是那些处理过这个决定的人。

【问题讨论】:

【参考方案1】:

对于 Django,除了美味的派和活塞,django-rest-framework 是一个值得一提的有前途的。我已经顺利迁移了我的一个项目。

Django REST framework 是 Django 的轻量级 REST 框架,它 旨在使构建连接良好、自我描述的 RESTful 变得容易 网络 API。

快速示例:

from django.conf.urls.defaults import patterns, url
from djangorestframework.resources import ModelResource
from djangorestframework.views import ListOrCreateModelView, InstanceModelView
from myapp.models import MyModel

class MyResource(ModelResource):
    model = MyModel

urlpatterns = patterns('',
    url(r'^$', ListOrCreateModelView.as_view(resource=MyResource)),
    url(r'^(?P<pk>[^/]+)/$', InstanceModelView.as_view(resource=MyResource)),
)

以官方网站为例,以上所有代码都提供了 api、自我解释文档(如基于肥皂的 web 服务)甚至沙盒测试。很方便。

链接: http://django-rest-framework.org/

【讨论】:

我现在也在从 Piston 迁移到 django-rest-framework 的过程中。看起来非常好用。 似乎越来越多的项目将被迁移。伟大的! :)【参考方案2】:

我相信最近发布的 django-piston 现在是在 Django 中创建适当的 REST 接口的最佳解决方案。 django-piston

注意:django-piston 似乎不再维护(参见下面的 cmets)

【讨论】:

django-piston 多年来一直没有得到很好的维护。虽然它有一个新的维护者,但最好从 djangopackages.com/grids/g/api 中挑选一些更新的东西。 我会强烈建议避免使用 django-piston。自从它被废弃后我就一直在使用它,它会让生活非常痛苦,特别是如果你需要开始使用序列化程序远程做任何非标准的事情。 django-tastypie 现在是我首选的 REST 解决方案。 请给我添加一些代表,以便我投反对票。活塞与模型紧密相连,您不能添加 2 个引用同一模型的处理程序。此外,如果您有 2 个处理程序,我们称它们为客户和地址处理程序。想象一下您的地址处理程序将显示客户名称和地址。您注定要收到所有字段,您已在客户处理程序中提及。在孔隙技术上浪费了一天。 最好更新此答案以注意 活塞不再维护,此时可能不应用于新构建。 Tastypie 和 Django REST 框架是最成熟、功能最齐全的框架,而且还有很多较小的项目。【参考方案3】:

django-tastypie 是一个很好的方法,他们的口号:“从 2010 年开始为 Django 应用程序创建美味的 API”非常令人欣慰;)

【讨论】:

【参考方案4】:

您可以查看django-dynamicresponse,这是一个轻量级框架,用于将带有 JSON 的 REST API 添加到您的 Django 应用程序。

向现有的 Django 应用程序添加 API 支持只需进行最少的更改,并且可以直接在新项目中从一开始就内置 API。

基本上,除了将返回的上下文序列化为 JSON 或根据请求类型有条件地呈现模板/重定向之外,它还包括将 JSON 解析为 request.POST 的中间件支持。

这种方法与其他框架(例如 django-piston)的不同之处在于您不需要为 API 请求创建单独的处理程序。您还可以重用现有的视图逻辑,并像普通视图一样继续使用表单验证等。

【讨论】:

【参考方案5】:

我不知道这个项目是否对你有用,但发送链接几乎没有什么坏处。查看 django-apibuilder ,可从 http://opensource.washingtontimes.com/projects/django-apibuilder/ 获得。或许有用?

/杰斯珀

【讨论】:

【参考方案6】:

看看这个RestifyDjango。

有些相关的是 Django XML-RPC 和 JSON-RPC。

【讨论】:

【参考方案7】:

https://github.com/RueLaLa/savory-pie

Savory Pie 是一个支持 django 的 REST 框架。

【讨论】:

【参考方案8】:

我建议您研究一下 Django Rest Framework (DRF),尝试一下,看看它是否符合您的要求。我推荐 DRF 的原因是因为它通过使用 GenericAPIView 类、Mixin 类和在通用视图中混合来使 API 视图变得非常简单。您可以轻松地利用久经考验的设计模式来制作 API 端点,并保持代码库的简洁明了。您在编写代码时也很干燥,这总是很棒。您的 API 视图实际上是 2-3 行长。

您可以查看本教程 http://programmathics.com/programming/python/django-rest-framework-setup/,该教程从设置环境开始,到使用 django rest 框架创建 RESTful API 的不同方法。

免责声明:我是该网站的创建者。

【讨论】:

以上是关于Django 和 Restful API的主要内容,如果未能解决你的问题,请参考以下文章

Django 和 Restful API

利用Django实现RESTful API

django中cbv源码和restful规范

利用Django实现RESTful API

Django中CBV和Restful API中的APIView源码分析

Django编写RESTful API:请求和响应