gpt4 book ai didi

rest - RESTful 服务中部分更新的最佳实践

转载 作者:行者123 更新时间:2023-12-01 18:26:51 26 4
gpt4 key购买 nike

我正在为客户管理系统编写 RESTful 服务,并且正在尝试找到部分更新记录的最佳实践。例如,我希望调用者能够通过 GET 请求读取完整记录。但要更新它,只允许对记录进行某些操作,例如将状态从“启用”更改为“禁用”。 (我有比这更复杂的场景)

出于安全原因,我不希望调用者仅提交包含更新字段的整个记录​​(这也感觉有些过分)。

是否有推荐的构建 URI 的方法?在阅读 REST 书籍时,RPC 风格的调用似乎不受欢迎。

如果以下调用返回 ID 为 123 的客户的完整客户记录

GET /customer/123
<customer>
{lots of attributes}
<status>ENABLED</status>
{even more attributes}
</customer>

我应该如何更新状态?

POST /customer/123/status
<status>DISABLED</status>

POST /customer/123/changeStatus
DISABLED

...

更新:补充问题。如何将“业务逻辑调用”合并到 REST API 中?有一致同意的方法吗?并非所有方法本质上都是 CRUD。有些更复杂,例如“sendEmailToCustomer(123)”、“mergeCustomers(123, 456)”、“countCustomers()

POST /customer/123?cmd=sendEmail

POST /cmd/sendEmail?customerId=123

GET /customer/count

最佳答案

你基本上有两个选择:

  1. 使用PATCH(但请注意,您必须定义自己的媒体类型来指定具体发生的情况)

  2. 对子资源使用 POST 并返回 303 See Other,其中 Location header 指向主资源。 303 的目的是告诉客户端:“我已经执行了您的 POST,结果是更新了其他一些资源。请参阅 Location header 以了解该资源。” POST/303 旨在对资源进行迭代添加,以建立某些主要资源的状态,并且它非常适合部分更新。

关于rest - RESTful 服务中部分更新的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2443324/

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