查询和获取资源时获取嵌套对象数据

时间:2014-12-19 04:31:42

标签: angularjs rest angularjs-resource

我设计了一个RESTful Web API,它有一个端点,可以输出这个结构中的对象:

{
    "id": 2,
    "name": "Test Object",
    "owner": 3,
}

"所有者"还由一个单独的API端点表示,该端点提供有关拥有该对象的特定用户的更多数据。整齐。

我尝试做的是,在检索对象(通过查询或获取)时,还要按ID查找每个用户并替换"所有者"具有包含用户数据(如用户名和电子邮件地址)的对象的对象的属性。作为参考,我尝试使用ngRepeat在模板中使用它。

有没有实用的方法呢?或者我应该简单地重新设计API以自动输出相关数据?我还没有找到RESTful API的任何资源,这些资源指向了我一个方向或另一个方向。

谢谢!

1 个答案:

答案 0 :(得分:1)

所以有一些方法可以解决这个问题。我见过的三个似乎最受欢迎的是(没有特别的顺序):

1)始终在该REST端点上自动填充相关数据。如果需要呈现另一个“形状”,请提供不同的端点。这可能是本土API人群中最常见的。

2)使用Querystring参数允许客户端要求扩展某些属性(这是OData使用的方法)。

3)(可能与原始REST概念最“一致”)将owner属性替换为相关实体的URL,或者将“相关链接”的单独集合附加到对象。这是Neo4J在其REST API中使用的方法。

显然,这些都是服务器端的事情。如果你想纯粹在Angular中完成它,你可能最终会在你的资源中编写自定义逻辑,或者可能创建一个拦截器。不是超级干净,imo,除非服务器公开了上面提到的某种标准。

*编辑* 如果我要调查纯粹在Angular方面这样做,我会考虑在我的资源定义中添加http interceptor来拦截响应,触发对相关资源的另一个请求,然后转换响应以添加更新信息到主模型。由于拦截器在Promises中工作,因此这应该为调用代码提供与普通请求相同的体验,但显然需要更长的时间,因为您要为单个实体启动两个(或更多)Ajax调用。这种速度/性能的打击是我不打算做客户端的主要原因。