在 AWS 上设计 API

在 AWS 上开发应用

Ricardo Sueiras

Principal Technologist

API Gateway

 

什么是 API

 

  • Amazon API Gateway:用于构建 API 的托管服务。
  • 设计、部署、管理并保护您的 API。
在 AWS 上开发应用

Amazon API Gateway 的能力

 

API 能力

  • 实现不同类型的 API。
在 AWS 上开发应用

Amazon API Gateway 的能力

 

API 能力

  • 实现不同类型的 API。
  • 集成后端服务。
在 AWS 上开发应用

Amazon API Gateway 的能力

 

API Gateway 能力

  • 实现不同类型的 API。
  • 集成后端服务。
  • 保护 API 访问。
在 AWS 上开发应用

Amazon API Gateway 的能力

 

API Gateway 能力

  • 实现不同类型的 API。
  • 集成后端服务。
  • 保护 API 访问。
  • 节流请求以保护后端。
在 AWS 上开发应用

Amazon API Gateway 的能力

 

API Gateway 能力

  • 实现不同类型的 API。
  • 集成后端服务。
  • 保护 API 访问。
  • 节流请求以保护后端。
  • 转换请求与响应负载。
在 AWS 上开发应用

Amazon API Gateway 的能力

 

API Gateway 能力

  • 实现不同类型的 API。
  • 集成后端服务。
  • 保护 API 访问。
  • 节流请求以保护后端。
  • 转换请求与响应负载。
  • 向使用方发布 API。
在 AWS 上开发应用

Amazon API Gateway 的能力

 

API Gateway 能力

  • 实现不同类型的 API。
  • 集成后端服务。
  • 保护 API 访问。
  • 节流请求以保护后端。
  • 转换请求与响应负载。
  • 向使用方发布 API。
  • 管理 API 全生命周期:版本、部署、别名。
在 AWS 上开发应用

API 类型

  • API Gateway 支持三种 API 类型:
    • REST APIs
    • HTTP APIs
    • WebSocket APIs

 

API 类型

在 AWS 上开发应用

API Gateway 终端节点

  • 终端节点决定客户端如何访问您的 API。
  • 边缘优化:AWS 托管的 CloudFront,全球低延迟。
  • 区域:部署到特定 AWS 区域。
  • 私有:仅通过 AWS PrivateLink 访问。
  • 私有终端节点不走公网。

 

终端节点

在 AWS 上开发应用

REST APIs

  • 功能最丰富的 API Gateway 选项。
  • 基于同步请求/响应模型。

 

REST APIs

在 AWS 上开发应用

REST API 用例

 

API REST 用例

  • 需要全生命周期管理的企业级 API。
  • 需要高级安全控制的 API。
  • 面向三方开发者的生态(API Key 与使用计划)。
  • 直接集成 AWS 服务,无需 Lambda。
在 AWS 上开发应用

API Gateway 对 REST API 的支持

 

REST API 支持

  • 请求校验。
  • API Key。
  • 使用计划与限流。
  • 可配置 TTL 的响应缓存。
  • 通过 VTL 模板转换请求/响应。
  • IAM 认证(Signature V4)。
  • Lambda 授权器、Cognito 用户池。
在 AWS 上开发应用

API Gateway 对 REST API 的支持

 

 

REST API 支持

  • 支持三种终端节点:
    • 边缘优化
    • 区域
    • 私有
  • 结合 AWS WAF 防护 Web 攻击。
  • 金丝雀发布部署。
  • 通过 AWS X-Ray 与 CloudWatch 日志观测。
在 AWS 上开发应用

REST API 的取舍

  • 比 HTTP APIs 成本更高。
  • 延迟略高。

 

REST 取舍

在 AWS 上开发应用

HTTP APIs

  • 以性能与成本为优先,功能适度取舍:
    • 性能
    • 成本

 

HTTP APIs

在 AWS 上开发应用

HTTP API 用例

  • 无服务器工作负载与基于 Lambda 的 API。
  • 微服务与轻量代理型 API。
  • 对延迟敏感的应用。
  • 使用 OAuth 2.0 / OIDC 认证的 API。

 

HTTP API 用例

在 AWS 上开发应用

API Gateway 对 HTTP API 的支持

 

HTTP API 特性

  • Lambda 代理集成与授权器。
  • 原生 JWT/OIDC 授权(Cognito、Auth0、Okta)。
  • 在 API 级别内置 CORS 配置。
  • 通过 VPC Link 的私有 VPC 集成。
  • 针对请求头、查询字符串和路径的基础参数映射。
在 AWS 上开发应用

HTTP API 的取舍

 

HTTP API 限制

  • HTTP APIs 不支持:

    • API Key
    • 使用计划
    • 请求校验
    • 响应缓存
    • 使用 AWS X-Ray 的跟踪
    • VTL 负载转换

    • 仅支持:

      • 边缘或私有终端节点(仅区域)
在 AWS 上开发应用

WebSocket APIs

 

WebSocket APIs

  • 客户端与服务器双向通信。
  • 连接保持打开,不同于 REST 与 HTTP APIs。
  • 服务器可向已连接客户端推送数据。
在 AWS 上开发应用

WebSocket API 用例

  • 聊天应用。
  • 实时通知。
  • 实时看板。

 

用例

在 AWS 上开发应用

API Gateway 对 WebSocket API 的支持

  • 负载数据转换。
  • 请求校验。
  • 特殊内置路由:
    • $connect:客户端建立连接
    • $disconnect:客户端断开连接
    • $default:未匹配到路由

 

WebSocket API 特性

在 AWS 上开发应用

API 缓存

  • 缓存响应可减轻后端负载。
  • 提升 API 性能。
  • 典型场景:
    • 高频请求数据
    • 读取密集型 API
    • 减少 Lambda 调用

 

API 缓存

在 AWS 上开发应用

API 缓存

 

API 缓存响应

  • 缓存响应会在可配置的 TTL 后过期。
  • 管理陈旧数据的方法:
    • 设置缓存过期
    • 刷新缓存
在 AWS 上开发应用

API 设计最佳实践:清晰的资源命名

 

API 设计 - 名词

  • 路径应表示资源,而非动作。
  • 用名词,不用动词。
  • 推荐:
    • GET /orders/123
  • 避免:
    • GET /getOrder/123
在 AWS 上开发应用

API 设计最佳实践:版本管理

 

API 版本管理

  • 通过版本化让 API 随时间安全演进。
  • 避免影响现有客户端。
  • 常见方式:
    • URI 版本:GET /v1/orders
    • 查询参数:GET /orders?version=1
    • HTTP 头:Accept-Version: v1
在 AWS 上开发应用

API 开发者门户

  • 通过门户网站发布与共享 REST API。
  • 为 API 使用方提供文档。
  • 关键特性:
    • API 文档(Swagger 文件)
    • 使用方接入
    • SDK 下载
    • API Key 注册与订阅流程

 

API Gateway 门户

在 AWS 上开发应用

OpenAPI 规范

  • OpenAPI(Swagger):描述 REST API 的标准方式。
  • API Gateway 可导入与导出 OpenAPI 规范。

 

API Gateway 的 Swagger 支持

在 AWS 上开发应用

让我们一起练习吧!

在 AWS 上开发应用

Preparing Video For Download...