自然答案当然不是,所以为了理解我的目标,请让我解释一下。
我们有一个服务,客户端POST
要执行的作业,但它们不会在发布时执行。相反,我们的服务会使用ID进行响应,客户可以使用该ID通过job
执行GET
。
现在,当作业执行时,它也会被删除,并且该作业不再可用。
根据我对RESTfull架构的理解,我们的实现不符合REST的思想。
所以我想知道的是,如果不是RESTfull,我们应该如何重新设计呢?只是将GET
更改为POST
(我不相信,因为删除某些内容(工作))同时DELETE
似乎也是如此因为执行job
job
我的意思是我们从数据库中提供了大量数据。
答案 0 :(得分:2)
我们的服务使用客户可用于通过GET执行作业的ID进行响应。
这听起来不像RESTful。客户应该PUT
到工作资源,也许将工作状态设置为execute
。
PUT /jobs/1234
{
"status": "execute"
}
200 OK
客户端可以稍后GET
作业资源来检查状态。也许以后状态会变为completed
。
GET /jobs/1234
200 OK
{
"id": 1234,
"status": "completed",
"quizzle": "smooth"
}
如果在一段时间后系统的某些不同部分删除completed
个作业,则作业资源的GET
将导致410 Gone
。
GET /jobs/1234
410 Gone
答案 1 :(得分:2)
RESTfull是一个很好的讨论,其背后的主要概念是使用URI动词和使用HTTP动词的动作来表达资源。我会提出以下三种解决方案,从我认为最优先的解决方案到最少的解决方案。
希望这有帮助,这是一个很好的讨论主题:)
答案 2 :(得分:0)
没有。不要通过get执行作业。如果作业已经执行并且有人试图再次发送它,请返回422 Unprocessable Entity
,并说明作业已经运行。如果你真的必须,你可以在第二篇文章中删除作业。最好让客户决定是否/何时删除作业。
send up a job:
POST /jobs
{ .. }
execute a job:
POST /executed-jobs
==> { "jobId": 12345 }
<== { "expectedCompletionTime": "<timestamp>" }