graphql - 如何配置 Graphene-Django 以处理持久查询?

标签 graphql apollo-client graphene-python

看来我的公司将继续推进 Apollo 客户端的持久查询,如下所述:https://dev-blog.apollodata.com/persisted-graphql-queries-with-apollo-client-119fd7e6bba5

在本文中提到需要对服务器上的中间件进行一些操作。我无法找到任何有关 Graphene-Django 需要更改的信息。

谁能提供一些建议吗?

罗伯特

最佳答案

持久化查询不是 GraphQL 规范的一部分,因此可以通过多种方式实现。以下是您可能希望如何在服务器上执行此操作的一些示例:

提取查询

截至撰写本文时,您可以使用 Relay Modern、Apolo 客户端等提取静态查询。它们的工作方式都相似,所以我将使用 Apollo PersistGraphQL举个例子。在您的构建中,您需要在 src 目录上运行 persistgraphql 命令来提取静态查询。此命令的结果将是一个 JSON 文件,其中填充有查询、字符串和数字作为值。

{
  "
  { 
    author {
      firstName
      lastName
    }
  }
  ": 9,
  "
  query otherQuery {
    person {
      firstName
      lastName
    }
  }
  ": 10
}

使用提取的查询

从这里,您有几个选择。一旦您的服务器了解所有可能的查询,它就可以为 JSON 文件中提供的值提供接口(interface),也可以将其了解的查询列入白名单。如果您的服务器仅提供值的接口(interface)(上例中的 myserver/api/9myserver/api/10),您需要确保您的客户端应用程序通过使用相同的 JSON 文件将其查询映射到商定的 ID。或者,您可以使用该文件来防止执行意外查询,而无需以任何方式修改客户端。

如何具体设置服务器来使用此 JSON 文件取决于您。有些人会预先执行一组已知查询并将它们放入像 Redis 这样的快速数据存储中。有些人严格使用它来防止未经授权的查询。至于如何使用 Django-Graphene 完成此操作,据我所知,没有开箱即用的解决方案,但使用像上面这样的提取的键/值存储应该可以为您的团队提供一系列好的解决方案选项。

关于graphql - 如何配置 Graphene-Django 以处理持久查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45224911/

相关文章:

typescript - 将类型分配给 Maybe 类型的嵌套类型的属性

graphql - gatsby-source-contentful 不适用于 gatsby-transformer-remark

graphql - ApolloBoost 被初始化为不支持的选项 :

graphql - 我应该如何解决 Graphite 烯中带有前导下划线的字段?

python - 将 SQL 查询限制在 Graphene-SQLAlchemy 中定义的字段/列

javascript - Relay-Modern FragmentContainer 数据未填充

reactjs - Gatsby 插件图像 : Missing image prop after updating Gatsby Client

caching - 如何从apollo缓存中删除嵌套对象?

reactjs - 如何在父组件重新渲染时强制 Apollo Query 组件重新运行查询

django - Graphite 烯 Django : Change field names