RESTful api 用于嵌套资源

RESTful api for nested resource

我有两个实体 HotelMerchant,每个商家可以有很多酒店。现在我有一个像这样的 api 端点:

/api/v1/merchants/{id}/hotels/{id}

但我在想这个语义有什么问题:

/api/v1/hotels/{id}

后一个也很短

REST 中,每个 URL 应该唯一标识一个资源。

因此,如果酒店的 id 是全球唯一的,那么当然,使用较短的 link 没有问题。但是,如果酒店 ID 1 对商家 1 和商家 2 的含义不同,那么您应该坚持使用第一个 URL(基本上是唯一的复合键)。

根据我的经验,后者更可取,因为它可以在以后为您提供更大的灵活性。六个月后,有人会说 "Hey, I want to be able to look up all the hotels in Agraba"。第一个 URL 方案让人很痛苦——你需要添加一个新的端点。第二个 URL 方案支持使用查询参数:GET /hotels?location=Agraba.

您可能希望将 /merchants/{id}/hotels 保留为收集端点,以便您可以 POST/DELETE 到 add/remove 来自特定商家的酒店。