我有两个实体
Hotel
,Merchant
,每个商家可以拥有许多酒店。现在我有一个像这样的 API 端点:
/api/v1/merchants/{id}/hotels/{id}
但我在想这个语义有什么问题:
/api/v1/hotels/{id}
后一篇也很短
根据我的经验,后者更可取,因为它可以为您提供更大的灵活性。六个月后,有人会说“嘿,我希望能够查找阿格拉巴的所有酒店”。第一个 URL 方案让这很痛苦 - 您需要添加一个新端点。第二个 URL 方案通过查询参数支持该方案:
GET /hotels?location=Agraba
。
您可能希望将
/merchants/{id}/hotels
保留为收集端点,以便您可以发布/删除以添加/删除特定商家的酒店。
在
REST
中,每个 URL
应唯一标识一个资源。
因此,如果酒店的
id
是全球唯一的,那么使用较短的链接当然没有问题。然而,如果酒店 id 1 对于商家 1 的含义与对于商家 2 的含义不同,那么您应该坚持使用第一个 URL
(基本上是唯一的复合键)。