使用RESTful URL给我带来了什么?

时间:2010-04-09 21:07:59

标签: web-services url rest

我一直在阅读REST,我正在试图找出使用它的优点。具体来说,REST样式的URL有哪些优势,使得它们值得通过带有查询字符串的更典型的GET请求来实现?

为什么是这个网址:

    http://www.parts-depot.com/parts/getPart?id=00345

认为不如此?

    http://www.parts-depot.com/parts/00345

在上面的例子中(取自here),第二个URL确实更优雅,更简洁。但它需要付出代价......第一个URL很容易用任何Web语言实现,开箱即用。第二个需要额外的代码和/或服务器配置来解析值,以及额外的文档和花时间向初级程序员解释系统并向同行证明它。

所以,我的问题是,除了让网页看起来很酷的乐趣之外,RESTful网址对我来说有什么好处可以使用它们值得实施成本?

8 个答案:

答案 0 :(得分:12)

希望如果你让你的URL引用一个名词,那么你将更有可能正确地实现HTTP动词。除此之外,一个URL与另一个URL完全没有优势。

现实情况是,URL的内容与RESTful系统完全无关。它只是一个标识符。

这不是它的样子,而是你用它做的事情很重要。

答案 1 :(得分:6)

查看REST的一种方式:

http://tomayko.com/writings/rest-to-my-wife(现在已被删除,遗憾的是,但仍然可以在web.archive.org上看到)

  

无论如何,HTTP-这个协议Fielding   而他的朋友们创造了 - 就是这样   将动词应用于名词。例如,   当你去一个网页,浏览器   对您键入的URL执行HTTP GET   进而来的是一个网页。

     

...

     

相反,大多数人都很忙   写复杂的层次   做这个东西的规格   一种不同的方式   有用的或雄辩的。名词不是   普遍的和动词不是   多态。我们扔掉了   几十年的实地使用和证明   技术并重新开始   看起来很像其他的东西   过去失败的系统。   我们使用的是HTTP,但仅仅因为它   帮助我们与我们的网络和   安全人少。我们正在交易   华而不实的工具和简单   向导。

答案 2 :(得分:5)

跳出来的一件事(顺便提一下好问题)就是他们所描述的。第一个描述操作(getPart),第二个描述资源(部分00345)。

另外,也许你不能在第一个使用其他HTTP动词 - 例如,你需要一个新的putPart方法。第二个可以重复使用不同的动词(如PUT,DELETE,POST)来“操纵”资源?我想你也有点说GET两次 - 一次用动词再次在方法中,所以第二种更符合HTTP协议的意图?

答案 3 :(得分:4)

我一直喜欢作为一个精明的网络用户,但当然不应该被用作何时使用这种URL方案的指导原则是那些类型的URL是“hackable”。特别是对于博客这样的东西,我可以在URL中编辑日期或页码,而不必找到“下一页”按钮的位置。

答案 4 :(得分:2)

REST IMO的最大优点是它允许使用HTTP Verbs(这是REST服务上最重要的)的干净方式。实际上,使用REST意味着您正在使用HTTP协议及其动词。

使用您的网址,并想象您想要发布“部分”,而不是获取它

第一种情况应该是这样的:

你正在使用GET,你应该使用帖子

http://www.parts-depot.com/parts/postPart?param1=lalala&param2=lelele&param3=lilili

在REST上下文中,它应该是

http://www.parts-depot.com/parts

和身体,(例如)像这样的xml

<part>
   <param1>lalala<param1>
   <param2>lelele<param1>
   <param3>lilili<param1>
</part>

答案 5 :(得分:1)

URI语义由RFC 2396定义。与这个问题特别相关的摘录是3.3。 “路径组件”:

  

路径组件包含特定于权限的数据(或      如果没有权限组件,则计划,识别资源      在该计划和权力范围内。

3.4“查询组件”:

  

查询组件是要解释的信息字符串      资源。

请注意,查询组件不是资源标识符的一部分,它只是资源要解释的信息。

因此,您的第一个示例所标识的资源实际上只是/parts/getPart。如果您的意图是URL应该标识一个特定的零件资源,那么第一个示例不会这样做,而第二个示例(/parts/00345)则会这样做。

所以第二种URL的'优点'是语义正确,而第一种不是。

答案 6 :(得分:0)

  

“第二个需要额外的代码   和/或要解析的服务器配置   出价值,“

真的?那你选择一个糟糕的框架。我的经验是RESTful版本的代码量完全相同。也许我刚刚进入一个很酷的框架。

  

“以及其他文件   和解释系统的时间   对初级程序员“

只有一次。在他们得到它之后,你不应该再解释它。

  

“并向同行辩护。”

只有一次。在他们得到它之后,你不应该再解释它。

答案 7 :(得分:0)

不要在不是查询或搜索的网址中使用查询/搜索部分,如果您这样做 - 根据网址规范 - 您可能暗示某些您并不真正想要的资源。< / p>

将查询部分用于属于某个更大资源的子集的资源 - 分页是一个很好的例子,可以应用它。