如何配置Graphene-Django来处理持久化查询?

时间:2017-07-20 20:49:46

标签: graphql apollo-client graphene-python

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

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

任何人都可以提供任何建议吗?

罗伯特

2 个答案:

答案 0 :(得分:2)

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

提取查询

截至撰写本文时,您可以使用Relay Modern,Apolo Client等提取静态查询。它们都以类似的方式工作,因此我将以Apollo PersistGraphQL为例。在构建中,您需要在src目录上运行persistgraphql命令以解压缩静态查询。此命令的结果将是一个JSON文件,其中包含查询,字符串和数字作为值。

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

使用提取的查询

从这里,你有几个选择。一旦您的服务器知道所有可能的查询,它可以提供JSON文件中提供的值的接口,也可以将它知道的查询列入白名单。如果您的服务器仅提供值的接口(上例中的myserver/api/9myserver/api/10),则需要确保您的客户端应用将其查询映射到商定的ID通过让它使用相同的JSON文件。或者,您可以使用该文件来防止在不修改客户端的情况下执行意外查询。

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

答案 1 :(得分:0)

您可以检查Graphene Django的持久查询

https://github.com/flavors/django-graphql-persist

相关问题