📘 前后端通信协议全景手册(完整版)
🧱 协议类型总览
分类 | 协议 | 描述 |
---|---|---|
HTTP 请求响应 | REST、GraphQL、gRPC-Web、JSON-RPC | 前端发起请求,后端返回响应 |
实时通信 | WebSocket、SSE、MQTT | 后端主动推送消息 |
远程调用协议 | gRPC、JSON-RPC | 更偏后端间通信,但部分适用于前后端 |
事件驱动通信 | SSE、WebSocket、MQTT | 面向事件的异步处理模型 |
1️⃣ RESTful API
- 模型:请求-响应(基于 HTTP 标准)
- 数据格式:JSON(最常用)
- 特点:资源为中心、URL 语义清晰
✅ 优势:
- 简单直观,浏览器天然支持
- 支持缓存机制(如 GET 请求)
- 社区支持与工具丰富(如 Swagger)
❌ 劣势:
- 接口冗余(过多 endpoint)
- 不擅长复杂嵌套数据聚合
🛠 使用场景:
- 各类 Web / App 系统
- 中后台业务管理平台
2️⃣ GraphQL
- 模型:请求-响应(单入口 POST)
- 数据格式:JSON
- 特点:前端定义所需数据结构
✅ 优势:
- 单请求获取嵌套数据,避免多接口调用
- 类型系统完善,可自动生成文档
- 强前后端解耦能力
❌ 劣势:
- 性能优化较复杂(N+1 查询等)
- 缓存机制较弱,依赖客户端或中间层处理
🛠 使用场景:
- 需要灵活数据结构、定制字段的系统
- 多端接入(Web / App / 小程序)
3️⃣ gRPC / gRPC-Web
- 模型:请求-响应 / 流式(双向或单向)
- 数据格式:Protobuf(二进制)
- 特点:高性能、强类型、适合微服务
✅ 优势:
- 二进制更高效,节省带宽
- 强类型、自动代码生成(Proto)
- 支持客户端流 / 服务端流 / 双向流
❌ 劣势:
- 浏览器不直接支持(需 gRPC-Web + 网关)
- 前端调试相对复杂
🛠 使用场景:
- 微服务架构内部通信
- 需要高吞吐量、高性能的数据接口
4️⃣ JSON-RPC
- 模型:请求-响应(可支持双向)
- 数据格式:JSON
- 特点:轻量、函数式调用结构
✅ 优势:
- 抽象为远程函数调用
- 结构规范,解析简洁
❌ 劣势:
- 缺乏广泛标准化支持
- 不适合复杂数据聚合或大型系统接口
🛠 使用场景:
- 控制类指令、远程操作
- 使用 WebSocket 做结构化消息封装
5️⃣ WebSocket
- 模型:全双工持久连接
- 数据格式:任意(JSON、二进制)
- 特点:实时通信,客户端可收也可发
✅ 优势:
- 实时双向通信
- 适合订阅、聊天室、多人互动等场景
❌ 劣势:
- 实现复杂(心跳、断线重连、状态管理)
- 无缓存机制
🛠 使用场景:
- 聊天系统、在线协同编辑
- 多人游戏、金融/监控数据推送
6️⃣ Server-Sent Events(SSE)
- 模型:服务器 → 客户端单向推送(HTTP 流)
- 数据格式:EventStream(纯文本)
- 特点:浏览器原生支持,轻量推送
✅ 优势:
- 实现简单,浏览器兼容好
- 自动重连机制
- 基于 HTTP,部署简单
❌ 劣势:
- 单向推送,不支持客户端主动发消息
- 不支持二进制
🛠 使用场景:
- 实时进度条、状态更新
- 系统提示、轻量消息推送
7️⃣ MQTT(前端少用,但可集成)
- 模型:发布/订阅(Broker 中心)
- 数据格式:小型二进制消息
- 特点:极低带宽,嵌入式友好
✅ 优势:
- 消息可靠、有序、可持久
- 非常适合 IoT 和低功耗设备
- 可通过 WebSocket 网关让前端使用
❌ 劣势:
- 需要专门 Broker 服务
- 前端使用需额外适配(如 Paho/MQTT.js)
🛠 使用场景:
- 设备控制面板
- IoT 设备管理与数据同步
🧩 协议对比总览表
协议 | 通信模型 | 格式 | 实时性 | 双向 | 易实现 | 推荐使用场景 |
---|---|---|---|---|---|---|
REST | 请求-响应 | JSON | ❌ | ✅ | ✅✅✅ | 通用 Web 系统、后台 API |
GraphQL | 请求-响应 | JSON | ❌ | ✅ | ✅✅ | 多端数据聚合、前端定制接口 |
gRPC-Web | 请求 / 流 | Protobuf | ✅✅✅ | ✅ | ⚠️ | 高性能微服务、内部通信 |
JSON-RPC | 请求-响应 | JSON | ✅ | ✅ | ✅ | 远程控制、命令式通信 |
WebSocket | 持久双向连接 | 任意 | ✅✅✅ | ✅ | ⚠️ | 实时协作、推送、互动系统 |
SSE | 服务端单向推送 | 文本流 | ✅✅ | ❌ | ✅✅✅ | 通知、轻量状态更新 |
MQTT | 发布/订阅 | 二进制 | ✅✅ | ✅ | ⚠️ | IoT、设备通信、仪表面板 |
赏
使用支付宝打赏
使用微信打赏
若你觉得我的文章对你有帮助,欢迎点击上方按钮对我打赏