REST API URL中的嵌套ID

时间:2016-04-05 14:39:32

标签: rest asp.net-web-api

假设用户使用以下网址执行GET以返回公司的所有服务:/api/company/{id}/service

然后,他们想要更新返回的一个服务对象。我应该遵循相同的约定,然后将它们转到PUT/api/company/{id}/service/{id},或者让它更简单一点,让它们PUT/api/service/{id},因为服务ID是全球独一无二。

我做更长网址的一个原因是我想检查用户是否属于公司,所以我可以根据请求轻松检查,因为我有公司ID,但如果我走直接路线我会必须从服务中找到公司ID并检查。

我进行了快速搜索,但没有看到任何明显的标准是什么。

由于

3 个答案:

答案 0 :(得分:1)

我认为对这类问题的每一个答案都有点争议,因为你提出的两种方法在概念上都是正确的,无论如何我都会尝试回答。

在我看来,您必须从company资源与service资源之间的关系开始。如果service由一个company独占,那么我会选择更详细的路径/api/company/{id}/service/{id}。相反,如果您的service资源在不同的company资源之间共享,那么我会更喜欢较短的全局/api/service/{id}路径。

我选择背后的原因纯粹是传统的,旨在澄清两个资源在应用程序域中如何相互影响。

答案 1 :(得分:0)

我认为,您可以仅使用ID来削减URI,例如:

  

POST / api / {companyId} / {serviceId}

你会有这样的事情:

  

POST / api / movistar / balance
     POST / api / movistar / sales

答案 2 :(得分:0)

首先,让您的客户关注链接,而不是分发"模板"如何调用具体的东西。 (也许你已经这样做了,从你的帖子中就不清楚了。)

也就是说,当他们GET列出所有服务的资源时,您应该包含指向这些服务的链接(无论它们是什么)。这样,您的客户需要PUT到您提供的URI。这样,您就可以完全控制URI结构。

这反过来意味着,您可以使用任何更方便的结构,因为无论如何它对客户来说都是透明的。如果您更愿意在URI中包含这两个ID,那么请继续。如果您不喜欢它,您甚至可以在以后更改它,而无需客户注意!