GraphQL查询可以命名、类似于存储过程并重用吗?

GraphQL查询可以命名、类似于存储过程并重用吗?,graphql,Graphql,我正在构建一个基于Graphene Django的GraphQL API。我的一位同事正在构建一个将使用API的Angular客户端,他问是否有一种方法可以在服务器端以某种方式存储经常使用的查询,以便他可以直接按名称调用它们 我还没有遇到过这样的功能,所以我不确定这是否可能 仅供参考,他使用的是Apollo客户端,所以这种“命名”查询可能是严格的客户端查询?这是他介绍给我的一页: 罗伯特好问题!我认为您正在寻找的东西叫做“持久化查询” 模式的类型系统 用于查询的形式语言 如何根据模式验证/执行

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

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

仅供参考,他使用的是Apollo客户端,所以这种“命名”查询可能是严格的客户端查询?这是他介绍给我的一页:


罗伯特

好问题!我认为您正在寻找的东西叫做“持久化查询”

  • 模式的类型系统
  • 用于查询的形式语言
  • 如何根据模式验证/执行查询
除此之外,具体的优化取决于实现。有几种方法可以进行持久化查询,不同的方法可能或多或少对您的项目有所帮助

将查询存储为字符串

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

const myQuery = `
  {
    user {
      firstName
      lastName
    }
  }
`

const query = `www.myserver.com/query=${urlEncode(myQuery)}`
持久化查询

对于更复杂的方法,您可以从项目中提取查询(从字符串或使用构建工具),预运行它们并将结果放入数据库中。这就是Facebook所做的。有很多工具可以帮助你做到这一点,回购协议是一个开始寻找的好地方

资源


好问题!我认为您正在寻找的东西叫做“持久化查询”

  • 模式的类型系统
  • 用于查询的形式语言
  • 如何根据模式验证/执行查询
除此之外,具体的优化取决于实现。有几种方法可以进行持久化查询,不同的方法可能或多或少对您的项目有所帮助

将查询存储为字符串

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

const myQuery = `
  {
    user {
      firstName
      lastName
    }
  }
`

const query = `www.myserver.com/query=${urlEncode(myQuery)}`
持久化查询

对于更复杂的方法,您可以从项目中提取查询(从字符串或使用构建工具),预运行它们并将结果放入数据库中。这就是Facebook所做的。有很多工具可以帮助你做到这一点,回购协议是一个开始寻找的好地方

资源


我查看了Django特定的指令,但没有找到这些指令,说明服务器上需要更改哪些内容才能支持客户端上的持久化查询。有什么想法吗?看起来您在这里问了这个问题:我查看了Django特定的指令,但找不到该指令,说明服务器上需要更改哪些内容以支持客户端上的持久化查询。有什么想法吗?看起来你在这里问了这个问题: