【问题标题】:Can GraphQL Queries be named, kind of like stored procedures, and reused?GraphQL 查询可以被命名,有点像存储过程,并且可以重用吗?
【发布时间】:2017-12-25 00:17:04
【问题描述】:

我正在构建一个基于 Graphene-Django 的 GraphQL API。我的一位同事正在构建一个将使用该 API 的 Angular 客户端,他问是否有一种方法可以在服务器端以某种方式存储常用查询,以便他可以通过名称调用它们?

我还没有遇到过这样的功能,所以不确定它是否可能。

仅供参考,他正在使用 Apollo 客户端,所以这种“命名”查询可能是严格的客户端?这是他推荐给我的一个页面:http://dev.apollodata.com/angular2/cache-updates.html

罗伯特

【问题讨论】:

    标签: graphql


    【解决方案1】:

    很好的问题!我认为您正在寻找的东西称为“持久查询”。 GraphQL 规范仅概述了

    • 模式的类型系统
    • 查询的正式语言
    • 如何针对架构验证/执行查询

    除此之外,具体的优化取决于实现。有几种方法可以进行持久化查询,不同的方法可能或多或少对您的项目有帮助。

    将查询存储为字符串

    查询可以很容易地存储为字符串,惯例是使用 *.gql 文件来做到这一点。许多编辑器/IDE 甚至会为此提供语法高亮显示。要稍后使用它们,只需对它们进行 URL 编码,就可以了!由于这些字符串是“已知的”,因此您可以选择将服务器上的请求列入白名单。

    const myQuery = `
      {
        user {
          firstName
          lastName
        }
      }
    `
    
    const query = `www.myserver.com/query=${urlEncode(myQuery)}`
    

    持续查询

    对于更复杂的方法,您可以获取从项目中提取的查询(从字符串或使用构建工具),预先运行它们并将结果放入数据库中。这就是 Facebook 所做的。有很多工具可以帮助你解决这个问题,Awesome-GraphQL repo 是开始寻找的好地方。

    资源

    Check out this blog for more info on Persisted Queries

    【讨论】:

    • 我查看了,但找不到,Django 具体说明需要在服务器上更改哪些内容以支持客户端上的持久查询。有什么想法吗?
    • 看起来你在这里问了这个问题:stackoverflow.com/questions/45224911/…
    猜你喜欢
    • 2021-10-31
    • 2020-05-21
    • 1970-01-01
    • 1970-01-01
    • 2018-11-10
    • 1970-01-01
    • 1970-01-01
    • 2012-10-09
    • 1970-01-01
    相关资源
    最近更新 更多