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

时间:2017-03-16 10:00:47

标签: rest api http django-rest-framework client-server

例如:我们有一个用户模型,后者又有几个公司实体。我看到了两个解决方案:

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)进行后端处理 - 所有这些都是为大约1000名用户提供的SaaS。

1 个答案:

答案 0 :(得分:0)

Approach 1是REST的理想方法。但是,当设计用于在UI上显示信息的API时,它涉及的不仅仅是根据资源对API进行分区。

因此,我建议在Company API中添加User信息。但正如您所建议的,Company对象可以包含非常大的Storage个对象列表,在这种情况下,我建议仅将Company模型中必要且充足的字段包含到User API中。这样您就可以渲染一个视图。然后,当用户展开Company部分时,您可以从/company/<id> API中提取剩余字段。

这样,对于用户不会查找Company详细信息的匹配,您将获得较少的API调用,并且您的API也会轻量级。