api - 在 RESTful API 中,使用 PUT 和空主体生成资源在语义上是否有效?
问题描述
我需要生成资源。此过程有副作用,因此不能建模为 GET。ID 是已知的,因此 PUT 可以正常工作。资源很小,但是在请求时属性是未知的。因此,动词是生成的,而不是创造的。
这会被认为在语义上有效且 RESTful 吗?
更新:
一个例子是资源 /randomnumbers。我提出的实现将看到一个没有正文的 PUT /randomnumbers/123 创建一个具有名为 randomNumber 的属性的资源。该值将是服务器生成的随机数。该值在后续 PUT 上永远不会改变。
解决方案
您应该使用 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 不支持它,它通常会接受长度为零的主体,例如空字符串。
推荐阅读
- java - 如何使用 Hibernate 遍历对象列表并获取特定对象的 Id
- matplotlib - 并排绘制条形图
- javascript - Recharts 条形图图例位置
- javascript - 如何在 nodejs 和 Mongodb 中向 req.body 添加参数
- mysql - 比较两个表,如果值存在则显示1,如果值不存在则显示0
- python - 如何根据其他两个列表拆分 numpy 数组列表
- authentication - .NET Web API2 - 双方法身份验证
- wordpress - 如何在 wordpress 下拉菜单中隐藏禁用的选项?
- google-data-studio - 获取用户的所有记录,如果一个具有一定的价值
- kubernetes - 外部http访问kubernetes集群