graphql - Instagram 中的 query_hash 是什么?
问题描述
我第一次在 graphql 上工作,我看到 Instagram 对他们的查询进行哈希处理。
我搜索了一些东西,但我不知道它是否正确。哈希就像存储在缓存中的持久查询?
还是我错了?
示例:这是我的请求负载
{
"operationName":"user",
"variables":{},
"query":"query user {\n users {\n username\n createdAt\n _id\n }\n}\n"
}
这是Instagram:
query_hash: 60b755363b5c230111347a7a4e242001
variables: %7B%22only_stories%22%3Atrue%7D
(它处于 urlencode 模式)。
现在,我怎样才能散列我的查询?我使用 NodeJS 作为后端并将 js 作为前端。我想了解它是如何工作的 x)!感谢你们!
解决方案
持久化查询用于通过减少请求大小来提高 GraphQL 网络性能。
您无需发送可能很长的完整查询,而是将哈希发送到 GraphQL 服务器,该服务器将使用哈希作为键从键值存储中检索完整查询。
键值存储可以是memcached
,redis
等
Apollo 服务器带有开箱即用的自动持久查询。我建议试一试。他们已经发布了一个关于它的博客。https://blog.apollographql.com/automatic-persisted-queries-and-cdn-caching-with-apollo-server-2-0-bf42b3a313de
如果你想构建自己的解决方案,你可以使用这个包自己做散列https://www.npmjs.com/package/hash.js
推荐阅读
- dart - 为什么我会使用 StatelessWidget 而不是 StatefulWidget?
- oracle - 仅为数字序列+1选择范围(最小值,最大值)
- node.js - 连续执行任务,在 Gulp 4 中动态创建文件
- c# - 我如何使用数据绑定处理多页应用程序
- firebase-cloud-messaging - fcm.googleapis.com/fcm/send 和 fcm.googleapis.com/v1/{parent=projects/*}/messages:send 有什么区别
- python - 反转数组的比例
- firebase - 具有云功能的异步功能(异步语法错误)
- google-bigquery - BigQuery 表的架构与配方不匹配
- prolog - 断言的数据不同
- php - PHP Random Variable