问题描述
我正在尝试实现SCIM REST API,并且对 PUT 操作感到困惑。
根据SCIM RFC RFC 7644 用于替换/更新资源的PUT,并且PUT不应创建资源。
如果资源不存在,该怎么办?
返回404(未找到)或要返回的任何其他状态代码?
我们需要尝试创建资源吗?是否符合SCIM标准?
解决方法
按照SCIM RFC(如您在3.5.1节和3.2节中所强调的那样),必须禁止将PUT用于创建新资源。
如果我们看一下RFC 7644(https://tools.ietf.org/html/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错误的请求,错误消息为invalidValue。值(/ Users / 123 )不存在使其与请求的操作(通过PUT更新)不兼容。