【发布时间】:2019-12-01 13:00:45
【问题描述】:
我有以下疑问:
const getPage = gql`
query Page($path: String!) {
page(path: $path) @rest(type: "Page", path: "{args.path}") {
blocks @type(name: Block) {
name
posts @type(name: Post) {
body
author
}
}
authors @type(name: Author) {
name
}
}
}
在blocks.posts.author 中只有一个AuthorId。 authors 对象包含所有可用的作者。
我想用它的对应对象替换/匹配AuthorId。是否可以在一个查询中执行此操作?
我也不介意仅对 Author 进行单独查询(将缓存提取,不会发出新请求),但我仍然不知道如何通过 2 个查询匹配它。
示例 API 响应
{
blocks: [
{
posts: [
{
id: 1,
title: 'My post',
author: 12,
}
]
}
],
authors: [
{
id: 12,
name: 'John Doe'
}
]
}
我想要通过 1 个查询使 post 中的 author 成为完整的作者对象。
【问题讨论】:
-
根据指令,您似乎正在使用
apollo-client和apollo-link-rest,但这在您的问题中未提及,也未在标签中反映出来。 -
谢谢,已添加。
-
我添加了一个应该可行的答案,尽管自从我使用该链接以来已经有一段时间了。如果您要包装一个非常基本的 REST 端点,这是一个简洁的库,但您应该考虑设置一个单独的 GraphQL 服务器作为网关,而不是用于更复杂的情况。这使您在如何解析字段方面具有更大的灵活性,并为缓存 REST 响应和其他功能开辟了道路,这些功能是 apollo-link-rest 无法实现的。
-
缓存将在浏览器级别使用 SW 解决,给我们更多的控制权。我们试图拥有您发布的此类解决方案,但您所拥有的需要一个单独的端点,因为我可以看到我们没有。我们无法改变这一点,它是一个像这样工作的 PHP API,我们必须处理它:)
标签: graphql apollo-client apollo-link-rest