我正在考虑从标准REST API架构转向graphQL。目前我有一个数据包装器,它在初始化后用用户信息和其他元数据预加载数据集。
有没有办法让apollo客户端构建多个组件请求的单个查询,并在加载组件后将其发送到graphQL服务器,而不是为每个组件发送单独的查询,并形成应用程序运行所必需的数据层?
最终有哪些其他选项可以做到这一点,并使用GraphQL使其更好,然后是当前的实现。
答案 0 :(得分:1)
Apollo客户端中的查询有一个fetchPolicy
选项,默认值为cache-first
,这意味着Apollo会在尝试网络提取之前先尝试从本地缓存中读取。如果您有多个组件请求已经提取的数据,则不会发生网络呼叫。只需确保在查询中返回所请求数据的id
字段,即使您的组件未使用它来确保正确缓存。
答案 1 :(得分:0)
假设您有以下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"
}
}
}