比如说,我有一个以“客户”为资源的REST api url设计。
现在,我希望能够列出所有客户,通过ID或电子邮件地址找到特定客户 此外,我希望能够添加新客户......
这些示例URI是否正确?
或者我应该采取另一种方式......?
/客户/ 1234
获得ID为1234的客户
/customer/email/john@smith.com
通过电子邮件地址获取客户
[POST]
的 /客户/
创建一个新客户
/客户/
列出所有客户(注意多元化)
答案 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创建一个新客户。