如何设计启动进程的RESTful API

如何设计启动进程的RESTful API,rest,Rest,我的API中的一个资源具有一个表示此资源状态的属性(“未检查”->“检查已启动”->“已检查”) 为了将资源从“未检查”状态转移到“已检查”状态,人类必须进行某些活动。因此,服务器启动一个涉及人员交互的流程。这个过程需要一段时间,但应该可以通过API触发它 我的问题是:启动这个过程的操作应该是什么样的?定义一个补丁操作,在其主体中传递状态“check initiated”或“checked”(这将导致服务器端进程的启动),这是一个好主意吗?或者最好定义一个表示流程的新资源,并通过POST请求激活

我的API中的一个资源具有一个表示此资源状态的属性(“未检查”->“检查已启动”->“已检查”)

为了将资源从“未检查”状态转移到“已检查”状态,人类必须进行某些活动。因此,服务器启动一个涉及人员交互的流程。这个过程需要一段时间,但应该可以通过API触发它

我的问题是:启动这个过程的操作应该是什么样的?定义一个补丁操作,在其主体中传递状态“check initiated”或“checked”(这将导致服务器端进程的启动),这是一个好主意吗?或者最好定义一个表示流程的新资源,并通过POST请求激活它

如何设计启动进程的RESTful API

你会如何使用一个网站

您将加载“主页”,然后跟随一组链接,直到到达“启动流程”表单,您可能会向表单提供一些输入,然后“提交”表单。此时,浏览器将应用标准化的表单处理规则将输入(以及隐藏/默认值和一些元数据等)复制到应用程序/x-www-form-urlencoded文档中,该文档将成为POST请求的有效负载(假设“启动流程”不是有效的只读)

用户通常不关心目标uri是什么(在提交问题之前是否检查了堆栈溢出表单将向何处发送问题?),浏览器也不关心,它只是复制表单元数据中提供的值

这允许api设计者在uri应该是什么方面有很大的自由。例如,您可以选择生成所需的URL的uri


是的,使用远程编写习惯用法而不是表单提交习惯用法也可以。获取资源的复制表示,对其进行本地编辑,然后请求服务器更新该资源的副本。PUT有一些很好的优点,但是如果表示比http头大得多,并且所做的更改很小,那么您可能更喜欢通过发送补丁来实现权衡


但我的问题不是应该使用哪个HTTP动词,而是更改请求中的状态是否合适,尽管请求的目的实际上是启动流程

如果我理解正确的话:当然,没关系

例如,想象一个带有“RESTAPI”的厨房烤箱,它允许我们与之交谈。烤箱资源(松散地说,描述烤箱的文档)可能包括一个用于当前温度的字段,以及另一个用于目标温度的字段

如果我们想要烤土豆,我们可能会向RESTAPI发送一条消息,上面写着“更改烤箱文档,使目标温度为425F”。接受这种改变的一个副作用是服务器实际点燃烤箱中的气体,开始加热


请参见

谢谢您的回答。但我的问题不是应该使用哪个HTTP动词,而是更改请求中的状态是否合适,尽管请求的目的实际上是启动流程。