REST - 资源的可寻址性(组合,集合)

时间:2016-11-03 11:50:59

标签: rest api-design restful-url

我正在设计一个REST-API,目前我仍然坚持以下问题。例如,我得到以下结构:

/foods/fruits/{fruit}
/foods/meat/{meat}

例如:

/foods/fruits/apple
/foods/fruits/pineapple
/foods/meat/chicken

每个端点都是唯一的(only one apple, one chicken),但可以存在不同种类的fruits(例如菠萝)。 但是我的service需要返回

  • 一种特定的水果(苹果),
  • 所有水果(收集资源充满所有可访问的水果 - >苹果,菠萝)
  • 或整个食物(水果和肉类的收集资源的组成)

使用此设计,我的资源可以解决约3 URIscomposition, collection, endpoint),但它应该是2的最大值。 这是一个宁静的设计吗?

2 个答案:

答案 0 :(得分:2)

查看Richardson Maturity Model,您可以拥有一个通用Food资源和端点,其中包含类型和名称等属性,然后您的需求就可以访问:

  • GET /api/food?name=apple
  • GET /api/food?type=fruit
  • GET /api/food

答案 1 :(得分:1)

  

使用这种设计,我的资源可以解决3个URI(组合,集合,端点),但它应该是2的最大值。这是一个宁静的设计吗?

您是否可以为指南提供最大值为2的参考?

但无论哪种方式 - 这三个URI对于同一资源不是3个不同的URI,它们是三种不同的资源:

  1. 食物资源
  2. 特定类型的食物集合
  3. 特定类型的食物
  4. 虽然可以认为较早的资源由其他资源组成,但这并不意味着最精细的颗粒(特定类型,例如苹果)可以通过3个URI进行寻址。

    如果您使用的是超媒体格式,例如HAL,则您的合成表示可以使用嵌入式资源,这清楚地说明所包含的资源也可以通过自己的端点直接使用。