我有一个休息API,您可以在其中发布新资源&子资源f创建资源,当我向资源发送PUT请求时,子资源会发生什么?
E.g。我有一个员工资源和薪资作为子资源
让我们假设我发布http://api/v1/employees
并创建一个员工并返回id
此外,我发布http://api/v1/employees/1/salaries
并输入员工1的工资
现在,如果我做了PUT http://api/v1/employees
,它将完全替换员工对象,但是如果工资资源被删除或保留原样,会发生什么?
答案 0 :(得分:2)
来自RFC-7231:
HTTP并未确切定义PUT方法如何影响原始服务器的状态,超出了用户代理请求的意图和原始服务器响应的语义所能表达的范围。 [...]
它没有定义资源状态的“存储”方式,也没有定义由于资源状态变化而导致的存储方式如何变化,也没有定义原始服务器如何将资源状态转换为表示形式。
通常来说,服务器有意隐藏资源接口背后的所有实现细节。
该规范并未定义如何实现通过PUT操作执行的资源替换的内部,只是预期的结果:
对给定表示形式的成功PUT建议,在同一目标资源上进行后续GET将产生等效的表示形式。
如前所述,将 entire 员工资源替换为通过PUT发送的员工表示形式:
PUT方法请求创建目标资源的状态或将其替换为由请求消息有效负载中包含的表示形式定义的状态。
结论:
工资代表可以是新雇员代表的一部分,也可以不是。 如果它是新员工表示的一部分,并且包含创建新薪资资源所需的所有薪资详细信息,则应替换旧薪资资源,否则该员工不应与薪资资源相关联,因此应删除旧薪资资源。>
如果新员工表示中包含与旧薪资资源标识符匹配的薪金标识符,则应保留旧薪资资源。
有关如何实施该操作(删除或保留旧薪资资源)的内部决定取决于新员工的代表。