Netflix Falcor - 何时从数据源返回 pathValues 与 jsonGraph?

Posted

技术标签:

【中文标题】Netflix Falcor - 何时从数据源返回 pathValues 与 jsonGraph?【英文标题】:Netflix Falcor - When to return pathValues versus jsonGraph from the data source? 【发布时间】:2019-02-27 06:07:13 【问题描述】:

在实现 Falcor 数据源时,我很困惑为什么有时您可能会返回路径值的集合:

[path, value, path, value]

有时您必须以 jsonGraph 信封的形式提供返回值:

jsonGraph: something: here: value

我了解整个框架在 jsonGraph 的上下文中是如何工作的,但有时路径值的集合可以正常工作,有时则不能。也许我只是没有在路径值集合中正确表示更复杂的 jsonGraph 形状。

我的幼稚理解是,路径值的集合由 falcor 解析为 jsonGraph。但我找不到这方面的任何文档。

如果有人能阐明何时使用各自的返回类型,或者路径值的集合究竟代表什么返回类型,将不胜感激。

跟进

我相信我的问题只是没有正确地以 pathValue 形式表达 JSONGraph。例如,这个任意的 JSONGraph 结构是如何用 pathValues 表示的?

jsonGraph: tasksById: 0: "taskA",
                         1: "taskB",
                         2: "taskC"

我认为这只是一个包含 3 个路径值的平面集合,其中包含每个“任务”的完整路径,但由于某种原因它一直在抛出。

[path: ['tasksById', 0], value: "taskA", ...]

这是等效的有效 pathValue 吗?

【问题讨论】:

【参考方案1】:

getsetcall 的处理程序都应该接受jsonGraphpathValues 的数组(或包装其中任何一个的promise 或observables)。 a reported bug 使用 jsonGraph 使路径无效(尚未测试是否仍然是问题),但除此之外,两者应该是等价的。我发现pathValues 更容易表达,所以没有用jsonGraph 工作太多。

正如您所指出的,无论您的处理程序返回什么,最终从数据源返回的始终是 jsonGraphEnvelope 包装 jsonGraph,所以是的,如果您的处理程序返回 pathValues,数据源将处理转换为 @ 987654333@.

路径值的集合有时会起作用,有时则不起作用

你能举个例子吗?可能是错误,或者格式错误pathValues

编辑

与您的示例几乎匹配的 get 处理程序的示例实现可能如下所示:

const RootRouter = Router.createClass([
  
    route: 'tasksById[integers:indices]',
    get: ( indices ) => 
      return indices.map((index) => (
        path: ['tasksById', index],
        value: `task #$index`,
      ));
    
  
]);

const router = new RootRouter()

router.get([['tasksById', [0, 2]]])
  .subscribe((data) => console.log(data));

// "jsonGraph":"tasksById":"0":"task #0","2":"task #2"

【讨论】:

我认为问题只是用 pathValues 表达更复杂的 JSONGraph 形状。如果需要,您可以查看我在上面添加的编辑。但为了务实,我将使用 JSONGraph 文字样式来表达更复杂形状的样式。 @MFave 你的 pathValues 看起来正确。也许他们不匹配路线?例如类似tasksById[ranges:indices]

以上是关于Netflix Falcor - 何时从数据源返回 pathValues 与 jsonGraph?的主要内容,如果未能解决你的问题,请参考以下文章

从 falcor 路由器返回数据和参考

Falcor 路由器应该从外部 API 返回值

有哪些 Falcor 路由器实施方案?

如何在 Jasmine 1 中监视 Falcor 数据模型构造函数

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

将 falcor 用于具有瞬态数据的多参数请求