防止 Graphiql 控制台发出多个内省查询
Prevent Graphiql console from issuing multiple introspection queries
我正在使用 Graphiql
组件呈现控制台并希望通过内省查询获取架构。问题在于,如果组件在第一个内省查询解决之前重新呈现(例如打开一个模式),则会触发第二个内省查询。鉴于这些查询对于后端来说代价高昂,我想避免这种情况。
有没有办法避免多次内省查询?
GraphiQL 组件接受 schema
属性:
schema
: a GraphQLSchema instance or null
if one is not to be used. If undefined
is provided, GraphiQL will send an introspection query using the fetcher to produce a schema.
您可以使用getIntrospectionQuery
获取完整的内省模式,获取内省结果,然后使用它来构建模式。
const { getIntrospectionQuery, buildClientSchema } = require('graphql')
const response = await fetch('ENDPOINT_URL', {
method: 'post',
headers: { 'Content-Type': 'application/json' },
body: { query: JSON.stringify(getIntrospectionQuery()) },
})
const introspectionResult = await response.json()
const schema = buildClientSchema(introspectionResult.data)
在渲染组件之前执行此操作,然后将模式作为道具传入。如果您的架构不会更改,您也可以将内省结果保存到文件并使用它而不是查询服务器。
我正在使用 Graphiql
组件呈现控制台并希望通过内省查询获取架构。问题在于,如果组件在第一个内省查询解决之前重新呈现(例如打开一个模式),则会触发第二个内省查询。鉴于这些查询对于后端来说代价高昂,我想避免这种情况。
有没有办法避免多次内省查询?
GraphiQL 组件接受 schema
属性:
schema
: a GraphQLSchema instance ornull
if one is not to be used. Ifundefined
is provided, GraphiQL will send an introspection query using the fetcher to produce a schema.
您可以使用getIntrospectionQuery
获取完整的内省模式,获取内省结果,然后使用它来构建模式。
const { getIntrospectionQuery, buildClientSchema } = require('graphql')
const response = await fetch('ENDPOINT_URL', {
method: 'post',
headers: { 'Content-Type': 'application/json' },
body: { query: JSON.stringify(getIntrospectionQuery()) },
})
const introspectionResult = await response.json()
const schema = buildClientSchema(introspectionResult.data)
在渲染组件之前执行此操作,然后将模式作为道具传入。如果您的架构不会更改,您也可以将内省结果保存到文件并使用它而不是查询服务器。