首页 > 解决方案 > 在 RESTful API 中,使用 PUT 和空主体生成资源在语义上是否有效?

问题描述

我需要生成资源。此过程有副作用,因此不能建模为 GET。ID 是已知的,因此 PUT 可以正常工作。资源很小,但是在请求时属性是未知的。因此,动词是生成的,而不是创造的。

这会被认为在语义上有效且 RESTful 吗?

更新:

一个例子是资源 /randomnumbers。我提出的实现将看到一个没有正文的 PUT /randomnumbers/123 创建一个具有名为 randomNumber 的属性的资源。该值将是服务器生成的随机数。该值在后续 PUT 上永远不会改变。

标签: apirest

解决方案


您应该使用 POST 而不是 PUT来生成资源,即使事先知道 id。不同之处在于预期的幂等性:当使用相同的 id 再次调用 POST 时,它应该会导致错误,因为已经创建了资源,而具有相同 id 的多个 PUT 请求只会更新资源。
见:https ://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html

空主体是不寻常的,但对 POST 和 PUT 都有效。
见:https ://lists.w3.org/Archives/Public/ietf-http-wg/2010JulSep/0273.html

提示:如果您的 REST API 不支持它,它通常会接受长度为零的主体,例如空字符串。


推荐阅读