用于搜索单个资源的RESTful URL设计

时间:2017-02-22 14:02:18

标签: rest restful-url

couple questions关于用于搜索资源的RESTful URL设计。我感兴趣的是通过资源ID以外的其他东西获取单个资源的RESTful URL。

例如,用户具有ID和资源URL /rest/user/<id>。我想允许通过他们的电子邮件地址搜索单个用户(确保系统是唯一的。)

替代方案我提出:

A)/rest/user/email/john.doe@example.com - 创建一个单独的资源来访问单个资源(虽然/rest/user/email未定义)

B)/rest/user/email:john.doe@example.com - 此处email:john.doe@example.com被视为用户的替代标识符,因此这是使用备用ID的相同资源端点

C)/rest/user?email=john.doe@example.com - 这是RESTful搜索,但它会返回一个包含零个或一个条目的数组,因此不是对资源的直接引用

D)/rest/user/search?email=john.doe@example.com - 与(C)类似的搜索API,但具有不同的语义

设计应该可扩展到使用系统提供的不同唯一ID(外部ID,电话号码,SSN等)进行搜索。

我倾向于选项B,因为它定义了一种引用特定用户的替代方法(可以在服务中全局使用)并重用现有资源端点。这可以扩展到PUT和DELETE以及GET。但它是非常RESTful吗?

1 个答案:

答案 0 :(得分:0)

/rest/user/search?email=john.doe@example.com,斜线&#39; /&#39;用于表示级别关系,例如/ rest / customer / orders / order1,客户有订单收集,订单有一个名为order1的订单。