【问题标题】:REST - Addressability of resources (Composition, Collection)REST - 资源的可寻址性(组合、集合)
【发布时间】:2016-11-03 11:50:58
【问题描述】:

我正在设计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 个URIs (composition, collection, endpoint),但它的最大值应该是 2。 这是一个宁静的设计吗?

【问题讨论】:

  • 没人知道吗?

标签: rest api-design restful-url


【解决方案1】:

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

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

【讨论】:

  • 感谢您的回答。我认为这可能会有所帮助。
【解决方案2】:

通过这种设计,我的资源可寻址大约 3 个 URI(组合、集合、端点),但它的最大值应该是 2。这是一个宁静的设计吗?

您能否提供一个最大为 2 的指南的参考?

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

  1. 食物资源
  2. 特定类型食物的集合
  3. 一种特殊的食物

虽然早期的资源可以被认为是由其他资源组成的,但这并不意味着最好的颗粒(特定类型,例如苹果)可以通过 3 个 URI 进行寻址。

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

【讨论】:

    猜你喜欢
    • 2013-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-26
    • 2015-04-22
    • 2018-08-22
    • 1970-01-01
    相关资源
    最近更新 更多