我读到Facebook的内部服务器接受开发中的任何查询 模式,这些都是缓存的。在生产中,只有预先批准/缓存 允许查询。这被提到作为其他服务器的模型 应该采用。
有人知道他们使用什么工具吗?这个过程在某处更详细地描述了吗?
答案 0 :(得分:2)
我不知道它在facebook中是怎么回事,但我可以解释一下我是如何在GraphQL Guru中做到的。由于graphql是语言不可知的,我将在没有特定语言的情况下进行解释。
持久查询工作的方式是客户端将具有唯一ID和变量的查询发送到graphql(持久查询就绪)服务器。
{
"id": "1234",
"varibles": {
"firtName": "John",
"lstName": "Smith"
}
}
对于id,请不要使用查询的哈希值,因为这会产生不同大小的长ID名称,这会破坏目的。
在您的服务器上,创建一个与持久查询ID同名的文件,其中包含实际的graphql查询。或者将其保存在数据库中。
要获取graphql查询,您需要通过中间件拦截它。中间件通过其id检索graphql查询,并将查询传递给graphql端点。根据查询的定义方式,中间件可能需要解析它。此外,如果持久化查询ID不存在,则可以在中间件中进行白名单。
然后graphql端点正常处理查询。
您可以在此处查看nodejs示例https://github.com/otissv/guru-express-server/blob/master/src/routes/graphql-route.js