REST - 资源的可寻址性(组合、集合)
REST - Addressability of resources (Composition, Collection)
我正在设计 REST-API
,目前我遇到了以下问题。例如我得到以下结构:
/foods/fruits/{fruit}
/foods/meat/{meat}
例如:
/foods/fruits/apple
/foods/fruits/pineapple
/foods/meat/chicken
每个端点都是唯一的 (only one apple, one chicken
),但可以存在不同种类的 fruits
(例如菠萝)。
但是我的 service
需要 return
- 一种特定的水果(苹果),
- 所有水果(收集资源中包含所有可访问的水果 --> 苹果、菠萝)
- 或整个食物(水果和肉类的收集资源的组成)
通过这种设计,我的资源可寻址大约 3 URIs
(composition, collection, endpoint
),但最大值应该是 2。
这是restful设计吗?
查看 Richardson Maturity Model,您可以拥有一个通用的 Food
资源和端点,具有类型和名称等属性,然后您的需求可以像这样访问:
GET /api/food?name=apple
GET /api/food?type=fruit
GET /api/food
With this design my ressource is addressable about 3 URIs (composition, collection, endpoint), but it should be a maxima of 2. It this a restful design?
您能否提供一个最大值应为 2 的指南参考?
但无论哪种方式 - 这三个 URI 不是同一资源的 3 个不同 URI,它们是三个不同的资源:
- 食物资源
- 特定类型食物的集合
- 一种特定类型的食物
虽然早期的资源可以被认为是由其他资源组成的,但这并不意味着最好的颗粒(特定类型,例如苹果)可以通过 3 个 URI 寻址。
如果您使用的是 HAL 等超媒体格式,您的组合表示可以利用 嵌入式 资源,这清楚地说明了所包含的资源也可以直接通过它们获得自己的端点。
我正在设计 REST-API
,目前我遇到了以下问题。例如我得到以下结构:
/foods/fruits/{fruit}
/foods/meat/{meat}
例如:
/foods/fruits/apple
/foods/fruits/pineapple
/foods/meat/chicken
每个端点都是唯一的 (only one apple, one chicken
),但可以存在不同种类的 fruits
(例如菠萝)。
但是我的 service
需要 return
- 一种特定的水果(苹果),
- 所有水果(收集资源中包含所有可访问的水果 --> 苹果、菠萝)
- 或整个食物(水果和肉类的收集资源的组成)
通过这种设计,我的资源可寻址大约 3 URIs
(composition, collection, endpoint
),但最大值应该是 2。
这是restful设计吗?
查看 Richardson Maturity Model,您可以拥有一个通用的 Food
资源和端点,具有类型和名称等属性,然后您的需求可以像这样访问:
GET /api/food?name=apple
GET /api/food?type=fruit
GET /api/food
With this design my ressource is addressable about 3 URIs (composition, collection, endpoint), but it should be a maxima of 2. It this a restful design?
您能否提供一个最大值应为 2 的指南参考?
但无论哪种方式 - 这三个 URI 不是同一资源的 3 个不同 URI,它们是三个不同的资源:
- 食物资源
- 特定类型食物的集合
- 一种特定类型的食物
虽然早期的资源可以被认为是由其他资源组成的,但这并不意味着最好的颗粒(特定类型,例如苹果)可以通过 3 个 URI 寻址。
如果您使用的是 HAL 等超媒体格式,您的组合表示可以利用 嵌入式 资源,这清楚地说明了所包含的资源也可以直接通过它们获得自己的端点。