有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吗?
答案 0 :(得分:0)
/rest/user/search?email=john.doe@example.com,斜线&#39; /&#39;用于表示级别关系,例如/ rest / customer / orders / order1,客户有订单收集,订单有一个名为order1的订单。