代码之家  ›  专栏  ›  技术社区  ›  stoebelj

防止Graphiql控制台发出多个内省查询

  •  1
  • stoebelj  · 技术社区  · 7 年前

    我正在使用 Graphiql 组件来呈现控制台并希望通过内省查询获取架构。问题是,如果在解决第一个内省查询之前重新呈现组件(例如,打开一个模式),则会触发第二个内省查询。考虑到这些查询对于后端是昂贵的,我想避免这种情况。

    有没有办法避免多重内省查询?

    0 回复  |  直到 7 年前
        1
  •  1
  •   stoebelj    7 年前

    GraphiQL组件接受 schema 道具:

    架构 :GraphQLSchema实例或 null 如果不使用的话。如果 undefined 提供了,GraphiQL将使用fetcher发送内省查询以生成模式。

    你可以用 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)
    

    在呈现组件之前执行此操作,然后作为道具传入架构。如果您的模式不会改变,您也可以将内省结果保存到一个文件中,并使用该文件而不是查询服务器。

    推荐文章