将RESTful API中资源字段的值增加固定量,而不知道其值

时间:2019-01-09 07:19:53

标签: rest api-design

我正在开发一个API,该API负责管理长期运行的作业。 您可以通过发布到

来创建工作
/jobs/

为您提供一个带有进度栏的对象,如

{"progress_percentage": 0.0, "id": 1}

然后您可以通过修补到

来更改此作业的实例
/jobs/<job-id>/

作业正在运行时,我想点击api以增加作业运行的进度,从0.0开始,到100.0结束。 任何给定的作业都可以拆分为较小的任务,这些任务可以同时运行,并可以分配进度“块”。 我希望每个块都相对于分配的进度增加进度。 例如,如果任务1正在运行并且被分配了30%的进度块,并且在大小为5的此任务中有一个for循环,那么我希望将for循环的每次迭代的进度百分比提高6%,而无论当前的进度百分比是什么。

其他工作可能只是想设置百分比(而不是增加百分比)

那么我的问题是,从API设计的角度来看,最理想的方法是什么。

我看到一些选择

1。

PATCH /jobs/<job-id>/

有效载荷为

{"progress_percentage": {"increase": 6.0}}

增加

{"progress_percentage": {"set": 35.0}}

进行设置。

2。

POST /jobs/<job-id>/progress_percentage/

有效载荷为

{"amount" 6.0} or [6.0]

增加或

PATCH /jobs/<job-id>/

有效载荷为

{"progress_percentage" 30.0}

进行设置。

1 个答案:

答案 0 :(得分:1)

假设您的REST API没有公开公开,我认为选择1会更有利。

由于“ progress_percentage”是“ job”对象的属性,因此我认为无需引入子资源(即 / progress_percentage )。

此外,如果您要对多个“作业”属性执行PATCH,则希望能够将其作为单个请求和有效负载的一部分来执行,而不是触发多个PATCH请求。为此,使用' PATCH / jobs / {job-id} / '是合理的。