gpt4 book ai didi

java - REST API 的幂等性

转载 作者:太空宇宙 更新时间:2023-11-04 09:53:01 27 4
gpt4 key购买 nike

我有一个与 sping-data-jpa 集成的应用程序。在我的存储库类中,我有一个方法:

@Transactional
@Modifying
@Query(value = "some insert query", nativeQuery = true)
void create(.....);

该方法正在将数据插入数据库。

此方法在内部从POST REST API 调用。目前,如果数据已存在于数据库中,则 API 会返回错误响应。现在这个API的客户端想要多次使用相同的数据执行相同的操作并且想要成功响应意味着我需要使这个API成为幂等的。如何使该 API 具有幂等性?方法从 POST 更改为 PUT 是否有效,或者需要在方法更改的同时添加更多更改?什么样的变化?

最佳答案

Does method change from POST to PUT will work or need to add more changes along with Method change?

不,关于“幂等”的重要一点是请求处理程序做正确的事情。改变你使用的方法并不会产生什么神奇的效果。

好消息是,从技术上讲,您的实现已经是幂等的(至少从描述来看)。 RFC 7231中有一个定义你应该回顾一下。重要的一点是,接收请求的两个副本会使资源处于与接收请求的一份副本相同的状态。

因此,您需要做的“所有”工作就是弄清楚如何知道错误是因为记录已在数据库中(而不是其他原因),然后用看起来像成功消息的响应替换您当前发送的错误。

正如其他答案所指出的,由于 POST 不 promise 幂等语义,通用组件不会知道消息可以重试,因此如果原始响应丢失,就会失败。只有发出请求的自定义客户端可能知道可以成功重试 POST。

(将此与 GET 进行比较 - 您的浏览器知道 GET 请求是幂等的;浏览器不必询问人类该请求是否可以安全重试,因为服务器已经 promise 安全地处理该请求。

在幂等消息交换上使用 POST 方法没有任何问题(尽管如果其他语义匹配,其他一些方法可能是更好的选择)。

关于java - REST API 的幂等性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54468249/

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