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

标签 javascript node.js rest falcor falcor-router

我有一个传统的 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 的数据应该是可缓存的。如果它同时驻留在两个位置,则它无法被缓存。例如,如果我要 PUTPATCH /users/0.json,客户端如何知道此操作对/users.json (不同的资源)并使其缓存无效?这不可以。在完全兼容的 HTTP REST API 和 Falcor API 中,数据仅驻留在一个位置,然后可以通过引用链接到该位置。对于 HTTP,refs 是 URL,因此对 /users.jsonGET 调用应使用 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/

相关文章:

java - 如何在 REST 中实现粗粒度乐观锁?

java - Restful Web 服务中的属性文件

javascript - 使用 Express 将 javascript 代码注入(inject) html

ios - Apple Pay - "Payment Not Completed"- 使用 Stripe

node.js - 使用 fs.readdir 和 fs.statSync 返回 ENOENT, no such file or directory 错误

debugging - 如何以编程方式检测nodejs中的 Debug模式?

java - Spring API REST 和 Cors 以及 AngularJS

javascript - 想要在下拉列表更改事件时在 session 变量中设置值

javascript - 无法将新用户保留到 Firebase 数据库

javascript - 使用什么来构建我的应用程序