REST服务 - 暴露非数据“操作”

时间:2010-03-15 14:13:13

标签: web-services rest restful-url

我理解如何使用REST进行一般实体交互 - 使用URL名称映射到实体,使用HTTP谓词映射到这些实体上的操作。但是,更像RPC的“行动”被普遍接受的方式是什么?

例如,假设我想发送一个命令让设备重置?这里没有真正的“实体”,或者我做了http://mydevice/device/reset?

的POST

3 个答案:

答案 0 :(得分:13)

/device/reset/system/reset没问题。

REST“设计模式”确实鼓励你不要使用任何动词..你可以这样做:

POST http://mydevice/system/state    
<stateType>RESET</stateType>

相关信息:

答案 1 :(得分:9)

我不认为使用POST就是这种情况。 “RESET动作”是一个幂等动作(如果你调用它n次,你将总是得到相同的结果),所以恕我直言你应该使用PUT调用而不是POST(因为POST不是幂等的)。

此外,正如您放置资源一样,您可以使用

PUT http://system
<device>
  <status>RESET</status>
</device>

 PUT http://system/status/reset

但我认为第一个是“更安静”,因为你要放一个资源,而第二个你只是使用URL。

答案 2 :(得分:2)

我通常将实体命名为“系统”或类似的东西。所以你做“/ system / reset”。你选择的设备也是如此。

但是,我通常认为这些类型的操作是更新,这将使用POST方法。所以我认为你是正确的POST到/ device / reset