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

Posted

技术标签:

【中文标题】如何配置 Graphene-Django 以处理持久查询?【英文标题】:How to configure Graphene-Django to work with persisted queries? 【发布时间】:2017-12-26 18:04:14 【问题描述】:

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

在这篇文章中提到需要对服务器上的中间件做一些事情。我一直找不到任何关于 Graphene-Django 需要改变什么的信息。

谁能给点建议?

罗伯特

【问题讨论】:

【参考方案1】:

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

提取查询

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


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

使用提取的查询

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

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

【讨论】:

感谢您的回复。您的解释揭示了更多信息,但我仍然不知道如何将您描述的内容添加到服务器。请记住,我对石墨烯很陌生。根据您写的内容,我刚刚搜索了:graphene django whitelist queries,但它没有发现任何有用的信息。我希望其他人会提供有关此等式的服务器端部分的线索。【参考方案2】:

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

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

【讨论】:

以上是关于如何配置 Graphene-Django 以处理持久查询?的主要内容,如果未能解决你的问题,请参考以下文章

graphene-django 中的自定义参数

如何在 react 中使用 graphene-django 和 axios 将图像上传到我的服务器?

如何在graphene-django中使用别名

如何在graphene-django中使用MultipleChoiceFilter?

Graphene-Django:在模式中结合查询对象(只接受第一个参数)

如何仅向graphene-django中的用户个人资料所有者显示特定字段?