PUT 可以创建不存在的资源吗?

Can PUT create a resource which does not exist?

我正在尝试实施 SCIM REST API,但对 PUT 操作有点困惑。

根据 SCIM RFC RFC 7644 PUT 用于 replace/update 资源并且 PUT 不应创建资源.

如果资源不存在,API 需要做什么?

Return 404(未找到)或任何其他状态代码 return?

我们需要尝试创建资源吗?如果是这样,是否违反了 SCIM 标准?

根据 SCIM RFC,正如您在第 3.5.1 节和第 3.2 节中强调的那样,指出 PUT 不得用于创建新资源。

如果我们查看 RFC 7644 (https://www.rfc-editor.org/rfc/rfc7644#section-3.12) 的第 3.12 节,404 定义为:

404(未找到),适用于GET、POST、PUT、PATCH、DELETE。 “指定的资源(例如,用户)或端点不存在。”

由于为用户对象类型定义的端点是 /Users,因此本例中“用户”的用法似乎是指单个用户对象,而不是 /Users 端点。鉴于此,根据 RFC,404 似乎确实是正确的响应。这也符合我自己的经验 - 针对不存在的 ID 值的已知资源(即:/Users/ID 值)的任何调用都应该 return 404。POST 永远不会针对 /Users/ID Value, only /Users, 因为 POST 是为了创建新对象,ID 值是由服务提供商分配的,而不是在 SCIM 客户端请求的负载中。

正如您已经正确识别的那样,创建对象将违反 SCIM 协议的规则。

编辑:在与我的一位同事就此聊天后,我对上述内容的解释是错误的。此处的正确响应是 400 Bad Request,错误消息为 invalidValue。值 (/Users/123) 不存在使其与请求的操作(通过 PUT 更新)不兼容。