具有复数/后期方法的资源的REST api / url设计

时间:2012-01-27 15:09:53

标签: api url rest

比如说,我有一个以“客户”为资源的REST api url设计。

现在,我希望能够列出所有客户,通过ID或电子邮件地址找到特定客户 此外,我希望能够添加新客户......

这些示例URI是否正确?
或者我应该采取另一种方式......?

/客户/ 1234
获得ID为1234的客户

/customer/email/john@smith.com
通过电子邮件地址获取客户

[POST]
/客户/
创建一个新客户

/客户/
列出所有客户(注意多元化)

4 个答案:

答案 0 :(得分:4)

根据我的经验,RESTful API使用复数的单个资源路径。我们的想法是您拥有customers,并且当您想与客户进行互动时,您通常会与customers资源进行互动。

GET /customers获取客户列表。

POST /customers创建新客户。

GET /customers/:id以获得具有唯一ID的特定客户。 (通常不是客户的属性,如email

GET /customers?email=bob@example.com为客户提供特定的属性值。

Apigee有blog post,涵盖您可能想要阅读的复数。

答案 1 :(得分:1)

如果我正在设计此API,我将从像HAL这样的通用超媒体类型开始,并设计一个根表示,使我能够访问您使用链接和uri模板描述的各种方案。

e.g

GET /api
=>
<resource>
   <link rel="urn:mycompany:customer" href=".../{id}"/>
   <link rel="urn:mycompany:customers" href="..."/>
   <link rel="urn:mycompany:customersearch" href="...{?email}"/>
</resource>

我还没有填写实际的网址,因为从API的使用者的角度来看,这些网址的结构并不重要。做任何最简单的服务器框架。如果您弄错了,请不要担心,您可以稍后更改它,并且您的客户端不会中断,因为他们应该从根表示中发现URL。

通常假设将客户POST到一组客户将创建一个新客户,因此您可以要求您的消费者使用该链接。或者,如果您希望更明确,您可以定义一个新的链接关系,提供用于创建客户的URL。

答案 2 :(得分:0)

我就是这样做的:

<强> /客户/ 1234

<强> customer/john@smith.com 或(如果电子邮件不保证是唯一的) 的 customers/search?email=john@smith.com

[POST] / customers / (注意复数,如下所示)

[GET] 的 /客户/

干杯,

Ferenc的

答案 3 :(得分:-1)

为什么不成为robust并启用/ customer和/ customers?

GET / customer / 1234或/ customers / 1234检索相同的资源。

GET on / customer或/ customers列出了所有客户。

POST给/ customer或/ customers创建一个新客户。