gpt4 book ai didi

休息设计 : What Http verb should be used to retrieve a dynamic resource?

转载 作者:行者123 更新时间:2023-12-04 18:09:00 24 4
gpt4 key购买 nike

我有一个场景,在这个场景中,我有 REST API 来管理一个我们称之为 Group 的资源。一个组包含成员并且组资源是动态的 - 无论何时检索它,您都会获得最新的数据(因此查询必须运行服务器端以更新组中的成员数量 - 换句话说,请求的结果是修改数据,因为运行查询的结果被存储)。

给定一个 *group_id*,它应该返回最少量的信息,例如

{ 
group_id: "5t7yu8i9io0op",
group_name: "That's my name",
size: 34
}

因此,对该资源的 GET 会导致该资源发生更改,因为后续的 GET 可能会返回“大小”的新值。这告诉我它不是幂等的,因此您应该使用 POST 来检索此资源。我的这个结论正确吗?

如果我是对的,您是否认为还建议提供一个仅返回组当前存储数据的 GET 方法(例如,大小可能已过时,甚至名称也是如此)。我想在这种情况下,我应该返回一个上次修改日期作为字段之一,以便用户知道资源的最新情况,然后可以选择使用 POST 方法……但是我想知道为什么会有人这样做,那么为什么不只提供 POST 方法而忘记 GET?

我很困惑!

提前致谢。

[编辑]

@Satish 在他/她对 HTTP 规范的回答中发布了一个链接。在第 9.1.1 节中。它以这句话结尾:

Naturally, it is not possible to ensure that the server does not generate side-effects as a result of performing a GET request; in fact, some dynamic resources consider that a feature. The important distinction here is that the user did not request the side-effects, so therefore cannot be held accountable for them.



因此,在我的场景中,请求者并不真正关心“大小”的值作为发出请求的直接结果而重新计算的副作用。他们需要组信息,而恰好为了提供准确、最新的组数据,必须运行大小查询以更新该值。虽然发出请求会导致数据更改意味着这应该是 POST,但用户并没有请求这种副作用,因此 GET 请求是可以接受的并且更直观,不是吗?所以照着这句话还是要安息的。

[第二次编辑]

@Satish 在评论中提出了一个非常重要的问题。因此,对于阅读本文的其他人,我将进一步解释这个问题:

通常,您不会运行组查询来从 REST 请求更新其大小。在组中添加或删除成员时,您将更新该组的计算大小,将其存储,然后一个简单的 GET 请求将始终返回正确的大小。但是,我们的情况更复杂,因为组仅作为查询定义存储在 ElasticSearch 中(有点像 RDBMS 中的 View )。成员不会被添加到组或从组中删除。它们被添加到更大的数据集(MongoDB 中的集合)中。有成百上千个不同的“组定义”,因此在集合更改时重新计算每个组的大小是不切实际的。我们无法知道何时将项目添加到集合中/从集合中删除哪些组可能会更改大小 - 您只能通过运行组定义来了解该组中的谁以及大小是多少。我希望这能解决问题。 :)

最佳答案

您应该使用 GET。即使动态资源正在发生变化,您也没有通过您的请求请求该更改,您也不对该更改负责。引用:http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html

关于休息设计 : What Http verb should be used to retrieve a dynamic resource?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19026142/

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