1. API 网关概述:定义、作用、发展历程

1.1 到底什么是 API 网关?

说白了,API 网关就是系统对外的“总闸门”。

所有客户端请求——不管是手机 App、网页还是第三方服务——都先打到网关。然后由网关决定:这个请求该转发给哪个后端服务,要不要做身份校验,要不要限流。

我习惯把网关理解成“系统的门卫+前台”的组合体。门卫查证件,前台做路由转发。

技术定义:API 网关是一个位于客户端与后端服务之间的中间层服务器。它负责请求路由、协议转换、认证授权、限流熔断、日志监控等横切关注点。

举个例子。你开发了一个电商系统,订单服务、库存服务、支付服务各自独立。如果没有网关,客户端就要分别调用这些服务。有了网关,客户端只管往网关发请求,网关帮你搞定后面的一切。

小提示:我个人习惯把网关看作“微服务的入口代理”。它不是在架构里“多了一道”,而是帮你把“不该客户端干的事”收拢到一起。

1.2 API 网关到底解决了什么问题?

让我从实战角度给你拆解一下。网关的核心作用可以归纳为四大类:

类别 具体作用 真实场景
请求路由 根据 URL、Header 等条件将请求分发到对应后端 订单接口 /api/order 路由到订单服务
安全防护 身份认证、权限校验、IP 白名单、防注入 校验 JWT ,拦截未授权的访问
流量治理 限流、熔断、降级、重试 突发流量下只允许 1000 QPS 通过
协议转换 HTTP 转 gRPC、WebSocket 转 HTTP、数据格式映射 前端需要 JSON,后端返回 Protobuf
监控与日志 全链路跟踪、访问日志、指标采集 记录每次请求的耗时时长和状态码

你想想看,如果没有网关,这些功能就要分散到每个微服务里去实现。每个服务都得写一遍认证、限流、日志……那得多累?

⚠ 我曾经踩过的坑:早期做微服务时没有网关,每个服务自己管理 校验。后来换了认证策略,需要在所有服务里逐个改代码。要是当初上了网关,改一个地方就行。

1.3 发展历程:从单体到云原生

API 网关不是一天长成现在这样的。我把它分为三个阶段来讲。

第一阶段:单体时代的“反向代理”

早期 Web 应用是单体架构,前端页面直接请求后端。那时候 Nginx、Apache 扮演的就是“反向代理”角色——把/static 路径映射到静态文件目录,把 /api 路径转发到应用服务器。

但坦白讲,那时的反向代理只做了路由和负载均衡。没什么认证、限流、协议转换的概念。

第二阶段:微服务兴起后的“API 网关”

2014 年左右,微服务架构开始流行。大家发现服务多了之后,客户端直接调用多个服务实在太痛苦。于是出现了专门的 API 网关产品。

比如 Netflix 开源的 Zuul 1.0,就是这方面的早期代表。它能做统一鉴权、路由聚合、限流降级。我记得当时在 Zuul 里写过滤器来处理 JWT 校验,每写一个过滤器就得重启网关……那时候还没热加载的概念。

关键的转折点:Kong、APISIX 等基于 OpenResty/Lua 的网关出现后,插件化、热更新、高性能成为主流。不再需要重启网关来加载新规则。

第三阶段:云原生时代的“服务网格入口”

到了 2018 年之后,Kubernetes 成了事实标准。API 网关开始和 Ingress Controller 结合。比如 Kong Ingress Controller、APISIX Ingress Controller。

更关键的是,Service Mesh 的兴起让网关的定位发生了微妙变化。Istio 的 Ingress Gateway 负责入口流量,Sidecar 负责服务间流量。此时网关不再是“全权代理”,而变成了网格的一部分。

为什么会这样?因为云原生环境要求网关能感知服务注册、动态路由、金丝雀发布。传统网关根本做不到。

1.4 核心知识图谱

这一章的内容逻辑,我用一张图帮你理清。

API 网关核心知识体系 API 网关 定义:总入口代理 作用:统一治理 发展:三阶段演进 请求入口 协议转换 路由分发 认证限流 日志监控 反向代理 微服务网关 网关不是“多一层”,而是“统一一层” 它把分散在服务里的横切关注点集中管理,降低维护成本 2000s · 反向代理时代 2014–2018 · 微服务网关时代 2019+ · 云原生网关时代 每个阶段的核心目标:从“能通” → “能管” → “能感知”

1.5 小结:这一章你该带走什么?

  • 定义上:API 网关是微服务架构的“总入口代理”。它不等同于反向代理,功能范围广得多。
  • 作用上:路由、安全、流量治理、协议转换、监控——这五件事最好由网关统一处理,不要分散到各个服务里。
  • 发展上:从反向代理到微服务网关再到云原生网关,本质是在应对“服务越来越多、流量越来越复杂”的现实。

给新手的建议:不要一上来就追求最复杂的网关方案。先问自己三个问题——我的服务拆成几块了?是否需要统一鉴权?流量规模有多大?然后选择合适的网关。我个人用过 Nginx、Zuul、Kong,到现在习惯用 APISIX。技术选型没有银弹,只有最合适的。