![](/img/trans.png)
[英]How to create RESTful CRUD operations typed web services using Native XML-databases?
[英]Going beyond CRUD in RESTful services
我正在开发一个WCF RESTful服务,并注意到在某些地方我可以用多种方式表示非CRUD操作(而不是资源)。
假设我们购买了一台新电视并将其连接到我们的专用网络。 现在我们要构建一个Web服务来查看和控制电视。
要阅读和更新电视的属性,我们将使用以下URI:
http:// domain / tv / GET | PUT - 获取和更新电视属性。 ( company
, owner
, inches
)
对于使用视频,我们将使用以下URI:
ws:// domain / tv / video - (假设WebSocket是视频内容传输的最佳选择)
和操作:
updateVersion
startBIT
(内置自检) changeChannel
turnVolumeUp
, turnVolumeDown
第一种设计是使用属性来表示操作。 服务器将注意到属性更改,然后执行所需的操作。 最后POST荷兰国际集团不能由性质来表示的操作:
http:// domain / tv / GET | PUT - 使用json对象获取或设置
volume
或channel
。以及
updateVersion
或startBIT
:http:// domain / tv / POST {function:'updateVersion'}或{function:'startBIT'}
第二种设计是使用Command资源表示所有操作:
http:// domain / tv / commands POST {command:'BIT',sender:'Dan'...} - 创建执行
startBIT
,changeChannel
或turnVolume
新命令
第三种设计是表示每个操作,可以作为名词作为资源发音,其余作为属性:
http:// domain / tv / versionUpdates GET | PUT | 删除| POST
http:// domain / tv / BITs GET | PUT | 删除| POST
http:// domain / tv / PUT({volume:10})
http:// domain / tv / PUT({channel:29})
什么是最好的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
您只能更改一个属性。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.