【发布时间】:2011-10-07 23:47:32
【问题描述】:
我仍在尝试解决 REST 中的某些情况,其中使用由 names 而不是 verbs 定义的资源不如简单的 CRUD 情况那么直观。
我有一个“Update”资源,用于后端的更新/插件,其 Json 表示如下:
{
"id": 1,
"name": "Update Example",
"description": "demo update , adds handling of basic arduio type devices",
"version": "0.0.4",
"link":
{
"rel": "self",
"uri": "http://demo.org/updates/1",
"type: application/json"
},
}
编辑: 为了澄清一下 Darrel Miller 的回答:一个更新的“更新”集合资源已经到位,它的工作方式如下:
- 后端根据从外部服务器(不使用休息,更新描述最少,纯文本)获取的更新列表(通过轮询)填充该集合
- 使用API的用户无法添加更新,只能获取更新列表,安装/卸载
现在问题是这样的:
我需要找到一个合适的、完全的方法来通过 API 安装更新,我想出了一些方法来做到这一点,但它们对我来说似乎都“不太正确”:
1- 添加更新资源的链接,添加安装资源并使用hateoas
将此添加到更新中:
"link":
{
"rel": "Installation",
"uri": "http://demo.org/updates/1/installation",
"type: "application/json"
}
安装资源:
{
"installing": false,
"installProgress": 0,
"link":
{
"rel": "self",
"uri": "http://demo.org/updates/1/installation",
"type: "application/json"
}
}
要开始安装过程,用户将 POST 到 demo.org/updates/1/installation 以将 "installing": false 更新为 "installing": true
这似乎可行,但将“安装”添加为简单的布尔属性是一种好习惯吗?
2- POST 到 demo.org/installations 之类的 uri,以添加新的 Installation 资源
从而开始安装过程,并且还需要在新创建的安装资源中添加指向正在下载的更新的链接:
{
"installProgress": 0,
"link":
{
"rel": "update",
"uri": "http://demo.org/updates/1",
"type: application/json"
},
}
虽然这可能会在逻辑上将安装资源集中到安装集合中,但我最初的反应是DELETE此集合中的一个项目以停止其安装。
在这种情况下,如果安装资源实例消失了,是否每次“导航”更新时使用“安装”链接都必须重新创建新的安装资源?
更一般地说,在 Update 本身中添加一个“installed”属性以使整体有意义不是更好吗?
如果用户想要暂停安装之类的东西怎么办?
我在各种文章和 stackoverflow 上查看了很多 of similar questions,但我仍然不太确定解决这些问题的最佳方法是什么。 另外,我知道 REST 不是关于动词(除了 HTTP 动词),但我仍然相信这是一个有效的问题。
所以请,非常欢迎任何反馈!
提前致谢。
【问题讨论】: