gpt4 book ai didi

rest - 用什么PATCH或POST?

转载 作者:可可西里 更新时间:2023-11-01 16:23:37 29 4
gpt4 key购买 nike

我和我的同事就正确的 HTTP 动词用于我们改变资源状态的操作之一进行了长时间的安静辩论。

假设我们有一个名为 WakeUpLan 的资源,它试图向网络中连接的系统发送事件。这是一种通用状态机,

{
id: 1,
retries: {
idle: 5, // after 5 retries it went to FAILED state
wakeup: 0,
process: 0,
shutdown: 0
},
status: 'FAILED',
// other attributes
}`

IDLE --> WAKEUP ---> PROCESS ---> SHUTDOWN | ----> [失败]

每个状态都有重试机制,即在IDLE 情况下,它会尝试x 次以transitionWAKEUPx 重试后,它消失并进入 FAILED 状态。

所有 FAILED 资源都可以再次手动重启或从某个界面重试一次。

因此,我们对哪种 HTTP 动词最适合这种情况感到困惑。

在我看来,这只是 status 的改变,并将重试计数重置为 0,以便我们的重试机制可以捕捉到这一点并在下一次迭代中尝试。所以它应该是一个纯粹的PATCH请求

PATCH 重试/{id}{state: 'IDLE'}

但是我的同事反对将其作为POST请求,因为这是一个纯粹的 Action ,应该被视为POST。我不相信,因为我们没有创建任何新资源,而只是更新我们的 REST 服务器已经知道的现有资源。

如果我在这里错了,我想知道并纠正。

欢迎提出任何建议。

提前致谢。

最佳答案

Any suggestions/advices are welcome.

REST architectural style 的引用实现是万维网。万维网建立在 URI、HTTP 和 HTML 的基础之上——HTML 表单处理仅限于 GETPOST

因此 POST 必须是 可接受的答案。毕竟,网络取得了灾难性的成功。

PATCHPUT 一样,允许您将更改传达给资源的表示形式。语义比 POST 更具体,这允许客户端更好地利用。因此,如果您所做的只是创建一条消息来描述对资源表示的本地编辑,那么 PATCH 是一个不错的选择。

不要忽视 PUT 的可能性——如果资源的完整表示的大小与 PATCH 文档的表示大致相同,那么使用 PUT 可能是更好的选择,因为 idempotent semantics .

I am not convinced because we are not creating any new resource but just updating existing resource that our REST server already knows about it.

POST 比“创建新资源”更通用。从历史上看,围绕这一点存在很多混淆(早期 HTTP 规范中的语言没有帮助)。

关于rest - 用什么PATCH或POST?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56435137/

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