【发布时间】:2016-10-31 21:59:59
【问题描述】:
我猜,这更像是一个概念问题而不是技术问题。假设我有一个 REST API 来处理庞大的租车车队。
API 以非常标准和连贯(即使有争议)的方式围绕业务实体/资源建模:
-
/cars/1234- 某辆车的详细数据 -
/clients/5678- 关于某个客户的详细数据 -
/cars- 汽车及其 URI 列表 -
/clients- 客户列表
但是,车队规模庞大,列出所有汽车的清单并没有多大用处。我宁愿过滤它,比如:
GET /cars?type=minivan
为了正确使用“type”参数,我应该有一个有效值列表,例如“minivan”、“convertible”、“station-wagon”、“hatchback”、“sedan”等。好的,那里没有那么多种类的汽车,但是让我们假设这个列表对于 API 的 Swagger 定义中的枚举来说太大了。
那么...对于 REST API 来说,为这样的查询参数提供有效值列表的最一致和自然的方式是什么?
像
/cars/types这样的从属资源?这会破坏/cars/{id}URL 模式,不是吗?作为单独的资源,例如
/tables/cars/types?这会破坏商业模式本身主要资源的一致性,对吗?作为
OPTIONS /cars响应正文的一部分?对我来说,这看起来像是“最完整”的方式,但我的一些同事不同意,而且 OPTIONS 似乎很少用于这样的事情。也许作为对
GET /cars?&metadata=values或类似内容的回复的一部分?这里的“值”在语义上似乎与返回的数据相关,而不是查询参数,不是吗?还有别的吗?
我在 SO 中搜索并搜索了一些关于这个特定主题的建议,但我找不到任何可以帮助我为这样的决定提供论据的东西......
谢谢!
法布里西奥·罗查
巴西利亚,巴西
【问题讨论】:
标签: web-services rest