当前位置:  开发笔记 > 运维 > 正文

这是RESTful吗?

如何解决《这是RESTful吗?》经验,为你挑选了2个好方法。

我有一个Rails应用程序需要将数据库中的值作为Web服务公开 - 因为我正在使用Rails 2.x,我将使用REST(或至少尝试).假设我的资源是Bananas,我想为其揭示几个子特征,请考虑这个:

 - /banana          -> give a summary of the first 10 bananas, in full (all characteristics)
 - /banana/?name=         -> give all characteristics for banana named 
 - /banana/?number=         -> give all characteristics for banana number 
 - /banana/?name=/peel          -> give peel data for banana named 
 - /banana/?number=/length         -> give length data for banana number 

希望搜索ID,只有名称号码.我有大约7个子特征要揭露.这是RESTful吗?

感谢您的任何反馈!



1> Rich Apodaca..:

Wahnfrieden所谈论的是称为超媒体作为应用程序状态引擎(HATEOAS)的东西 - 由Fielding定义的REST的核心约束.

简而言之,REST应用程序客户端永远不会自己构造URI.相反,它们遵循应用程序提供的URI.因此,诸如您所询问的URI模板充其量只是无关紧要的.如果您愿意,可以使它们符合系统,但REST没有说明您的URI需要如何查看.如果您愿意,可以安排它,以便系统中的每个资源都可以从http://example.com/ {hash}获得.

发布URI模板(例如您在问题中讨论的模板)会引入应用程序和客户端之间的紧密耦合 - 这是REST试图阻止的.

理解超媒体驱动的应用程序的问题在于,几乎没有人以这种方式实现或记录其"RESTful"系统.

通过浏览器考虑人与服务器之间的交互可能会有所帮助.人类只知道服务器通过浏览器提供的内容和链接.这就是构建RESTful系统的方式.如果您的资源没有公开链接,那么它们可能不是RESTful.

优点是,如果要更改URI系统,例如,通过查询参数而不是嵌套URL公开Banana"Peel"属性,您可以随时执行此操作,并且不需要客户端代码因为他们没有为自己构建链接而改变了.

有关在REST中包含超文本驱动约束的系统示例,请查看Sun Cloud API.



2> pitr..:

我会用这些:

/香蕉

/香蕉/嗒嗒

/香蕉/ 123

/ banana/blah/peel(和/ banana/123/peel)

/ banana/blah/length(和/ banana/123/length)

首先,ReSTful URI的常见做法是/ object_name/id/verb,其中一些缺席(但按此顺序).当然,这既不是必需的,也不是预期的.

如果您的所有名称都不是数字,则不必明确地使用name/ banana/name/blah.事实上,如果有的话,最好有id标识符:/ banana/id/123/peel.希望这可以帮助.


你在世界上哪里得到"ReST应该是/ object_name/id/verb"?信不信由你,REST几乎没有说明你的网址应该是什么样子.
我会将第一条路线重命名为`/ bananas`
推荐阅读
罗文彬2502852027
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有