API设计的新格局
2026年的API设计领域已经不是简单的"REST vs GraphQL"之争,而是形成了四大范式的格局:
- REST:仍然是HTTP API的主流,但规范的REST API(真正遵循HATEOAS和Richardson成熟度模型)越来越少
- GraphQL:在需要灵活数据查询的前端场景中占据稳固地位
- gRPC:服务间通信的事实标准,正在向移动端和Web端渗透
- tRPC:全栈TypeScript的端到端类型安全方案,在TypeScript生态中快速发展
根据Postman 2026年API现状报告,这四种范式的使用率分布如下:
| API范式 | 使用率 | 同比增长 | 主要场景 |
|---|---|---|---|
| REST | 78% | -5% | 对外API、Web应用 |
| GraphQL | 32% | +3% | 移动端、复杂数据查询 |
| gRPC | 28% | +8% | 微服务间通信 |
| tRPC | 15% | +12% | 全栈TypeScript应用 |
| WebSocket | 22% | +2% | 实时通信 |
| Webhook | 45% | +5% | 事件通知 |
注意:总百分比超过100%,因为大多数组织同时使用多种API范式。
REST:老兵不死,只是转型
REST API在2026年仍然是最广泛使用的API范式,但它的形态正在发生变化。
REST的"务实化"
2026年的"REST"已经不再是Roy Fielding论文中定义的严格REST。大多数API自称REST,但实际上:
- 80%的"REST API"不使用HATEOAS
- 60%的"REST API"的端点设计本质上是RPC风格
- 只有不到10%的API真正遵循了Richardson成熟度模型的Level 3
这种"务实化"不是坏事。Stripe API和GitHub API v4(虽然GitHub也提供GraphQL)仍然是最受推崇的API设计范例,它们都没有严格遵循REST的所有约束,但提供了出色的开发者体验。
REST的最佳实践演进
2026年的REST API设计最佳实践:
- OpenAPI 3.1:已成为API文档的事实标准,结合JSON Schema 2020-12
- API版本化:从URL版本化(
/v1/)转向Header版本化或内容协商(Content Negotiation) - 分页标准化:Cursor-based分页成为主流(参考Relay Connection规范)
- 错误处理:RFC 9457(Problem Details)成为标准错误格式
- 安全:OAuth 2.1(整合了OAuth 2.0和OAuth 2.0的多个最佳实践Draft)成为标准
REST 2026:什么时候用?
- 对外公开API(第三方开发者需要简单、可缓存的接口)
- 需要HTTP缓存(CDN)的场景
- 简单的CRUD操作
- 文件上传/下载
GraphQL:从"银弹"到"合适的工具"
GraphQL在2026年经历了一个从过度炒作到理性回归的过程。
GraphQL解决了什么?
- 过度获取(Over-fetching):客户端只请求需要的数据,减少不必要的网络传输
- 欠获取(Under-fetching):一次请求获取多个资源,避免N+1查询
- 类型系统:Schema定义提供了强类型保证和自动文档生成
- 前端自主性:前端团队可以自行调整数据查询,无需后端修改
GraphQL的实际挑战
2026年,业界对GraphQL的挑战有了更清醒的认识:
1. N+1查询问题 GraphQL的resolver按字段逐个执行,导致经典的N+1查询问题。Dataloader(Facebook开源)可以缓解,但需要额外的工程投入。
2. 性能不可预测 一个看似简单的GraphQL查询可能因为嵌套过深而触发大量数据库查询,导致响应时间从毫秒级跳到秒级。查询复杂度分析(Query Complexity Analysis)和深度限制(Depth Limiting)是必需的防护措施。
3. 缓存困难 GraphQL通常使用POST请求(因为查询体太大),无法利用HTTP缓存。虽然Persisted Queries和Apollo的缓存机制可以部分解决,但比REST的HTTP缓存复杂得多。
4. 文件上传 GraphQL的Multipart Request Spec解决了文件上传问题,但比REST的multipart/form-data更复杂。
2026年GraphQL的新发展
- GraphQL over HTTP规范:2025年正式发布,标准化了GraphQL的HTTP传输方式
- Federation 2.0:Apollo Federation使GraphQL在微服务架构中更加可行
- GraphQL Yoga:The Guild开发的GraphQL服务器,支持插件化架构
- Relay 16:Meta的GraphQL客户端框架,在2026年完全重写了编译器
GraphQL 2026:什么时候用?
- 移动端应用(需要灵活的查询以节省带宽)
- 前端团队需要快速迭代且不依赖后端修改
- 数据模型复杂,客户端需要灵活的关联查询
- 微服务架构中的API网关层(BFF模式)
gRPC:服务间通信之王
gRPC在2026年已经成为微服务间通信的事实标准。根据CNCF 2026年调查,在采用微服务架构的组织中,72%使用gRPC进行服务间通信。
gRPC的核心优势
- Protocol Buffers:二进制序列化,比JSON小3-10倍,解析快5-10倍
- HTTP/2:多路复用、服务端推送、头部压缩
- 强类型契约:
.proto文件定义API,自动生成客户端和服务端代码 - 流式通信:支持Unary、Server Streaming、Client Streaming和Bidirectional Streaming四种模式
- 多语言支持:官方支持12+种语言
gRPC在Web端的突破
一直以来的一个痛点是:gRPC不能在浏览器中直接使用(因为浏览器不支持HTTP/2 Trailers)。2026年,这个问题有了多个解决方案:
- gRPC-Web:Google的官方代理方案,但需要额外的proxy
- Connect:Buf公司开发的gRPC兼容协议,同时支持gRPC、gRPC-Web和Connect协议,浏览器友好
- gRPC JSON Transcoding:Google Cloud Endpoints和Envoy支持将gRPC自动转译为REST JSON API
Connect在2026年获得了大量采用,被描述为"gRPC的体验,但适用于整个互联网"。
gRPC 2026:什么时候用?
- 微服务间通信:gRPC是不二之选
- 实时通信:Bidirectional Streaming天然适合聊天、协作编辑等场景
- 移动端与后端通信:节省带宽和电量
- 多语言环境:需要跨多种编程语言的类型安全通信
tRPC:全栈TypeScript的端到端类型安全
tRPC是2026年增长最快的API范式。它解决了REST、GraphQL和gRPC都无法完美解决的问题:全栈TypeScript项目中的端到端类型安全。
tRPC的核心理念
tRPC不需要定义Schema或IDL文件。你直接写TypeScript函数,tRPC自动推断类型并在客户端提供完全类型安全的调用:
// 服务端
const appRouter = router({
getUser: procedure
.input(z.object({ id: z.string() }))
.query(({ input }) => {
return db.user.findUnique({ where: { id: input.id } });
}),
});
// 客户端
const user = await trpc.getUser.query({ id: '123' });
// user的类型自动推断为 { id: string, name: string, ... }
// 修改服务端代码,客户端立即获得类型错误提示
tRPC的适用场景与局限
适用场景:
- 全栈TypeScript应用(Next.js + TypeScript)
- 内部工具和管理后台
- 快速原型开发
- 小到中型团队
不适用场景:
- 多语言环境(tRPC目前只支持TypeScript/JavaScript)
- 对外公开API(tRPC没有标准的跨语言客户端)
- 大型微服务架构(tRPC更适合Monolith或少量服务)
2026年API范式选型决策指南
你的API是给谁用的?
├── 外部第三方开发者 → REST (OpenAPI 3.1)
│ 理由:最广泛支持、文档最标准化、可缓存
├── 自己的前端(移动端/Web) → GraphQL 或 tRPC
│ ├── 全栈TypeScript → tRPC
│ └── 多语言或复杂数据查询 → GraphQL
├── 内部微服务通信 → gRPC
│ 理由:性能最优、强类型契约、流式支持
└── 实时通信 → WebSocket 或 gRPC Streaming
理由:双向通信、低延迟
你的团队使用什么语言?
├── 纯TypeScript → tRPC (内部) + REST (外部)
├── 多语言 → gRPC (内部) + REST (外部)
└── 移动端为主 → GraphQL + gRPC
你的性能要求?
├── 极致性能(低延迟、高吞吐) → gRPC
├── 灵活查询(减少网络往返) → GraphQL
├── 简单和可缓存 → REST
└── 端到端类型安全 → tRPC
BFF(Backend For Frontend)模式的重生
2026年,BFF(Backend For Frontend)模式在API设计中重新流行。BFF的核心思想是:为每种客户端(Web、iOS、Android)创建专属的API网关层,而不是让所有客户端共享同一个通用API。
BFF + API范式组合:
- Web BFF:tRPC或REST(SSR友好)
- iOS BFF:GraphQL(灵活查询,节省带宽)
- Android BFF:GraphQL或gRPC(节省带宽和电量)
- 后端微服务间:gRPC
这种组合使每个客户端都能获得最优的API体验,同时内部的微服务保持高性能通信。
总结
2026年的API设计没有"银弹"。REST、GraphQL、gRPC和tRPC各有其最佳适用场景,大多数组织同时使用多种API范式。关键在于:
- 根据使用场景选择API范式,而非追求"统一"
- API优先设计:先设计API契约,再实现
- 版本化和演进:API需要向后兼容的演进策略
- 可观测性:API监控、日志和追踪是生产环境的必需品
正如一位API设计专家在2026年API Conference上的总结:“好的API设计不是关于选择哪种协议,而是关于理解你的消费者——他们是机器还是人,是前端还是后端,需要性能还是灵活性。然后,为他们设计最适合的接口。”