Restful网络服务

6

在设置Restful接口时,您需要避免什么,以确保它不会变成RPC呢?


Jeff,不要用四个空格开头 - 这会告诉“markdown”将其视为代码块(没有换行),使其非常难以阅读 - 当然,实际的代码块除外! :-) - marc_s
http://www.pluralsight.com/community/blogs/tewald/archive/2007/04/28/47067.aspx - skaffman
5个回答

8

要做的:

  • 设计您的应用程序为超文本驱动(Hypermedia as the Engine of Application State - HATEOAS)。
  • 将大部分时间和精力用于识别资源并制作代表它们的媒体类型。
  • 将整个URI视为您的资源标识符,并假定它将来会更改。
  • 在您的表示中,提供继续通过您的应用程序的所有选项作为链接。
  • 将您的应用程序视为客户端“爬行”或“浏览”的网站。
  • 尝试编写API客户端,并查找耦合发生的位置。

不要这样做:

  • 在API文档中发布URI模板。例如,如果您必须使用查询参数模板,请确保它们是您的媒体类型定义的一部分。
  • 将您的应用程序视为由四个动词执行的URI集合。
  • 向客户端提供“application/xml”或“application/json”等mime类型。
使用类比的方式来说,你的API应该更像是给客户提供GPS而不是地图。你只会向客户提供附近街道的名称。但从那时起,他们只能在应用程序允许的任何给定点上执行操作。这种风格的目的是最大限度地减少应用程序和其客户之间的耦合。所有的耦合都应该发生在你的媒体类型定义中。这简化了API的演进,并为版本控制提供了一个很好的机制。它也使得关于诸如分页等问题的问题消失了。大多数“RESTful”API都不遵循这个模式。对于符合此模式的API,请参见Sun Cloud API及其背景故事

感谢您在传播关于REST的信息方面给予准确清晰的帮助。 - aehlke

4

在可能的情况下,利用底层协议。不要在负载中使用动词,尽量使用(例如)HTTP GET、POST、PUT、DELETE方法。您的URI应该描述资源而不是对其进行操作。


这与REST没有任何关系!它只是HTTP。 - aehlke
我只是提供HTTP作为一个例子(因为它可能是这种情况下最常见的协议),以加强URI不应该包含动词的观点。 - Bob Gettys

3

您需要避免的一些事情包括:

  • 忽略缓存
  • 将所有内容都通过GET(或者POST)隧道传输
  • 忽略MIME类型

这里有一篇很好的文章,讨论了一些REST反模式:

http://www.infoq.com/articles/rest-anti-patterns


2

这是一个比较宽泛的问题,但我会尝试回答。首先,只使用HTTP动词的原始意图。不要在URL中使用url参数进行POST,因为这基本上会覆盖POST并将其转换为GET或DELETE。这就是SOAP的工作方式(一切都是POST)。


这只是正确的HTTP使用 - 与REST没有太多关系。 - aehlke

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接