0

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

根据 SCIM RFC RFC 7644 PUT 用于替换/更新资源和 PUT 不应创建资源

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

返回 404(未找到)或任何其他要返回的状态码?

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

4

1 回答 1

1

根据 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,本例中“User”的使用似乎是指单个用户对象而不是 /Users 端点。鉴于此,根据 RFC,404 似乎确实是正确的响应。这也符合我自己的经验 - 针对不存在的 ID 值的已知资源(即:/Users/ID 值)的任何调用都应返回 404。POST 永远不会针对 /Users/ID 值,仅 /Users,因为 POST 旨在创建新对象,并且 ID 值由服务提供商分配,而不是在 SCIM 客户端请求的有效负载中。

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

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

于 2020-10-18T01:31:06.143 回答