代码之家  ›  专栏  ›  技术社区  ›  ctacke

REST服务-公开非数据“操作”

  •  14
  • ctacke  · 技术社区  · 15 年前

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

    例如,假设我想发送一个命令让设备重置?这里没有真正的“实体”,或者我是否要做一些像post-to这样的事情 http://mydevice/device/reset?

    3 回复  |  直到 15 年前
        1
  •  13
  •   Community CDub    7 年前

    /device/reset /system/reset 一切正常。

    其余的“设计模式”鼓励您不要使用任何动词。你可以这样做:

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

    相关信息:

        2
  •  9
  •   Diego Dias    15 年前

    我不认为使用Post就是这样。“重置操作”是一个等幂操作(如果您多次调用它,您将始终得到相同的结果),因此imho您应该使用一个Put调用而不是Post(因为Post不是等幂)。

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

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

     PUT http://system/status/reset
    

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

        3
  •  2
  •   Seaux    15 年前

    我通常将实体命名为“系统”或类似的东西。所以你要做“系统/重置”。您选择了设备,所以也可以使用。

    但是,是的,我通常认为这些类型的操作是更新的,这将使用post方法。所以我认为你发布到/设备/重置是正确的