giv*_*ivo 5 rest wcf web-services restful-architecture
我正在开发一个WCF RESTful服务,并注意到在某些地方我可以用多种方式表示非CRUD操作(而不是资源).
假设我们购买了一台新电视并将其连接到我们的专用网络.现在我们要构建一个Web服务来查看和控制电视.
要阅读和更新电视的属性,我们将使用以下URI:
http:// domain/tv / GET | PUT - 获取和更新电视属性.(company,owner,inches)
对于使用视频,我们将使用以下URI:
ws:// domain/tv/video - (假设WebSocket是视频内容传输的最佳选择)
和操作:
updateVersionstartBIT (内置自检)changeChannelturnVolumeUp, turnVolumeDown第一种设计是使用属性来表示操作.服务器将注意到属性更改,然后执行所需的操作.最后POST荷兰国际集团不能由性质来表示的操作:
http:// domain/tv / GET | PUT - 获取或设置
volume或channel使用json对象.并为
updateVersion或startBIT:http:// domain/tv / POST {function:'updateVersion'}或{function:'startBIT'}
第二种设计是使用Command资源表示所有操作:
http:// domain/tv/commands POST {{命令:'BIT',发送者:'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您只能更改一个属性。
| 归档时间: |
|
| 查看次数: |
259 次 |
| 最近记录: |