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
这可能会被误认为是更新多个作业而不是单个作业的终点。
我对执行 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
这可能会被误认为是更新多个作业而不是单个作业的终点。