从REST API获取相关/嵌套数据的最佳做法是什么?

从REST API获取相关/嵌套数据的最佳做法是什么?

问题描述:

例如:我们有一个用户模型,它又有几个公司实体。我看到2个解决方案:从REST API获取相关/嵌套数据的最佳做法是什么?

1)古典。做一个像API:

/users/ 
/users/3/ 
/users/3/companies/ 

,并分别出具/userscompanies请求。但是,如果我们需要在一个视图中(在Angular2上)同时拥有user和他/她的companies信息 - 我们需要向服务器发送2个请求。

2)将相关/嵌套的数据放在level-1对象模型中。在请求中:

/users/3/ 

服务器将提供有关用户以及他的公司的信息。在这种情况下,我们获得1个请求的所有信息。但同样,该公司拥有无限数量的存储实体。如果在一个单独的视图中需要它们会怎样?

我更倾向于第一种选择,但我对REST风格的描述感到困惑:“视图必须完全代表资源。”满足这一要求可能会导致将资源划分为儿童资源,并因此导致较小的表示。 “

请帮助我的建议,我怀疑缺乏经验在这种情况下,什么样的决定是正确的。哦,是的,我忘了,使用Django-Rest-Framework的Django(Python)Backend - 所有这些是一个SaaS为〜1000个用户。

Approach 1是对REST的理想的方法。但是,当涉及到设计的API在UI上显示的信息它涉及的不仅仅是分割的API按照资源更多。

所以我建议在User API中包含Company信息但是正如你所建议的Company对象可以有很大的列表的Storage对象,在这种情况下,我会建议只包含Company模型的必要和充足字段到User API。这样你就可以呈现一个视图。然后当用户扩展Company部分时,您可以从/company/<id> API中拖出剩余的字段。

这样你就会有较小的API调用,用户不会寻找Company的细节,你的API也会轻量级。