使用Django为Dojo的JsonRestStore实现restful服务器 - 这项工作适用于哪些工具?

时间:2011-04-22 06:12:01

标签: python django rest dojo

我正在写一些宁静的服务器端资源,它们与客户端的dojo的JsonRestStore(JRS)进行对话:

http://dojotoolkit.org/reference-guide/dojox/data/JsonRestStore.html

我注意到我可以利用一些项目来帮助创建休息资源(即在Django模型上公开简单的CRUD操作):

http://code.google.com/p/django-rest-interface/

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

我有信心可以从头开始为Dojo的JRS编写宁静的服务器端接口,但我不想重新发明任何轮子,所以,我的问题是:

上述项目之间有什么区别?

是否会帮助我实现既定目标?

我是否还有其他可能需要查看此项任务的项目?

请注意,JRS提出请求的方式有一些具体细节,并期望我需要实现响应。这里有几个(不完整的)示例,以便您知道我在说什么。创建:响应状态为201,并为新创建的资源设置Location: /path/id标头。集合:解析Range: items=x-y标头并使用它来分页响应。回复Content-Range: items x-z标题。将JSON中的模型序列化为集合的字典列表,或单个项目的简单字典。

3 个答案:

答案 0 :(得分:4)

我会看一下活塞,tastypie和django-rest-framework,老实说它们大部分非常相似,我只需要浏览一下文档,看看你认为哪个符合条件。

我不认为其中任何一个都会原生支持你提到的Range分页,这可能是你需要自己处理的事情。

活塞是爸爸,没有积极维护ATM,这不一定是问题,因为它几乎可以做你想要的东西。 Tastypie的优势在于它背后有一个很好的社区,并且有很好的文档记录。 django-rest-framework具有管理风格的API浏览器,文档中的大量示例以及不断增长的社区。 django-rest-interface是非常体面的AFAIK,但我不知道它背后的任何社区努力。

答案 1 :(得分:3)

Django网格有很多REST项目列表:http://djangopackages.com/grids/g/rest/,但它并没有真正列出功能。虽然,你想要什么功能?它是一个休息接口,它应该能够根据所使用的HTTP方法做正确的事情,并根据发送的Accept标头返回正确的序列化。就我所知,他们都是这样做的。

我一直在使用(pbs-education fork)Piston和Tastypie,试图让他们以我想要的方式工作。我即将玩django-rest-framework。以下是我遇到的一些事情:

  • 一般来说,活塞在处理事情方面表现相当不错,但是它有一些奇怪的错误,它会吞下我试图抛出的东西的状态代码。 (我的问题是online)并且没人在维护它,主问题跟踪器中有a lot of open bugs。其中一些可能有补丁,其中一些可能是WONTFIX,但139个开放漏洞对于一个不是很大的项目来说很重要,更重要的是,在过去的两年中已经看到了两次提交。 / p>

    但它确实有效,并且足以让很多人继续使用它。而且它非常灵活,而且它足够小(只有几个文件),我能够很快地修复我的用例,只需“几个小时”的挫折就可以修补它。

  • Tastypie为您做了很多的工作。而且有点令人惊讶的记录。它以我希望它们完成的方式做了几件事。 但是,如果你看一下这些文档,它的相关 - 尤其是嵌套 - 资源的URI方案是后向的,它需要hacks(reasonably well-documented hacks,但仍然)让他们正常工作。

    这必须是Tastypie为你做了多少的结果:不像活塞(和django-rest-framework?它的文档似乎暗示它也将为你做的工作,但我没有实际使用它)你不需要编写CRUD函数 url方案。你知道,除了我的计划并不完全平坦之外,我需要破解调度方法,而且我不知道它内置的HATEOAS机器会与我的疯狂黑客相匹配。它仍将返回有效的URI,但它们是否是我希望人们使用的? (可能有一些函数执行此操作,有很多的地方可以挂钩到Tastypie,但我无法在Resource方法中的任何地方找到“canonical_url”。 )

所以:Piston非常灵活但有点死,Tastypie不灵活,但如果你有一个非常简单的图表,那就很棒了,我还没有触及django-rest-framework。那些似乎就像现在的大人物一样。

答案 2 :(得分:1)

  

上述项目之间有什么区别?

请自行完成,根据您的要求匹配项目,而不是相互对抗。

  

是否会帮助我实现既定目标?

  

我是否还有其他可能想要查看此项任务的项目?

活塞。