rest - 在资源上指定命令的 RESTful 方式
问题描述
我找不到一种普遍接受的方式来以 RESTful 方式指定命令。考虑我有一个资源,我想提供 3 个命令:
- 使能够
- 禁用
- 重新触发
哪种方式最 RESTful?
POST /resource/disable
POST /resource?command=disable
- 还有什么办法吗?
解决方案
哪种方式最 RESTful?
你会怎么做一个网站? REST是万维网的架构风格;如果你能弄清楚你将如何使用一个网站来做这件事,那将为你提供如何提供 RESTful API 的正确想法。
在网络上,通常的答案是我们将有表单来从客户端收集信息,然后客户端将向POST
某个端点提交请求(因为我们打算更改资源)。
因为该form.action
属性告诉客户端使用什么 URI,所以服务器可以控制 URI 是什么——如果我们愿意,我们可以稍后更改它。
正如您所建议的,我们可以为每个命令设置不同的 URI。这没有错,但它确实错过了一个机会。你看,REST 中的重要思想之一是缓存。HTTP 定义了缓存失效语义;其实际方面是,如果您使用/resource
标识符作为表单操作,那么成功POST
的请求将自动使客户端的资源本地副本无效。
当然,这确实意味着POST
您实现中的处理程序必须确定要执行哪个命令——可能通过查看发布请求正文中包含的信息;“commandName”参数或类似的东西。
推荐阅读
- java - 如果 java 线程在这种情况下不应该表现得如此不同,为什么它们会如此不同?
- loops - 展开“m”相关循环
- android - 如何使用flutter和kotlin在应用程序之外拥有小部件?
- html - 除非另有说明,否则 Bootstrap 中的 col 高度不应该只覆盖内容吗?
- r - 在 R 中按组指示 ts 频率
- javascript - 如何将一个高图放在另一个之上
- mysql - 使用 SQL 查询使用 meta_key='_regular_price' 中的值更新 meta_key='_price'
- php - 选中从数据库中选择的复选框
- dart - Flutter 从 StatefulWidget 对象更改状态
- javascript - 有没有办法用 Javascript 显示每页的条目?