标准答案
- REST 基于资源、HTTP 方法和状态码,缓存、代理、调试和开放生态成熟,适合公共 API、常规客户端接口和资源化业务。
- RPC 以方法调用和强契约为中心,适合服务间低延迟调用、内部命令和需要明确接口定义的场景,常与 Protobuf 等格式配合。
- GraphQL 允许客户端按需声明字段并一次查询多个关联对象,适合页面聚合数据复杂、客户端类型多且前端需要减少往返的场景。
- GraphQL 需要处理查询复杂度、字段级权限、N+1、缓存和可观测性;RPC 需要治理版本、超时和服务发现;REST 也需要防止接口过度碎片化。
- 同一系统可以并存多种风格,例如外部 REST、内部 RPC、面向复杂前端聚合的 GraphQL。
题目解析
接口风格不是技术先进程度的排序。关键是让调用者清楚能力边界,让团队能做版本、认证、限流、监控和故障隔离。
客户端为了少发请求并不自动意味着应使用 GraphQL;聚合 BFF、批量接口或更好的资源设计也可能更简单。
常见误区
- 把 REST、RPC、GraphQL 看成只能三选一的架构立场。
- 因为 GraphQL 能自由选字段,就忽略查询成本、权限和缓存治理。
- 只按序列化性能选 RPC,却没有处理跨团队接口演进。