如果资源不存在,在 URL 中自动生成 ID 的 PUT 方法的正确 RESTful 行为是什么?

问题描述 投票:0回答:1

我正在为 CRUD 应用程序设计 REST API。资源 ID 是数据库在插入时生成的 UUID。所以当我进行 PUT 操作时,我们可以这样说

PUT http://host/books/{database generated UUID}

体内的数据和

{database generated UUID}
不存在,正确的行为是什么?

我不能只用这个 UUID 创建资源,因为 UUID 是由数据库分配的。 我不能只使用新的自动生成的 UUID 创建资源,因为这样 PUT 就不再是幂等的,因为每个后续的 PUT 都会使用新的自动生成的 UUID 创建一个新的相同资源。

那么RESTful如何处理这种情况呢?返回 404? 400? 422?还有别的吗?

rest put
1个回答
0
投票

403 禁止

403(禁止)状态代码表示服务器理解该请求但拒绝执行它。

与所有客户端错误响应一样,解释问题性质以及如何解决问题的详细信息将复制到响应正文中(表示“错误情况的解释”)


假设,您只需完成这项工作(生成正确的数据库生成的 ID),然后将客户端重定向到正确的资源(301 永久移动308 永久重定向)。

毕竟,它们是您的资源,您可以随时创建/删除/更新它们。

潜在的棘手之处是通用 HTTP 客户端是否会被响应混淆。

如果您走这条路,您的代码更改应该附带描述您所做的研究、可用的替代方案、涉及的权衡等的文档(也称为“架构决策记录”或一些合理的等效项)。

如果您的分析告诉您,采用这种方法的好处很小,那么您可能应该倾向于做更正常的事情并返回客户端错误。

© www.soinside.com 2019 - 2024. All rights reserved.