0

请记住,我对休息和建筑服务有基本的了解。我问这个问题主要是因为我试图通过提供一个前端以可扩展的方式运行异步作业,从而将服务与调用 CLI(在同一主机内)分离。

我想构建一个可以提交异步作业的服务。该服务应该能够告诉我工作的状态和结果的位置。

APIs
1) CreateAsyncJob
Input: JobId,JobFile 
Output: 200Ok (if job was submitted successfully)

2) GetAsyncJobStatus
Input: JobId 
Output: Status(inProgress/DoesntExist/Completed/Errored)

3)GetAsyncJobOutput
Input: JobId 
Output: OutputFile

问题 第二个 API GetAsyncJobStatus 违反了幂等性原则。

  • 在我们需要更新特定作业进度的 API 中,幂等性如何保持?
  • 在这种情况下是否需要幂等性?
4

1 回答 1

1

根据此处的链接, 幂等性是 API 通过在重复调用期间产生相同结果来展示的一种行为。

根据我的理解,幂等性是在每个 API 方法级别(我们更关心如果客户端重复调用此 API 会发生什么)。因此,保持幂等性的最佳方法是将读取和写入操作分离到单独的 API 中。通过这种方式,我们可以更全面地推理各个 API 方法的幂等行为。此外,虽然这个术语在 RESTful 服务中越来越受欢迎,但这些原则甚至适用于其他 API 系统。

在您提供的用例中,客户端对 API 调用的响应会有所不同(取决于作业的状态)。假设此 API 是只读的并且不在服务器上执行任何写入操作,则状态通过仅调用此 API ,服务器上将保持不变- 例如,如果系统中有 10 个处于不同状态的作业为作业 ID 调用此 API 100 次,则每次作业 ID 可能会导致不同的状态(基于它的进度) - 但是服务器上的作业数量及其相应的状态将是相同的。

但是,如果此 API 以某种方式以某种方式改变服务器状态的方式实现 - 那么此调用不一定是幂等的。

所以保留两个 API -getJobStatus(String jobId)updateJobStatus(String jobId). getJobStatus是幂等的,而updateJobStatus不是。

希望这可以帮助

于 2015-08-15T20:31:36.450 回答