我正在使用WCF RESTful服务,并且注意到在某些地方,我可以通过多种方式表示非CRUD操作(而不是资源)。
假设我们购买了新的电视并将其连接到我们的专用网络。现在,我们要构建一个 Web服务以便查看和控制电视。
http://domain/tv/ GET | PUT-获取和更新电视属性。 (
company
,owner
,inches
)ws://domain/tv/video -(假设WebSocket是视频内容传输的最佳选择)
updateVersion
startBIT
(内置自检)changeChannel
turnVolumeUp
,turnVolumeDown
第一种设计是使用属性表示操作。服务器将注意到属性更改,然后执行所需的操作。最后,通过 POST 来执行无法由属性表示的操作:
第二种设计是使用命令资源表示所有操作:
第三种设计是将每个操作表示为一个名词,作为资源,将其余部分作为属性:
什么是最好的RESTful设计?
最佳答案
第三种选择(具有下面提到的修改)似乎是最佳设计的-因为REST是关于资源和名词的,而不是动词和操作的。
我将应用的更改:
http://domain/tv/firmware GET | DELETE | POST
我将
versionUpdates
更改为firmware
-似乎更具自我描述性。而且,这里的PUT
操作似乎没有任何意义-您可能不知道固件的新版本是先验的。因此,GET
返回当前固件版本,DELETE
删除最新版本并恢复以前的固件版本,POST
查找并安装最新版本。 http://domain/tv/BITs GET | POST
在这里看来
GET
和POST
就足够了。您只需要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/