你如何避免固定资源

Jen*_*der 4 rest rest-client

罗伊菲尔丁写道

REST API不能定义固定资源名称或层次结构(客户端和服务器的明显耦合).服务器必须能够自由控制自己的命名空间.相反,允许服务器通过在媒体类型和链接关系中定义这些指令来指示客户端如何构造适当的URI,例如在HTML表单和URI模板中完成的.

如何为系统到系统接口执行此操作?假设客户想要在服务器上创建一个订单http://my.server.org它应该如何知道创建订单它应该使用网址http://my.server.org/newOrder而不是http://my.server.org/nO或其他什么?

对于人机界面(即浏览器),我猜服务器会提供某种形式的链接(可能在一个form元素中),并且该链接中的文本将告诉用户该页面上的哪些表单是正确的订单(应该创建用户或导航到某些搜索结果)

在客户端实现此功能的机制是什么?而且:他们实际使用过,还是大多数人只是将网址硬连接到客户端?

Wil*_*ung 6

如何为系统到系统接口执行此操作?假设客户想要在服务器上创建一个订单http://my.server.org它应该如何知道创建订单它应该使用网址 http://my.server.org/newOrder而不是 http://my.server.org/nO或其他什么?

它没有学习.通常,机器客户不能"学习".至少还没有,我们仍然是天网之前.你必须"教"他们.

但关键是你没有教他们URL.你教他们关系.

考虑一下,用HTML ...

<a rel="order" href="http://my.server.org/newOrder"/>
Run Code Online (Sandbox Code Playgroud)

<a rel="order" href="http://my.server.org/nO"/>
Run Code Online (Sandbox Code Playgroud)

您会注意到rel是相同的"order",但URL不是.

在一个"完美"的世界中,您的系统将有一个入口点,例如http://my.server.org/,客户端可以从中找到它需要了解的所有相关信息.

在实践中,许多系统具有几个"众所周知的",并且定义了客户端可以从其开始的入口点,这是一种权宜之计,因此客户端不必始终从系统的根开始.这些众所周知的切入点暗示提供商承诺这些URL不会很快改变.他们很长寿,服务器会很好地支持他们.

但是一旦通过入口点,您发现的任何URL可能都没有这样的承诺.该URL可以是一个仅使用URL.它可以被引导到不同的机器,例如负载平衡.谁知道.但作为服务的消费者,你真的不在乎URL是什么,你只关心这种关系.该关系告诉您要使用的URL的详细信息.

超媒体API的文档说明了如何将统一接口应用于客户端将遇到的每个rel.客户也不能"直觉"这一点,必须要教.

基本上,通过教导客户端如何导航它将在或将在有效负载中找到的关系,它处理的是客户端如何操纵超媒体API.有效负载包含标志信息以显示方式,但服务器指示这些标志信息的去向.

至于它的使用频率,在机器到机器世界中,可能不是很多.大多数系统都不够大,其中URL变得足够重要,客户端很少,更改客户端不是一个重要的负担.所以大多数只是硬代码.

但是,最后,你只有坏客户.REST系统无法对坏客户端做任何事情.无论如何,它无法在运行时区分它们.