gpt4 book ai didi

java - 'Single Read' REST API 的适当 HTTP 方法

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

我们有一个 REST API,可以从数据库中读取和删除记录,并将读取的值返回给客户端,所有这些都在同一个调用中完成。我们已经使用 HTTP POST 公开了它。是否应该将其公开为 HTTP GET?如果我们将其公开为 GET,那么缓存方面会产生什么影响。

最佳答案

首先,您应该记住,我们关心请求的原因之一是 safeidempotentthe network is unreliable 。一些非零数量的查询响应将会丢失,您想对此做什么?

客户端使用 GET 请求资源,然后使用 DELETE 确认接收的协议(protocol)可能比在单个响应上销毁资源更可靠的选择。

Should this be exposed as HTTP GET?

也许吧。我不会过度担心第二个 GET 返回与第一个不同的响应这一事实。安全/幂等并不保证每次的响应都相同,它只是保证第二次请求不会改变效果。

DELETE例如,它是幂等的,因为删除某项两次与删除一次是相同的,即使您可能向第一个请求返回 200,向第二个请求返回 404/410。

HTTP does not attempt to require the results of a GET to be safe. What it does is require that the semantics of the operation be safe, and therefore it is a fault of the implementation, not the interface or the user of that interface, if anything happens as a result that causes loss of property (money, BTW, is considered property for thesake of this definition).

我认为这里要注意的是“属性(property)损失”。如果通用组件认为GET就是GET,会造成什么样的损害?并采取相应的行动(例如,通过预取资源或抓取 API)。

但是你肯定需要考虑语义——我们正在阅读文档,而删除数据库记录是一个副作用吗?或者我们是否删除记录并接收最后已知的表示作为响应?

当然,POST 也可以——POST 可以表示任何意思。

What will be the implications in terms of Caching in case we expose it as GET.

RFC 7234 - 我不认为有任何特别不寻常的影响。您应该能够通过指定适当的 header 来获得所需的缓存行为。

如果我正确解释了您的用例,那么您可能需要包含 private directive ,例如。

关于java - 'Single Read' REST API 的适当 HTTP 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57297954/

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