RESTful api 用于嵌套资源
RESTful api for nested resource
我有两个实体 Hotel
,Merchant
,每个商家可以有很多酒店。现在我有一个像这样的 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 来自特定商家的酒店。
我有两个实体 Hotel
,Merchant
,每个商家可以有很多酒店。现在我有一个像这样的 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 来自特定商家的酒店。