REST API vs GraphQL
拥有 20 多年历史的 REST 对决源自 Facebook 的 GraphQL。为移动应用后端选择 API 设计范式时,该如何取舍?
面向 TypeScript 的端到端类型安全 API
自 2000 年以来的语言无关行业标准
| 分类 | tRPC | REST |
|---|---|---|
| 性能 | 9/10 | 9/10 |
| 学习难易度 | 8/10 | 10/10 |
| 生态系统 | 8/10 | 10/10 |
| 社区 | 9/10 | 10/10 |
| 就业市场 | 7/10 | 10/10 |
| 面向未来 | 8/10 | 8/10 |
// server/router.ts
export const appRouter = t.router({
getUser: t.procedure
.input(z.object({ id: z.string() }))
.query(async ({ input }) => {
return await db.user.findUnique({ where: { id: input.id } });
}),
});
// client (type-safe, autocomplete!)
const user = await trpc.getUser.query({ id: "123" });
// user.name, user.email — fully typed// OpenAPI-first
GET /api/users/:id
Response: { "id": "123", "name": "Ali", "email": "..." }
// Client (manual type def veya codegen)
const res = await fetch("/api/users/123");
const user: User = await res.json(); // Manual type assertionTypeScript 全栈单体仓库(monorepo)→ 选择 tRPC(类型安全的黄金标准)。公开 API 且客户端语言多样 → 选择 REST。GraphQL 是折中方案——类型安全且语言无关,但复杂度较高。混合方案:内部使用 tRPC,对外提供 REST 门面。
获取免费咨询GraphQL 属于另一种设计范式——查询语言。tRPC 与 REST 之争是 TypeScript 与通用方案之争,GraphQL 可以作为混合策略的一部分。