Phi*_*ann 4 apollo graphql react-apollo apollo-client apollo-link-rest
我必须使用的其余 api 提供多个端点上的数据。结果中的对象可能具有 api 无法直接解析的关系,而是提供指向实际资源的 id。
示例:
为了简单起见,假设一个Person可以拥有多个Books.
现在api/person/{i}端点返回:
{ id: 1, name: "Phil", books: [1, 5, 17, 31] }
Run Code Online (Sandbox Code Playgroud)
端点api/book/{i}返回此(请注意,作者可能又是一个关系):
{ id: 5, title: "SPRINT", author: 123 }
Run Code Online (Sandbox Code Playgroud)
有什么方法可以教 apollo 客户端以我可以编写以下(或类似)查询的方式解析这些端点:
query fetchBooksOfUser($id: ID) {
person (id: $id) {
name,
books {
title
}
}
}
Run Code Online (Sandbox Code Playgroud)
我还没有在一个查询中尝试过,但应该是可能的。
阅读由此而来的文档
一开始我会尝试这样的事情:
query fetchBooksOfUser($id: ID) {
person (id: $id) @rest(type: "Person", path: "api/person/{args.id}") {
name,
books @rest(type: "Book", path: "api/book/{data.person.books.id}") {
id,
title
}
}
}
Run Code Online (Sandbox Code Playgroud)
...但它可能行不通 - 可能它不够智能,无法使用数组。
更新:请参阅类似示例的注释,但使用一个通用的父解析参数。在您的情况下,我们已部分解析books为带有id. 我不知道如何使用它们ids来解决同一“树”级别上缺少的字段()。
其他可能性 - 在Person类型修补程序中(以某种方式)发出相关的子请求/子查询。应该是可以的。
这真的需要成为一个查询吗?您可以向子容器提供 id,每个子容器在需要时运行自己的查询。
更新: Apollo 将负责批处理(不适用于 REST,不适用于所有 graphql 服务器 - 阅读文档)。
构造一个查询“很方便”,但 apollo 会缓存它,按类型标准化响应 - 数据将单独存储。使用一个查询可以使您保持在overfetching camp或template thinking(在一步渲染之前收集所有可能的数据)。
Ract thinking使您的数据和视图分解、在需要时使用、更专业化等。
<Person/>容器将查询渲染自身所需的数据以及子级所需的 id 列表。每个人都<Book/>将使用传递的查询自己的数据id。
| 归档时间: |
|
| 查看次数: |
896 次 |
| 最近记录: |