我正在使用WCF RESTful服务,并且注意到在某些地方,我可以通过多种方式表示非CRUD操作(而不是资源)。

假设我们购买了新的电视并将其连接到我们的专用网络。现在,我们要构建一个 Web服务以便查看和控制电视。

  • 为了读取和更新电视的属性,我们将使用以下URI:

    http://domain/tv/ GET | PUT-获取和更新电视属性。 (companyownerinches)
  • 为了播放视频,我们将使用以下URI:

    ws://domain/tv/video -(假设WebSocket是视频内容传输的最佳选择)
  • 和操作:
  • updateVersion
  • startBIT(内置自检)
  • changeChannel
  • turnVolumeUpturnVolumeDown

  • 第一种设计是使用属性表示操作。服务器将注意到属性更改,然后执行所需的操作。最后,通过 POST 来执行无法由属性表示的操作:



    第二种设计是使用命令资源表示所有操作:



    第三种设计是将每个操作表示为一个名词,作为资源,将其余部分作为属性:



    什么是最好的RESTful设计?

    最佳答案

    第三种选择(具有下面提到的修改)似乎是最佳设计的-因为REST是关于资源和名词的,而不是动词和操作的。

    我将应用的更改:

  • http://domain/tv/firmware GET | DELETE | POST
    我将versionUpdates更改为firmware-似乎更具自我描述性。而且,这里的PUT操作似乎没有任何意义-您可能不知道固件的新版本是先验的。因此,GET返回当前固件版本,DELETE删除最新版本并恢复以前的固件版本,POST查找并安装最新版本。
  • http://domain/tv/BITs GET | POST
    在这里看来GETPOST就足够了。您只需要GET所有测试的结果或特定测试的结果,或者只POST新测试的结果。
  • http://domain/tv/ PATCH ({volume: 10})http://domain/tv/ PATCH ({channel: 29})
    由于两者非常相似-我将PUT更改为PATCH-请记住,在使用PUT时,您需要包括整个对象-即每个属性。 PUT也是幂等运算。使用PATCH时,您只能更改一个属性。
  • 关于web-services - 在RESTful服务中超越CRUD,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33187108/

    10-13 03:10