AWS API Gateway(REST API)深度解析 | 作者:Joud W. Awad | 发布于 Medium

作者:API传播员 · 2025-11-12 · 阅读时间:6分钟

Amazon API Gateway)是AWS(亚马逊云平台)提供的一项服务,用于创建、发布、维护、监控和保护任何规模的REST、HTTP和WebSocket API。本文将深入解析API网关的REST API功能,并介绍其关键特性和使用场景。


什么是API网关?

API网关是一个“前门”,用于让应用程序访问后端服务的数据、业务逻辑或功能。后端服务可以是运行在Amazon EC2上的工作负载、AWS Lambda上的代码、任何Web应用程序或实时通信应用程序。API网关支持以下三种类型的API

  • REST API:支持复杂的功能,如API密钥、请求验证和集成响应。
  • HTTP API:适合低延迟和简单的API场景。
  • WebSocket API:用于实时双向通信。

本文将重点介绍REST API的功能和实现。


使用API网关创建REST API

REST API由资源方法组成:

  • 资源:逻辑实体,通过资源路径访问。例如,/incomes可以表示用户收入记录。
  • 方法:对应于标准的HTTP操作(如GET、POST、PUT、DELETE),定义了对资源的操作。

示例

假设我们有一个资源/incomes,可以定义以下方法:

  • POST /incomes:提交新的收入记录。
  • GET /incomes:获取收入记录列表。
  • PUT /incomes/{incomeId}:更新特定收入记录。
  • DELETE /incomes/{incomeId}:删除特定收入记录。

通过这些方法,客户端无需关心数据的存储和获取位置。


REST API的端点类型

API网关支持以下三种端点类型:

边缘优化端点

  • 特点:通过CloudFront将请求路由到最近的边缘位置,适合全球分布的客户端。
  • 适用场景:客户端地理位置分散时,优化响应时间。

区域端点

  • 特点:请求保持在同一区域内,减少延迟。
  • 适用场景:客户端和API位于同一区域,例如同一区域内的EC2实例调用API

私有端点

  • 特点:只能通过VPC接口端点访问,适用于需要高安全性的场景。
  • 适用场景:仅限内部网络访问的API。

集成类型

API网关支持多种集成类型,用于将API连接到后端服务:

  1. AWS集成:访问AWS服务操作。
  2. Lambda代理集成:直接将请求传递给Lambda函数。
  3. HTTP代理集成:将请求直接传递到HTTP端点。
  4. 自定义集成:提供对请求和响应的更多控制。
  5. 模拟集成:用于测试和开发,无需后端服务。

示例:Lambda代理集成

当客户端发出请求时,API网关将请求作为事件对象传递给Lambda函数,Lambda函数处理请求并返回响应。例如:

{
  "isBase64Encoded": false,
  "statusCode": 200,
  "headers": {
    "Content-Type": "application/json"
  },
  "body": "{"message": "Hello, World!"}"
}

安全性和授权

API网关提供多种安全机制:

  • IAM角色和策略:控制API的创建、管理和调用权限。
  • Lambda授权器:通过Lambda函数实现自定义授权逻辑。
  • Amazon Cognito用户池:支持基于用户身份的授权。
  • 资源策略:限制特定IP地址或VPC端点的访问。

示例:Lambda授权器工作流

  1. 客户端调用API,并传递承载令牌或请求参数。
  2. API网关调用Lambda授权器函数。
  3. 授权器函数验证请求,并返回IAM策略。
  4. API网关根据策略允许或拒绝请求。

请求验证和数据模型

API网关支持请求验证和数据模型定义:

  • 请求验证:检查请求参数是否有效且不为空。
  • 数据模型:使用JSON Schema定义有效负载的结构。

示例:数据模型

以下是一个宠物商店的示例数据模型:

{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "title": "PetStoreModel",
  "type": "object",
  "properties": {
    "id": {
      "type": "integer"
    },
    "type": {
      "type": "string",
      "enum": ["dog", "cat", "fish"]
    },
    "price": {
      "type": "number",
      "minimum": 25,
      "maximum": 500
    }
  },
  "required": ["type", "price"]
}

部署与版本管理

API网关支持通过阶段部署进行版本管理:

  • 阶段:表示API的生命周期状态(如开发、测试、生产)。
  • 部署:API的快照,用于发布到特定阶段。

示例:阶段变量

使用阶段变量可以为不同阶段配置不同的后端端点。例如:

http://${stageVariables.url}

在开发阶段,url可以指向测试服务器;在生产阶段,url可以指向生产服务器。


性能优化与缓存

API网关支持以下性能优化功能:

  • 节流限制:限制每秒请求数,防止过载。
  • API缓存:缓存响应以减少后端调用,提高响应速度。

示例:缓存设置

通过设置缓存TTL(默认300秒),API网关可以在缓存有效期内直接返回缓存的响应,而无需调用后端。


总结

AWS HTTP API还是WebSocket API,API网关都能提供高效的解决方案。

原文链接: https://medium.com/@joudwawad/aws-api-gateway-deep-dive-rest-apis-5ae16a326b3a