我正在开发一个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}
进行设置。
答案 0 :(得分:1)
假设您的REST API没有公开公开,我认为选择1会更有利。
由于“ progress_percentage”是“ job”对象的属性,因此我认为无需引入子资源(即 / progress_percentage )。
此外,如果您要对多个“作业”属性执行PATCH,则希望能够将其作为单个请求和有效负载的一部分来执行,而不是触发多个PATCH请求。为此,使用' PATCH / jobs / {job-id} / '是合理的。