Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Rest 我应该使用哪个HTTP动词声明和锁定作业队列中的项?_Rest_Httpverbs - Fatal编程技术网

Rest 我应该使用哪个HTTP动词声明和锁定作业队列中的项?

Rest 我应该使用哪个HTTP动词声明和锁定作业队列中的项?,rest,httpverbs,Rest,Httpverbs,我计划使用HTTP REST接口连接到作业控制服务 一个关键操作是请求计算作业 调用方不知道作业的ID;这就是它将被告知的内容。 该作业将在数据库中标记为已被服务锁定。 处理作业所需的数据将返回给调用者。 稍后,当调用方处理完作业后,它将通过另一个REST调用返回结果 现在它知道了要更新的记录的ID。 第二个REST调用将使用结果更新作业记录。 并更改作业的状态并释放锁。 只需返回成功/失败状态。 我倾向于对每个操作使用PUT,因为没有创建新记录;这两种情况下都在更新 这样合适吗?第一个PUT是

我计划使用HTTP REST接口连接到作业控制服务

一个关键操作是请求计算作业

调用方不知道作业的ID;这就是它将被告知的内容。 该作业将在数据库中标记为已被服务锁定。 处理作业所需的数据将返回给调用者。 稍后,当调用方处理完作业后,它将通过另一个REST调用返回结果

现在它知道了要更新的记录的ID。 第二个REST调用将使用结果更新作业记录。 并更改作业的状态并释放锁。 只需返回成功/失败状态。 我倾向于对每个操作使用PUT,因为没有创建新记录;这两种情况下都在更新

这样合适吗?第一个PUT是否可以返回包含作业数据的大型JSON负载,还是只返回HTTP状态?即使我不是在创建记录,只是在更新它,我是否应该使用POST呢

我会在第一个操作中使用GET,但是GET不应该更改服务上的任何对象,我正在锁定它,这是一个更改。在GET请求中锁定记录是否可以接受

我应该使用哪个HTTP动词声明和锁定作业队列中的项

关键思想:RESTAPI是一个门面——您的应用程序/服务假装是一个符合HTTP的文档存储。发生的所有有趣的事情都是由修改文档引发的副作用。看

考虑到这一点

邮局很好

PUT/PATCH是远程创作的好工具;客户端获取资源的表示,对其本地副本进行编辑,并向您发送表示的副本或描述补丁更改的补丁文档。然后,服务器可以将这些编辑应用于其副本,也可以不应用

因此,对于您的特定示例,我希望客户端获得资源的表示,将该表示中的信息从unlocked更改为locked,然后将更改后的表示放回服务器。您的服务器需要更新表示的副本以匹配

它可能会让您想起一种声明式风格——客户机告诉服务器表示应该是什么样的,这取决于服务器如何做到这一点

包括完整性,不推荐:

还包括具有相应解锁的方法锁。这些方法标记的语义由规范定义。如果LOCK的含义与WebDAV的含义相匹配,那么使用它可能就是一个答案。请注意,该规范包括如下注释

任何支持锁方法的资源至少必须支持本文定义的XML请求和响应格式

除非您已经身处一个人们希望能够使用通用WebDAV客户端与API交互的领域,否则这可能不是一个好的选择

HTTP方法注册表为。因此,您可以定义自己的方法标记的语义,然后将其作为标准采用