REST端点返回大量多余数据,而客户端只需要几个字段?GraphQL彻底改变了这种方式:一个端点,客户端只请求所需内容。类型化模式、subscriptions用于实时通信、Apollo用于缓存。没有过度获取和欠获取。
GraphQL是一种带有类型化模式的API查询语言和运行环境。一个端点,客户端自行决定请求哪些字段和关系。没有过度获取,没有欠获取。Queries用于读取,mutations用于写入,subscriptions用于实时通信。
GraphQL · Schema · Queries · Mutations · Apollo
GraphQL是一种声明式查询语言。客户端描述需要什么数据,并精确获取这些数据。不多一个字节。严格类型化、自省、单一端点。
类型、接口、联合类型、枚举。在模式层面进行严格验证。每个查询在执行前都会经过检查 — 错误不可能发生。
Apollo Server带有缓存和授权。Apollo Client带有InMemoryCache、乐观更新和从模式生成类型代码。
基于WebSocket的subscriptions。为聊天、通知、活动动态和协作应用提供即时更新。
GraphQL改变了游戏规则:现在由客户端决定接收什么数据。前端开发人员编写查询,精确获取屏幕所需内容。无需就每个字段与后端协调。
GraphQL是客户端和服务器之间基于严格模式的契约。我们采用schema-first设计,自动生成类型,并测试每个解析器。
模式设计 — Schema-first方法。首先进行类型、query root和mutation root的SDL描述。客户端在服务器开发开始前即获得模式。
解析器和DataLoader — 通过DataLoader进行批处理的高效解析器。N+1问题从架构层面解决,而非使用临时方案。
REST + GraphQL混合 — 结合REST用于简单CRUD操作和GraphQL用于复杂查询。统一的身份验证和授权。
Codegen和类型化 — GraphQL Codegen从模式自动生成TypeScript类型。客户端代码完全类型化,错误在编译阶段发现。
Subscriptions和实时 — 通过Apollo或graphql-ws的WebSocket订阅。聊天、通知、协作编辑 — 全部实时实现。
移动应用的GraphQL — 客户端只请求必要的字段,无过度获取。对于带宽有限的iOS和Android非常理想。
模式描述 → 生成TypeScript类型、React hooks和文档。无需手动重复。修改模式 — 类型自动更新。
订购GraphQL API — 获得灵活、类型化且高性能的数据层,加速前端开发并消除不必要的查询。
我们在编写解析器之前用SDL设计GraphQL模式。类型、关系、变更 — 前端从第一天起就看到现成的契约。
每个解析器的单元测试、模式的集成测试、使用Apollo Studio的自动部署。模式变更不会破坏客户端。
交互式文档,可直接在浏览器中执行查询。通过WebSocket实时订阅。
GraphQL — 灵活但不混乱。客户端精确获取所请求的内容,服务器保证类型和结构。前端和后端独立发展,但保持兼容 — 模式维护秩序。