我有一个传统的 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请求重新请求。
在 Falcor 中,可以通过在第一次调用中提供引用列表来解决这个问题。
我的问题是,如果我正在编写一个 Falcor 路由器来充当中间人,我该如何优化这样的场景?目前,路由器必须请求完整的用户列表,然后丢弃信息并根据 ids 返回一个引用列表给客户端。这仍然可以节省客户端的带宽,但在 Falcor 路由器及其数据源(REST API)之间并不是最优的。
最佳答案
可以解决这种情况,但首先,我想解释一下为什么您会看到这种不匹配的情况。这是因为 Falcor 尊重 REST 原则,但您的 API 不尊重。 REST 规定来自 API 的数据应该是可缓存的。如果它同时驻留在两个位置,则它无法被缓存。例如,如果我要 PUT
或 PATCH
/users/0.json
,客户端如何知道此操作对/users.json
(不同的资源)并使其缓存无效?这不可以。在完全兼容的 HTTP REST API 和 Falcor API 中,数据仅驻留在一个位置,然后可以通过引用链接到该位置。对于 HTTP,refs 是 URL,因此对 /users.json
的 GET
调用应使用 URL 列表进行响应,例如 ["/users/0.json “,“/users/1.json”]
。
也就是说,这并不意味着您运气不好。
您可能希望在 Falcor 方面拥有这样的路由:users[{integers:indices}][{keys:props}]
。在此路由的处理程序中,您可以查询pathSet.indices并查看实际请求了多少索引。如果只有一个(或几个),则将请求转发到 /users/${indices[i]}.json
,否则转发到 /users.json
。
关于javascript - 优化传统 REST API 数据源和 Falcor 客户端之间的 node.js falcor 路由器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40158305/