添加REST到Django
我有一个很好的Django应用程序。 我正在添加REST服务。 我正在寻找我的REST战略的一些额外的input。
以下是我正在绞尽脑汁的一些事例。
- 现在,我正在使用Django-REST API和一堆补丁。
- 我想退回到简单的编写视图函数在Django返回JSON结果。
- 我也可以看到在Apache中过滤REST请求,并将它们路由到单独的非Django服务器实例。
请为每个答案提名一个方法,以便我们可以对其进行投票。
我想退回到简单的编写视图函数在Django返回JSON结果。
- 明确的
- 可移植到其他框架
- 不需要修补Django
请注意,REST并不仅仅意味着JSON结果。 REST本质上是指通过本机但是全面的HTTP公开面向资源的API。 我不是REST的专家,但是这里有一些Rails正在做的事情。
- url应该是很好的,简单的资源名称
- 使用正确的HTTP方法
- HEAD,GET,POST,PUT和DELETE
- 也可以使用覆盖(表单参数'_method'将覆盖HTTP请求方法)
- 通过Accept request-header支持内容types的协商
- 也可以使用覆盖(URL中的文件扩展名将覆盖Accept请求头中的MIMEtypes)
- 可用的内容types应该包括XML,XHTML,HTML,JSON,YAML以及其他适当的内容
例如,为了获得本地HTTP支持,服务器应该响应
GET /account/profile HTTP/1.1 Host: example.com Accept: application/json
因为它会回应
GET /account/profile.json HTTP/1.1 Host: example.com
它应该回应
PUT /account/profile HTTP/1.1 Host: example.com var=value
因为它会回应
POST /account/profile HTTP/1.1 Host: example.com _method=PUT&var=value
对于其他人为Django寻找一个非常体面,可插入的API应用程序,请确保您签出jespern的Django活塞 ,这是在BitBucket内部使用。
它很好的维护,有一个伟大的以下和一些很酷的叉子,如增加支持分页和其他身份validation方法(OAuth支持开箱即用)。
更新以反映django活塞不再保持。
Tastypie也是Django新兴的REST框架。 它与活塞有着相同的思维,并去除了大量的样板编码。
我在这里回答同样的问题: 在Django中实现REST Web服务的框架
简短的版本是,在早期看看https://github.com/jgorset/django-respite/一个REST框架,但是我们每天都在客户端项目上使用它。;
废弃Django REST api,想出其他人可以贡献的自己的开源项目。 我愿意贡献。 我有一些代码是基于formsAPI做REST。
我想退回到简单的编写视图函数在Django返回JSON结果。
我会去那个..
阿里总结得很好。
我的主要观点是明确的。 我会避免使用自动将对象转换成json的函数,如果对象有一个用户的引用,并以某种方式密码(即使它被哈希)进入json snippit?
我最终用Django的自己的REST API框架(如果我能find一个可行的select,我想摆脱它),有几个自定义视图抛出的angular落案件,我不想处理。 这是成功的。
所以1和2的组合; 如果没有某种forms的框架,你最终会为普通案例编写相同的样板。
我也做了几个独立的API。 我喜欢把它们作为独立的服务,但是它们独立于其他代码之外的事实导致它们被忽视。 没有技术原因; 只是看不见的,无意的。
我真正希望看到的是将Django表单和REST API统一起来的方法,因为它们经常共享大量的逻辑。 从概念上讲,如果你的应用程序在HTML中暴露了某些东西,它可能也希望以编程的方式公开它。
你可以看看django-dynamicresponse ,这是一个轻量级的框架,用于将JSON添加到Django应用程序中。
它只需要很less的修改就可以将API支持添加到现有的Django应用程序中,并且可以从新项目的开始直接转到内置API。
基本上,除了将返回的上下文序列化为JSON或基于请求types有条件地redirect模板之外,还包括将JSONparsing为request.POST的中间件支持。
你可以尝试制作一个处理数据的通用函数(如parand提到的),你可以从生成网页的视图以及生成json / xml /
TastyPie看起来很有趣也很有前途。 它与Django很好。