Webapi - .Net restful put/update service/repo 层上的参数约定

Webapi - .Net restful put/update parameter convention on service/repo layers

我对执行 restful 更新的标准方法有疑问。

我们有一个 restful Api,更新 URL 如下所示:

put /jobs/{jobUid:guid}

restful控制器中的签名是:

UpdateJob(Guid jobUid, [FromBody] UpdateJobOperation job)

我们的 UpdateJobOperation class 与我们的 Job class 具有所有相同的属性,除了 Id (Guid) 不在 UpdateJobOperation class.

在这个更新方法中,我们将 UpdateJobOperation 映射到我们的 Job 业务对象,然后我们在服务层调用更新并传入作业。作业对象上有一个 Guid Id 属性。所以我的问题如下:

我们在服务层更新的签名和我们在存储库层更新的签名(服务将执行业务逻辑然后调用存储库更新)应该像:

UpdateJob(Job job)

UpdateJob(Guid jobUid, Job job)

如果我们使用单个 Job 参数,显然我们需要在 Job 上设置 JobUid 属性,然后再调用服务上的 UpdateJob

显然这两种方法都有效,但我无法找到是否有关于 service/repo 更新的最佳实践。

你有什么建议?

谢谢!

不冒宗教争论的风险...

严格来说,从 restful API 的角度来看,PUT 用于更新您拥有其 ID 的资源。从这个意义上说,你 API 界面很好。在您的服务层,我很想使用 Update(Job job) 签名,因为这可以为您重新使用 POST 操作。

您当前的实施是正确的。特别是,因为如果你要摆脱 jobUid 参数,你最终会得到终点 put /jobs 这可能会被误认为是更新多个作业而不是单个作业的终点。