我正在考虑从标准的 REST API 架构迁移到 graphQL。目前,我有一个数据包装器,它在初始化后预加载数据集,其中包含用户信息和其他元数据。
有没有办法让 apollo 客户端构建多个组件请求的单个查询,并在组件加载后将其发送到 graphQL 服务器,而不是为每个组件发送单独的查询并形成应用程序运行所需的数据层?
最终有什么其他选项可以做到这一点,并使用 GraphQL 使其比当前实现更好。
Apollo 客户端中的查询有一个默认值cache-first
的选项fetchPolicy
,这意味着 Apollo 将首先尝试从本地缓存中读取,然后再尝试网络获取。如果您有多个组件请求已获取的数据,则不会发生网络调用。只需确保在查询中返回所请求数据的id
字段,即使组件不使用它来确保正确的缓存。
假设你有以下 graphql 模式:
type Query {
question(questionId: Int!): Question
tag(tagId: Int!): Tag
}
type Question {
questionId: Int!
content: String!
}
type Tag {
tagId: Int!
tagName: String!
}
如果要在一个请求中检索 2 个对象,可以编写以下 qraphql 请求:
{
question(questionId: 1) {
questionId
content
}
tag(tagId:1){
tagId
tagName
}
}
作为输出,您将收到以下 JSON:
{
"data": {
"question": {
"questionId": 1,
"content": "how to code in js?"
},
"tag": {
"tagId": 1,
"tagName": "js"
}
}
}