从 REST API 获取 related/nested 数据的最佳做法是什么?
What is the best practice to get related/nested data from REST API?
例如:我们有一个 User 模型,它又有几个 Company 实体。我看到 2 个解决方案:
1) 古典。做一个 API 像:
/users/
/users/3/
/users/3/companies/
并分别发出/users
或companies
请求。但是,如果我们需要在一个视图中同时拥有 user
和 his/her companies
信息(在 Angular2 上)——我们需要向服务器发送 2 个请求。
2) 将related/nested数据放入一级对象模型中。在请求中:
/users/3/
服务器将提供有关用户及其公司的信息。在这种情况下,我们获得了 1 个请求的所有信息。但同样,该公司拥有无限数量的存储实体。如果在一个单独的视图中需要它们怎么办?
我更倾向于第一个选项,但我对 REST 风格的描述感到困惑:"The view must fully represent the resource."满足此要求会导致将资源划分为子资源,并且,因此,更小的表示。 “
请帮忙指教,我怀疑在这种情况下,由于缺乏经验,什么样的决定是正确的。哦,是的,我忘了,使用 Django-Rest-Framework 的 Django 后端 (Python) - 所有这些都是面向 ~ 1000 名用户的 SaaS。
Approach 1
是 REST 的理想方法。但是,在设计用于在 UI 上显示信息的 API 时,涉及的不仅仅是根据资源对 API 进行分区。
所以我建议在 User
API 中包含 Company
信息。但是正如您所建议的 Company
对象可以包含非常大的 Storage
对象列表,在这种情况下,我建议仅将 Company
模型的必要和充分字段包含到 User
API。这样您就可以呈现一个视图。然后当用户展开 Company
部分时,您可以从 /company/<id>
API 中提取剩余的字段。
这样,在用户不寻找 Company
详细信息的情况下,您对点击的 API 调用会更少,并且您的 API 也将是轻量级的。
例如:我们有一个 User 模型,它又有几个 Company 实体。我看到 2 个解决方案:
1) 古典。做一个 API 像:
/users/
/users/3/
/users/3/companies/
并分别发出/users
或companies
请求。但是,如果我们需要在一个视图中同时拥有 user
和 his/her companies
信息(在 Angular2 上)——我们需要向服务器发送 2 个请求。
2) 将related/nested数据放入一级对象模型中。在请求中:
/users/3/
服务器将提供有关用户及其公司的信息。在这种情况下,我们获得了 1 个请求的所有信息。但同样,该公司拥有无限数量的存储实体。如果在一个单独的视图中需要它们怎么办?
我更倾向于第一个选项,但我对 REST 风格的描述感到困惑:"The view must fully represent the resource."满足此要求会导致将资源划分为子资源,并且,因此,更小的表示。 “
请帮忙指教,我怀疑在这种情况下,由于缺乏经验,什么样的决定是正确的。哦,是的,我忘了,使用 Django-Rest-Framework 的 Django 后端 (Python) - 所有这些都是面向 ~ 1000 名用户的 SaaS。
Approach 1
是 REST 的理想方法。但是,在设计用于在 UI 上显示信息的 API 时,涉及的不仅仅是根据资源对 API 进行分区。
所以我建议在 User
API 中包含 Company
信息。但是正如您所建议的 Company
对象可以包含非常大的 Storage
对象列表,在这种情况下,我建议仅将 Company
模型的必要和充分字段包含到 User
API。这样您就可以呈现一个视图。然后当用户展开 Company
部分时,您可以从 /company/<id>
API 中提取剩余的字段。
这样,在用户不寻找 Company
详细信息的情况下,您对点击的 API 调用会更少,并且您的 API 也将是轻量级的。