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

问题描述

我正在尝试实现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更新)不兼容。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...