我正在编写一个以异步方式执行某些软件安装的Web服务。在一种情况下,需要在安装过程中手动操作。因此,我暂停了安装并等待用户请求应用程序恢复安装。
目前,我们可以通过在/running-install
上执行GET请求来检索正在运行的安装,并在/running-install/<id>
上取消使用DELETE的安装,但是我找不到用于恢复暂停安装的适当方法。
我在想像在/running-install/<id>
上做 PUT 之类的事情,身体含有{"status":"running"}
但对我来说感觉不太对劲。
谢谢
哪种 HTTP 方法最适合恢复异步任务?
从语义上讲,您希望将给定任务的状态替换为新状态。 对于这种情况,PUT
似乎是一个合理的选择。
引用 RFC 7231:
4.3.4.
PUT
PUT
方法请求目标资源的状态为 创建或替换为由表示定义的状态 包含在请求消息有效负载中。[...]
然后在请求有效负载中发送新状态的表示形式:
PUT /api/installation/1/status HTTP/1.1
Host: example.org
Content-Type: application/json
{ "value" : "running" }
例如,成功的操作可能会返回204
,尝试使用无效状态修改状态可能会返回409
。
注意:这个答案也可能有所帮助。
如果您使用html 表示将此协议实现为一系列网页,那么您可能会在此处使用 POST,因为您可能不希望客户端将其视为安全交互。
POST 方法请求目标资源根据资源自己的特定语义处理请求中包含的表示形式。
这很难出错。
要记住的是,资源是集成资源。
您应该期望集成域中的资源比业务域中的业务对象多得多。
因此,如果您在将所需的消息硬塞到可用的有限资源中时遇到困难,请添加更多资源。
您可以证明 POST、PUT、DELETE 中的任何一个是正确的,具体取决于您选择如何对集成协议进行建模。
事实是,如果你真的在做REST,那么提供多种集成协议来实现相同的效果是完全合理的。 超媒体客户端可以根据与书签页面上的链接关联的语义选择要遵循的协议。