gRPC 基于 HTTP/2 和 Protobuf,支持流式、强类型和代码生成,适合内部服务间高性能通信;REST 基于 HTTP/JSON,简单、通用、浏览器友好,适合公开 API 和简单集成。内部高并发/流式选 gRPC,公开/浏览器/简单场景选 REST。
| 维度 | gRPC | REST |
|---|---|---|
| 协议 | HTTP/2 | HTTP/1.1/2 |
| 数据格式 | Protobuf(二进制) | JSON/XML 等 |
| 接口定义 | .proto + 代码生成 |
OpenAPI/文档 |
| 流式 | 双向流、服务端流 | 通常请求-响应 |
| 浏览器支持 | 需 gRPC-Web/代理 | 原生 |
| 性能 | 高,序列化紧凑 | 较好,文本较大 |
| 调试 | 需要工具/proto | curl/浏览器直观 |
| 缓存 | 需自行设计 | HTTP 缓存成熟 |
grpcurl -plaintext localhost:50051 list
grpcurl -d '{"id":1}' localhost:50051 app.UserService/Get
curl -s http://localhost:8080/api/users/1
grpcurl — gRPC 调试curl — REST 调试protoc — Protobuf 编译