可以在一个端点中返回与资源相关的所有数据吗?

时间:2020-08-22 15:14:25

标签: api rest

我们的移动应用程序中有一个食谱,该食谱具有一个详细信息屏幕,并且该详细信息屏幕包含很多信息,例如:

  • 评分
  • 相关食谱
  • 成分
  • 食谱信息
  • 营养信息

那么有权在同一个端点中返回所有这些信息或为每个部分创建多个端点吗?

一个端点示例:

GET: https://www.example.com/api/v1/{recipeId}

多个端点示例:

GET: https://www.example.com/api/v1/{recipeId}/info // this API will return all info including the ingredients
GET: https://www.example.com/api/v1/{recipeId}/rating
GET: https://www.example.com/api/v1/{recipeId}/related
GET: https://www.example.com/api/v1/{recipeId}/nutritional

2 个答案:

答案 0 :(得分:1)

这取决于。

如果说您的API使用者是一个网页,您希望一次单击即可同时显示所有信息,则只需将所有信息放在一起并一次性显示,而不是一个个地调用API和然后进行汇总,但是如果有可能还需要单独调用各个端点,则可以公开多个端点。

此外,您的资源uri应该是这样的:

/api/v1/recipes/{recipeId}

答案 1 :(得分:0)

在这种情况下,您可以创建一个API端点。并且,可以公开查询参数,该参数显示用户(其余客户,Web)感兴趣的字段。

/api/v1/recipes/{recipeId}/?fields=all

/api/v1/recipes/{recipeId}/?fields=info,rating,related

/api/v1/recipes/{recipeId}/?fields=info

这样,您将免于为单个服务类型编写多个端点的麻烦。 此外,输出消息或JSON的架构将相同。

也许将来,您想在响应中添加另一个字段。您只需要添加另一个过滤器名称。您的客户端(网络/休息)无需为此使用新的API。只需通过新的过滤器并完成。