无服务器 API 构建 - 用 Amazon API Gateway 实现可扩展的 API 基础设施

解析利用 Amazon API Gateway 和 Lambda 构建无服务器 API 的方法。

无服务器 API 的概念与 API Gateway 的定位

API 是现代应用的核心,承担前端与后端、微服务间、外部合作伙伴的连接。Amazon API Gateway 是创建、发布和管理 REST API、HTTP API、WebSocket API 的全托管服务。具备每秒处理数十万请求的能力,流量激增时自动扩展。API Gateway 的内部架构以管道方式处理请求接收、认证授权、限流、后端调用、响应转换各阶段。这种设计使各阶段可独立配置和优化,以声明方式管理 API 的整个生命周期。在本地运行 API 服务器时,需要构建 Nginx 或 Kong 等反向代理、管理 SSL 证书、配置负载均衡器、设计扩展方案。API Gateway 以托管方式提供所有这些,让您专注于 API 设计和业务逻辑实现。

REST API 与 HTTP API 的选择

API Gateway 提供 REST API 和 HTTP API 两种类型。REST API 提供完整的 API 管理功能,包括 API 密钥管理、使用量计划、请求/响应转换 (VTL 模板)、缓存、WAF 集成、请求验证等高级功能。HTTP API 比 REST API 成本最多低 71%,延迟也更低,最适合简单 API 和代理集成。HTTP API 原生支持 OIDC 和 OAuth 2.0 的 JWT 授权器,易于与 Cognito 或 Auth0 等身份提供商集成。费用方面,HTTP API 每 100 万请求 1.29 USD,REST API 每 100 万请求 4.25 USD。以下是选择判断标准。 ``` # 选择 HTTP API 的情况 - 仅需 Lambda 代理集成 - JWT 认证即可满足 - 优先成本优化 # 选择 REST API 的情况 - 需要 API 密钥 + 使用量计划 - 需要请求/响应转换 - 需要 WAF 集成或缓存 - 需要请求验证 ``` REST API 的 API 缓存功能可选择 0.5 GB 到 237 GB 的缓存容量,减少对后端的请求,同时实现响应时间缩短和成本削减。

认证授权与 API 安全

API Gateway 提供多层安全功能。使用 Lambda 授权器可实现自定义认证授权逻辑,支持 JWT 令牌、OAuth、SAML 等任意认证方式。与 Cognito 用户池集成,仅用 API Gateway 即可构成包含用户注册、登录、MFA、令牌管理的完整认证流程。资源策略可限制来自特定 IP 地址、VPC 端点、AWS 账户的访问。使用量计划和 API 密钥可实现每个外部合作伙伴的速率限制和配额管理。与 AWS WAF 集成可添加 SQL 注入、XSS、DDoS 攻击防护。还支持双向 TLS (mTLS) 认证,实现客户端证书的双向认证。

WebSocket API 与实时通信

API Gateway 的 WebSocket API 以无服务器方式实现双向实时通信。适用于聊天应用、实时仪表板、游戏多人通信、IoT 设备控制等需要持久连接的用例。WebSocket API 自动管理连接,Lambda 函数处理 $connect、$disconnect、$default 各路由事件。将连接 ID 保存到 DynamoDB,可实现向特定客户端发送消息或广播。WebSocket API 支持最长 2 小时空闲超时和最长 24 小时连接持续时间。费用为每 100 万消息 1.14 USD,每 100 万分钟连接时间 0.285 USD。API Gateway 的 WebSocket API 完全按需计费,无连接时段成本为零。 要从基础到应用系统学习无服务器 API,可参考相关书籍 (Amazon)

API 的部署与生命周期管理

API Gateway 内置 API 版本控制和阶段管理。使用阶段变量,可为 dev、staging、prod 各环境指定不同的后端 Lambda 函数或端点,将环境配置从 API 定义中分离。金丝雀发布功能可将部分流量 (如 10%) 导向新版本 API,确认无问题后逐步迁移到 100%。使用 SAM (Serverless Application Model) 的 IaC 管理,可在一个模板中声明式管理 API 定义、Lambda 函数和 IAM 角色。 ```yaml Resources: ApiFunction: Type: AWS::Serverless::Function Properties: Handler: index.handler Runtime: nodejs20.x Events: GetItems: Type: HttpApi Properties: Path: /items Method: GET ``` 与 CloudWatch 指标集成,可实时监控 API 延迟、错误率、请求数,异常时发出告警。与 X-Ray 集成,可追踪从 API Gateway 到 Lambda、DynamoDB 的请求全路径,定位性能瓶颈。

API Gateway 的费用

HTTP API 每 100 万请求约 1.00 美元,REST API 约 3.50 美元。WebSocket API 每 100 万消息约 1.00 美元加连接时间计费。结合 Lambda 费用 (每 100 万请求约 0.20 美元 + 执行时间) 估算无服务器 API 整体成本。将 HTTP API 作为默认选择,仅在需要 WAF 集成或使用量计划时选择 REST API 来优化成本。

总结 - 无服务器 API 基础设施的选择

Amazon API Gateway 作为无服务器 API 基础设施,全面支持 REST、HTTP、WebSocket 三种 API 类型。HTTP API 每 100 万请求 1.29 USD 的低成本、REST API 的高级管理功能、WebSocket API 的按需计费实时通信,根据用例选择使用可构建最优 API 基础设施。