命名REST API-获取非成员属性的集合

时间:2020-07-17 21:35:09

标签: api rest

假设我正在开发一个有关购物的应用程序。我定义了以下端点,这些端点是不言自明的:

GET /items
GET /items/{item-id}
GET /stores
GET /stores/{store-id}

现在,我想创建另一个端点,以显示不同商店中单个商品的价格。此价格信息未包含在/items/{item-id}中,因为我认为不适合将其作为项目的属性,并且获取价格列表需要更多的计算,因为我无法直接返回该对象。我将命名端点/items/{item-id}/prices并期望这样的响应:

[
  {
    "store_id": "store_1",
    "price": 13.00
  },
  {
    "store_id": "store_2",
    "price": 12.99
  }
]

我想进一步扩展它并创建另一个端点,该端点返回所有项目的价格信息,但是在命名此端点时遇到了麻烦。到目前为止,我还想到过/items/prices/items?display=prices,但是前者可能与/items/{item-id}相匹配,而后者可能只是令人困惑,而后者对我来说似乎没有任何意义。 / p>

为端点选择最佳名称是什么,以使其与约定保持一致?

3 个答案:

答案 0 :(得分:1)

对于单个商店的所有商品价格表端点,我建议使用GET /stores/{store-id}/pricesGET /stores/{store-id}/pricelist

对于所有商品/商店的价目表,我将使用GET /items/pricelistGET /items/*/pricelist(在/items/{item-id}之前都是特殊的),{{1}可以根据需要由商店指定}。

答案 1 :(得分:1)

将价格端点添加到项目将是没有意义的,因为项目本身没有任何关系。商店负责决定价格。

我建议将商店端点重命名为/stores/description/{id},并添加价格子类别/stores/prices/by-item/{id}/stores/prices/by-store/{id}

答案 2 :(得分:0)

我想说,对于特殊商品 / prices / {store-id} / {item-id}
以及所有价格 / prices / {store-id}