【问题标题】:Can PUT create a resource which does not exist?PUT 可以创建一个不存在的资源吗?
【发布时间】:2020-10-16 19:11:11
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: rest scim scim2


    【解决方案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 更新)不兼容。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-24
      • 1970-01-01
      • 2017-11-30
      • 2022-01-14
      • 1970-01-01
      相关资源
      最近更新 更多