前端analysis | 知其所以然

前后端通信协议全景手册

2025-06-04


📘 前后端通信协议全景手册(完整版)


🧱 协议类型总览

分类 协议 描述
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、设备通信、仪表面板

使用支付宝打赏
使用微信打赏

若你觉得我的文章对你有帮助,欢迎点击上方按钮对我打赏