优化传统REST API数据源和falcor客户端之间的node.js falcor路由器



我有一个传统的REST API,它返回的数据是这样的:

用户列表- GET /users.json

users: [
    {id: 0, name: "John Smith"},
    ...
]

用户Id - GET /users/0.json

user: {
    id: 0,
    name: "John Smith"
}

可以看到,如果您首先从列表(/users.json)请求数据,然后单击用户,即使信息存在于第一个列表中,也会通过id request从用户重新请求。

在Falcor中,这可以通过在第一次调用中使用引用列表来解决。

我的问题是,如果我正在编写一个Falcor路由器作为中间人,我如何优化这样的场景?目前,路由器必须请求完整的用户列表,然后抛出这些信息,并根据id向客户端返回一个引用列表。这仍然节省了客户端的带宽,但在Falcor路由器和它的数据源(REST API)之间不是最优的。

可以解决这种情况,但首先,我想解释一下为什么会出现这种不匹配。这是因为Falcor尊重REST原则,但你的API没有。REST声明来自API的数据应该是可缓存的。如果它同时驻留在两个位置,则不能缓存。例如,如果我是PUTPATCH /users/0.json,客户端如何知道这个操作对/users.json(不同的资源)有影响并使其缓存无效?它不能。在完全兼容的HTTP REST api和Falcor api中,数据只驻留在一个地方,然后可以通过引用链接到它。对于HTTP, refs是url,因此GET调用/users.json应该响应一个url列表,如["/users/0.json", "/users/1.json"]

也就是说,这并不意味着你运气不好。

你可能想在Falcor这边有一个这样的路线:users[{integers:indices}][{keys:props}]。在此路由的处理程序中,您可以查询pathSet.indices并查看实际请求了多少索引。如果只有一个(或几个),则将请求转发给/users/${indices[i]}.json,否则转发给/users.json

最新更新