前言

API 网关是微服务入口。面试常问:

  • 网关和 Nginx 有什么区别。
  • 鉴权为什么放网关。
  • 限流怎么做。
  • 签名验签怎么设计。
  • 网关出问题会不会拖垮全站。

网关职责

flowchart TD
    A[客户端] --> B[API 网关]
    B --> C[鉴权]
    B --> D[限流]
    B --> E[路由]
    B --> F[熔断降级]
    B --> G[日志审计]
    B --> H[后端服务]

常见职责:

  • 统一入口。
  • 路由转发。
  • 认证鉴权。
  • 限流。
  • 熔断降级。
  • 黑白名单。
  • 请求日志。
  • 签名验签。

鉴权

网关通常做粗粒度身份识别:

  • Token 校验。
  • AppKey 校验。
  • 租户识别。
  • 用户上下文透传。

业务服务仍然要做细粒度权限和数据权限。

限流

限流维度:

  • IP。
  • 用户。
  • AppKey。
  • 租户。
  • 接口。

常见算法:

  • 固定窗口。
  • 滑动窗口。
  • 令牌桶。
  • 漏桶。

令牌桶更适合允许一定突发流量的场景。

签名验签

开放 API 常用签名防篡改。

常见字段:

  • appKey。
  • timestamp。
  • nonce。
  • body hash。
  • sign。

服务端要校验:

  • appKey 是否有效。
  • timestamp 是否过期。
  • nonce 是否重复。
  • sign 是否正确。

熔断降级

网关可以对异常服务做:

  • 超时控制。
  • 熔断。
  • 返回降级结果。
  • 快速失败。

但复杂业务降级通常仍要在业务服务内完成。

高频面试题

网关为什么不能只做转发?

因为企业入口需要统一鉴权、限流、安全、日志和流量治理。

鉴权放网关后服务还要鉴权吗?

要。网关做入口身份识别,服务做细粒度业务权限,避免绕过网关造成风险。

签名为什么要加 timestamp 和 nonce?

timestamp 防止旧请求长期有效,nonce 防止短时间重放。

网关如何避免成为瓶颈?

集群部署、无状态化、限流、熔断、监控和容量评估。

总结

API 网关的核心是统一入口和流量治理。面试回答要强调:网关适合做通用横切能力,业务语义仍然要在后端服务中校验。