1. 背景

2022 年 11 月正式掌管 Twitter 的马斯克发推批判 Twitter 开发团队:Twitter 因批量执行 RPC 调用,导致非美国地区的用户访问延迟较高。

musktwitter.png

随后,Twitter 员工对其进行反击,要求马斯克学习 GraphQL 的工作原理。

musktwitter-reply.png

新闻源地址:https://view.inews.qq.com/a/20221114A041F400

那么,究竟孰是孰非?下面是博主整理的架构图。

demoarch.jpg

可见,在公网上,用户只向 GraphQL 服务发送 1 个请求。在内部网络中,GraphQL 服务批量地执行 N 个 RPC(或 HTTP)请求。并非马斯克所描述的那样,用户通过公网批量地向推特的服务发送 N 个 RPC 请求。那么 GraphQL 是什么呢?


2. GraphQL

GraphQL 既是一种用于 API 的查询语言,也是一个满足你数据查询的运行时。 GraphQL 对你的 API 中的数据提供一套易于理解的完整描述,使得客户端能够准确地获得它需要的数据,而且没有任何冗余,也让 API 更容易地随着时间推移而演进,还能用于构建强大的开发者工具。

以上内容来自于:https://graphql.cn/

GraphQL 的中文入门文档,请参阅 https://graphql.cn/learn/;英文入门文档,请参阅 https://graphql.org/learn/

可见,GraphQL 可以充当客户端和现有系统之间的接口,能够很方便地集成现有系统。

gql-integrate.jpg


3. Go GraphQL 快速入门

关于各种编程语言的 GraphQL 实现,请参阅官方网站。接下来我们看一个 Go graphql-go/graphql 示例。

3.1. 环境说明

3.2. 创建测试项目

3.3. 项目结构

go.mod:

gql_type/mutation_type.go:

gql_type/post.go:

gql_type/post_type.go:

gql_type/query_type.go:

gql_type/user.go:

gql_type/user_type.go:

main.go:

schema.gql:

3.4. Try it out

运行 GraphQL 服务:

在另一个终端运行测试:


参考文档