REST服务 - 暴露非数据"操作"

cta*_*cke 14 rest web-services restful-url

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

例如,假设我想发送一个命令让设备重置?这里没有真正的"实体",或者我做的事情就像POST一样http://mydevice/device/reset?

Mar*_*eon 13

/device/reset或者/system/reset没事.

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

POST http://mydevice/system/state    
<stateType>RESET</stateType>
Run Code Online (Sandbox Code Playgroud)

相关信息:


Die*_*ias 9

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

此外,当您放置资源时,您可以使用

PUT http://system
<device>
  <status>RESET</status>
</device>
Run Code Online (Sandbox Code Playgroud)

要么

 PUT http://system/status/reset
Run Code Online (Sandbox Code Playgroud)

但我认为第一个是"更安静",因为你正在放置资源,而第二个就是你使用网址.

  • PUT http:// system/status/reset with empty body只是将资源更新为空.第一种是正确的RESTful方式. (2认同)