gpt4 book ai didi

REST: "actions"的另一个问题

转载 作者:行者123 更新时间:2023-12-01 12:59:12 24 4
gpt4 key购买 nike

我仍在努力思考 REST 中的某些情况,在这些情况下,使用 names 而不是 verbs 定义的资源不如在简单的 CRUD 情况下直观。

我有一个“更新”资源,用于后端的更新/插件,具有如下 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 的回答澄清一些事情:更新“更新”收集资源已经到位并且它的工作方式如下:

  • 后端根据从外部服务器获取(通过轮询)的更新列表填充该集合(不使用 rest,那里的更新描述最少,纯文本)
  • 使用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"
}
}

要开始安装过程,用户将POSTdemo.org/updates/1/installation 以更新"installing": false"installing": true

这似乎可行,但将“正在安装”添加为简单的 bool 属性是否是一种好习惯?


2- POST 到类似 demo.org/installations 的 uri,以添加新的 Installation 资源

从而开始安装过程,并且还需要在新创建的安装资源中添加指向正在下载的更新的链接:

 {
"installProgress": 0,
"link":
{
"rel": "update",
"uri": "http://demo.org/updates/1",
"type: application/json"
},
}

虽然这可能会在逻辑上将安装资源集中到一个安装集合中,但我最初的 react 是删除该集合中的一个项目以停止它的安装。

在那种情况下,如果安装资源实例消失了,在更新时使用“安装”链接是否必须在每次“导航”时重新创建一个新的安装资源?

更一般地说,在 Update 本身中有一个“installed”属性不是更好吗?

另外,如果用户想要暂停安装之类的东西怎么办?


我看了很多of similar questions在各种文章和此处关于 stackoverflow 的文章中,但我仍然不太确定解决此类问题的最佳方法是什么。另外,我知道 REST 与动词无关(除了 HTTP 动词),但我仍然相信这是一个有效的问题。

所以,欢迎任何反馈!

提前致谢。

最佳答案

如果您 POST 到“更新”集合资源会怎么样。这将返回 202,其中包含指向 transient “安装”资源的位置链接。安装完成后,它将包含指向部署的“更新”资源的链接。在某些时候,您可以对安装资源进行垃圾回收。

所以对我来说,直觉上你会向更新集合添加更新,如果你想查看以前安装的更新,你可以获取这个集合。仅在安装过程中可用的操作(如暂停和取消)可以作为“安装”资源中的链接提供。


更新:

好的,如果用户不能 POST 到/updates,那么另一种方法是创建一个名为“Installer”的处理资源。

POST /Installer
201 Created
Location: /Installation/345

暂停和取消条款是我将用于 rel。没有人应该为此难为你。您为这些 rels 使用的 URI 有点棘手。取消肯定可以通过删除安装资源来完成。也许您可以通过对 /installation/345/status 执行 PUT 来暂停。

要实现这些额外的操作,几乎肯定需要创建一些其他类型的资源/子资源。没关系。在我看来,如果它是您问题的简单解决方案,您应该毫不犹豫地创建一个新资源。我们只有 HTTP 方法可以使用,因此对复杂行为进行建模需要我们利用新资源发挥创造力。

关于REST: "actions"的另一个问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7693851/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com