【发布时间】:2017-12-17 16:48:12
【问题描述】:
我有两个实体Hotel、Merchant,每个商家可以有很多酒店。现在我有一个这样的 api 端点:
/api/v1/merchants/{id}/hotels/{id}
但我在想这种语义有什么问题:
/api/v1/hotels/{id}
后面的也很短。
【问题讨论】:
标签: rest api web web-applications restful-url
我有两个实体Hotel、Merchant,每个商家可以有很多酒店。现在我有一个这样的 api 端点:
/api/v1/merchants/{id}/hotels/{id}
但我在想这种语义有什么问题:
/api/v1/hotels/{id}
后面的也很短。
【问题讨论】:
标签: rest api web web-applications restful-url
根据我的经验,后者更可取,因为它在以后为您提供了更大的灵活性。六个月后,有人会说:“嘿,我希望能够查看阿格拉巴的所有酒店”。第一个 URL 方案让这很痛苦——您需要添加一个新端点。第二个 URL 方案通过查询参数支持它:GET /hotels?location=Agraba。
您可能希望将 /merchants/{id}/hotels 保留为集合端点,以便您可以通过 POST/DELETE 添加/删除特定商家的酒店。
【讨论】:
GET /329ffkdq-dkfh/1234jfkdlf 在 REST 中与GET /hotels/12 没有什么不同。 @alexandrumarculescu 说你不应该在 /hotels/12 和 /merchants/5/hotels/12 上支持相同的操作——酒店应该只住在一个地方。
/rooms?facility=ac 的房间将返回每家酒店的所有房间,但 URL 像 /hotels/id/rooms?facility=ac 我敢肯定搜索将被限制在该酒店内。你有什么建议?
GET /rooms?hotel=XXX&facility=YYY
在REST 中,每个URL 都应该唯一标识一个资源。
因此,如果酒店的id 是全球唯一的,那么使用较短的链接当然没有问题。但是,如果酒店 id 1 对商家 1 和商家 2 的含义不同,那么您应该坚持使用第一个 URL(基本上是唯一的复合键)。
【讨论】:
hotel 的表,所以它的 id 可能是唯一的。