2017-07-19 60 views
1

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

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

仅供参考他正在使用Apollo客户端,所以也许这样的“命名”查询严格来说是客户端?这里有一个页面,他叫我去:http://dev.apollodata.com/angular2/cache-updates.html

罗伯特

回答

0

很好的问题!我认为你正在寻找的东西叫做“持续查询”。该GraphQL规格只有概括

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

除此之外,执行查询时,它是由执行以进行特定的优化。有几种方法可以执行持久查询,而不同的方法可能对您的项目或多或少有帮助。

贮藏查询作为一个String

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

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

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

持久化的查询

对于更复杂的方法,你可以采取从项目中提取的查询(无论是从字符串或使用构建工具),预运行它们,并把结果在DB中。这就是Facebook所做的。有很多工具可以帮助你解决这个问题,​​回购是一个开始寻找的好地方。

资源

Check out this blog for more info on Persisted Queries

+0

我看了看,也没有找到,什么需要Django的具体说明,在服务器上进行更改,以支持持久化的查询在客户端上。有什么想法吗? –

+0

看起来像你问这个问题在这里: https://stackoverflow.com/questions/45224911/how-to-configure-graphene-django-to-work-with-persisted-queries – Baer

相关问题