当前位置: 首页 > 知识库问答 >
问题:

REST:用一个请求更新多个资源--这是标准的还是要避免的?

卫嘉言
2023-03-14

一个简单的REST API:

  • get:items/{id}-返回具有给定id的项的说明
  • put:items/{id}-更新或创建具有给定id的项目
  • 删除:items/{id}-删除具有给定id的项目
    null

问题:提供这样的API是常见的吗?

备选方案:在单连接的时代,多个请求发出多个请求是便宜的,而且工作起来更加原子化,因为一个更改要么成功要么失败,但是在NOSQL数据库的时代,列表中的更改可能已经发生了,即使请求处理在内部服务器或其他任何原因中消失了。

[更新]

  • get:items/{id}-返回具有给定id的项的说明
  • put:items/{id}-更新或创建具有给定id的项目
  • 删除:items/{id}-删除具有给定id的项目

顶级资源API:

  • 获取:项目?筛选器-返回与筛选器匹配的所有项目ID
  • post:items-更新或创建一组由JSON有效负载描述的项

其中PUT方法需要替换完整的集合,以便返回HTTP语义引用的等效表示PUT:

一个给定表示成功PUT将意味着随后对同一目标资源的GET将导致在200(OK)响应中返回一个等价的表示。

[UPDATE2]

因此,与POST相比,PATCH可能也是一个更好的主意,因为PATCH允许更新,而POST只允许附加一些内容,意思是添加,而没有修改的机会。

所以POST在这里似乎是错误的,我们需要将建议的API更改为:

一个简单的REST API:

    null
    null

共有1个答案

卢深
2023-03-14

您可以为集合打补丁,例如。

PATCH /items
[ { id: 1, name: 'foo' }, { id: 2, name: 'bar' } ]

技术上,PATCH将在URL中标识记录(即PATCH/items/1而不是在请求正文中标识记录),但这似乎是一个很好的实用解决方案。

为了支持在一次调用中删除、创建和更新,标准REST约定并不真正支持这一点。一种可能是一种特殊的“批处理”服务,它允许您将调用集合在一起:

POST /batch
[
  { method: 'POST', path: '/items', body: { title: 'foo' } },
  { method: 'DELETE', path: '/items/bar' }
]
[ 200, 403 ]

不是真正的标准,但我做了它,它的工作。

 类似资料:
  • 问题内容: 一个简单的REST API: GET:items / {id}-返回具有给定id的商品的描述 PUT:items / {id}-使用给定的id更新或创建项目 DELETE:items / {id}-删除具有给定id的项目 现在要讨论的API扩展: GET:item?filter-返回与过滤器匹配的所有项目ID PUT:项目-更新或创建一组由JSON有效负载描述的项目 [[ DELETE

  • 还是使用现有endpoint更好?使用现有endpoint的一个问题是,驱动程序有很多字段(几乎30个),发送所有这些字段只是为了更新“启用”或“禁用”驱动程序是一些过分的东西。 你觉得呢?

  • 问题内容: 我正在尝试让Javascript读取/写入PostgreSQL数据库。我在github上找到了这个项目。我能够获得以下示例代码以在节点中运行。 接下来,我试图使其在网页上运行,但是似乎什么也没有发生。我在Javascript控制台上进行了检查,它只显示“要求未定义”。 那么这是什么“要求”?为什么它在节点中有效但在网页中无效? 另外,在我让它在节点上工作之前,我必须做。那是什么意思 我

  • 问题内容: 对于我的工作,我必须开发一个小型Java应用程序,该应用程序可以解析非常大的XML文件(约30万行)以选择非常具体的数据(使用),因此我试图对其进行一些优化。我想知道这两个摘要之间哪个更好: 要么 其他详情: 这些if语句在循环内的每次迭代中执行(约20k次迭代) 的是一种在利用外部函数每次迭代计算 如果将设置为,则无需测试正则表达式是否匹配 谢谢你的帮助。 问题答案: 我遵循的一条黄

  • 在构建Kafka Streams拓扑时,可以通过两种不同的方式对多个主题的读取进行建模: 读取具有相同源节点的所有主题。 选项1相对于选项2是否有相对优势,反之亦然?所有主题都包含相同类型的数据,并具有相同的数据处理逻辑。

  • 在Jersey 2中,我试图开发一种方法,它允许传递一对JSON列表(服务、方法),这些列表表示REST请求中对资源的访问路径,并将结果聚合到单个响应中。因此,JSON列表可以如下所示: 相应的命令bean可以如下所示: 我找到了这个主题,但它似乎适用于Jersey的版本1:如何在单个请求中访问多个资源:Jersey Rest 谢谢你的回答,为我糟糕的英语感到抱歉。