首页 > 解决方案 > 在资源上指定命令的 RESTful 方式

问题描述

我找不到一种普遍接受的方式来以 RESTful 方式指定命令。考虑我有一个资源,我想提供 3 个命令:

哪种方式最 RESTful?

  1. POST /resource/disable
  2. POST /resource?command=disable
  3. 还有什么办法吗?

标签: rest

解决方案


哪种方式最 RESTful?

你会怎么做一个网站? REST是万维网的架构风格;如果你能弄清楚你将如何使用一个网站来做这件事,那将为你提供如何提供 RESTful API 的正确想法。

在网络上,通常的答案是我们将有表单来从客户端收集信息,然后客户端将向POST某个端点提交请求(因为我们打算更改资源)。

因为该form.action属性告诉客户端使用什么 URI,所以服务器可以控制 URI 是什么——如果我们愿意,我们可以稍后更改它。

正如您所建议的,我们可以为每个命令设置不同的 URI。这没有错,但它确实错过了一个机会。你看,REST 中的重要思想之一是缓存。HTTP 定义了缓存失效语义;其实际方面是,如果您使用/resource标识符作为表单操作,那么成功POST的请求将自动使客户端的资源本地副本无效。

当然,这确实意味着POST您实现中的处理程序必须确定要执行哪个命令——可能通过查看发布请求正文中包含的信息;“commandName”参数或类似的东西。


推荐阅读