开始使用 Amazon API Gateway

创建免费账户

Amazon API Gateway 免费套餐包含每月 100 万次的 API 调用,最长可使用 12 个月。

问:什么是 Amazon API Gateway?

Amazon API Gateway 是一种完全托管的服务,可以帮助开发者轻松创建、发布、维护、监控和保护任意规模的 API。只需在 AWS 管理控制台中点击几下,您便可以创建可充当应用程序“前门”的 API,从后端服务访问数据、业务逻辑或功能,例如基于 Amazon Elastic Compute Cloud (Amazon EC2) 运行的工作负载、基于 AWS Lambda 运行的代码或任意 Web 应用。Amazon API Gateway 负责管理所有任务,涉及接受和处理成千上万个并发 API 调用,包括流量管理、授权和访问控制、监控以及 API 版本管理。Amazon API Gateway 没有最低费用和启动成本。您只需为收到的 API 调用以及传出的数据量付费。

问:为什么要使用 Amazon API Gateway?

答:Amazon API Gateway 为开发人员提供了一种简单灵活的完全托管服务,此服务按使用量计费,可以处理为应用程序后端创建并操作功能强大的 API 的各个方面事务。  通过 Amazon API Gateway,您可以更快速地启动新服务并降低投资,从而专注于构建核心业务服务。  Amazon API Gateway 专为帮助您处理创建和管理 API 的多个方面而构建:

1) 计量。 API Gateway 可帮助您定义用于计量和限制第三方开发人员访问 API 的计划。您可以依据每个 API 密钥定义一组计划、配置限制和设定配额限制。API Gateway 自动计量流向 API 的流量并允许您提取每个 API 密匙的使用数据。

2) 安全性。API Gateway 可为您提供多种授权访问 API 和控制服务操作访问的工具。Amazon API Gateway 使您可以利用多种 AWS 管理和安全工具(比如 AWS Identity and Access Management (IAM) 和 Amazon Cognito)来授权对您的 API 的访问。Amazon API Gateway 可以通过 AWS 用于其自身 API 的相同方法来代表您验证签名的 API 调用。借助以 AWS Lambda 函数形式编写的自定义授权命令,API Gateway 还可以帮助您验证传入不记名令牌,从而消除后端代码的授权问题。

3) 弹性。Amazon API Gateway 可帮助您通过限制来管理流量,从而让后端操作可以抵挡流量高峰。Amazon API Gateway 还通过缓存 API 调用的输出来避免每次都调用后端,这样可帮助您提升 API 性能并缩短最终用户遇到的延迟。

4) 操作监控。在 API 发布并处于使用状态后,API Gateway 便会为您提供指标控制面板,以监控对您服务的调用情况。通过与 Amazon CloudWatch 集成,Amazon API Gateway 控制面板为您提供各种后端性能指标,包括 API 调用次数、延迟数据和错误率。您可以查看 API 中每种方法的详细指标,也可以在 CloudWatch 日志中生成错误日志、访问日志或调试日志

5) 生命周期管理。 在发布了 API 之后,您通常需要构建和测试增强现有功能或添加新功能的新版本。借助 Amazon API Gateway,您可以同时操作多个 API 版本以及各个版本的多个阶段,以便在新版 API 发布之后,现有应用程序可以继续调用旧版 API。

6) 专为开发人员设计。Amazon API Gateway 使您可以快速创建 API 并为其响应分配静态内容,以降低您的应用程序的跨团队开发工作和面市时间。依赖于您的 API 的团队可以在您构建后端进程的同时开始进行开发。

问:如何开始使用 Amazon API Gateway?

使用 Amazon API Gateway,您可以快速轻松地创建自定义 API。对于简单的“Hello World”示例,请遵循以下步骤:

1. 转到 Amazon API Gateway 控制台。

2.选择现有 REST API 或者通过输入 API 的名称来新建一个。

3.  在 REST API 树视图中,单击“Create Resource”。

4.选择资源的名称,比如“cars”。

5. 选择新资源后,单击按钮新建一个方法,然后选择与此方法相关联的 HTTP 动词(例如 GET)。

6. 选择集成类型(例如,HTTP 代理),然后输入 Amazon API Gateway 应调用的 URL。

7.  定义如何使用映射模板来转换请求和响应,或者接受默认设置以传递所有请求和响应数据,而不应用任何转换。

8.  配置方法的安全设置。

9. 将新建的 API 部署到相应的阶段。

10. 在“Stage management”页面中,设置缓存和限制。

11. 在 Amazon API Gateway 控制台的“Client Platforms”选项卡中,单击按钮下载 Android、iOS SDK 或 JavaScript 库,这结库中包含用于调用 sayHello 操作的帮助程序方法。SDK 库以与调用本地方法类似的方法调用您的 API。客户端 SDK 自动处理重试,向开发人员告知网络或其他故障状况。SDK 库包含用于将客户端应用程序向您的 API 进行身份验证所需要的逻辑。

12. 将下载的 SDK 集成到您的移动应用程序中。编写用于调用您的自定义 API 的代码。例如,要在 iOS 应用程序中调用 getCar(int carId) API:

–(void)getSampleCar

{

NSString *response = [MyServiceClient getCar:1323];

NSLog( @”Response was [%@]”, response );

}

13. 运行您的应用程序。

问:我是否可以创建 HTTPS 端点?

答:可以,通过 Amazon API Gateway 创建的所有 API 都只公开 HTTPS 终端节点。Amazon API Gateway 不支持未加密的 (HTTP) 终端节点。默认情况下,Amazon API Gateway 将内部域分配给自动使用 Amazon API Gateway 证书的 API。如果您将 API 配置为以自定义域名运行,则可以为域提供您自己的证书。

问:我可以对 Amazon API Gateway 使用哪些类型的数据?

基于 Amazon API Gateway 构建的 API 可以接受通过 HTTP 发送的任何负载。典型数据格式包括 JSON、XML、查询字符串参数和请求标头。您可以为 API 响应声明任何内容类型,然后使用转换模板将后端响应更改为相应的格式。

问:Amazon API Gateway 可以与哪些后端通信?

答:Amazon API Gateway 可以用您的账户执行 AWS Lambda 函数、启动 AWS Step Functions 状态机,也可以调用在 AWS Elastic Beanstalk、Amazon EC2 上托管的 HTTP 终端节点,以及基于非 AWS 托管 HTTP 的操作 (可通过公共 Internet 访问)。 借助 API Gateway,您还可以指定一个映射模版以生成需返回的静态内容,从而帮助您在后端就绪前模拟您的 API。您还可以将 API Gateway 与其他 AWS 服务直接集成 – 例如,您可以在 API Gateway 中公开一种可直接向 Amazon Kinesis 发送数据的 API 方法。 

问:Amazon API Gateway 可以为哪些客户端平台生成 SDK?

API Gateway 为移动应用开发(通过 Android 和 iOS)生成自定义 SDK,并为 Web 应用开发(通过 JavaScript)生成自定义 SDK。一旦在 API Gateway 中定义了 API 及其模型,则您可以使用 AWS 控制台或 API Gateway API 来生成和下载客户端 SDK。

问:哪些 AWS 区域会提供 Amazon API Gateway?

请参见区域性产品和服务,了解 Amazon API Gateway 服务在不同区域的具体提供情况。

问:我可以通过 Amazon API Gateway 控制台管理哪些内容?

通过 Amazon API Gateway 控制台,您可以定义 REST API 及其关联的资源和方法,管理 API 生命周期,生成客户端 SDK 以及查看 API 指标。您还可以使用 API Gateway 控制台定义 API 使用计划、管理开发人员的 API 密匙以及配置限制和配额限制。所有相同操作均通过 API Gateway API 提供。

问:什么是 REST API

答:在 Amazon API Gateway 中,REST API 既是一组资源和方法,也是终端节点。REST API 可以部署到不同阶段并可克隆到新版本。

问:什么是资源?

资源是一种类型化对象,属于您的 API 的域。每种资源可能具有关联的数据模型、与其他资源的关系,并可能对不同方法做出响应。您也可以将资源定义为变量,以拦截多个子资源的请求。

问:什么是方法?

REST API 中的每种资源可以支持一个或多个标准 HTTP 方法。您将定义应每种资源应支持的动词(GET、POST、PUT、PATCH、DELETE、HEAD 和 OPTIONS)及其实施方法。例如,汽车资源的 GET 操作应返回一个汽车列表。要将资源内的所有方法连接到单个后端终端节点,API Gateway 还支持一种特殊的“ANY”方法。 

问:什么是使用计划?
使用计划可帮助您声明针对第三方开发人员的计划,即将访问限制到特定 API、定义限制以及请求配额限制,并将这些限制与 API 密匙关联。您还可以基于每个 API 密匙提取使用数据,以分析 API 使用情况并生成账单单据。例如,您可以创建一个基础级、专业级和企业级的计划 – 您可以将基础使用计划配置为:每天仅允许 1000 次请求,而且每秒请求次数 (RPS) 最多为 5 次。

问:Amazon API Gateway API 生命周期是什么?

答:借助 Amazon API Gateway,每个 REST API 都可以有多个阶段。阶段用于划分 API 的开发生命周期,例如,在您构建了 API 并将其部署到开发阶段后,或者当您准备好进行生产时,您可以将其部署到生产阶段。

问:阶段是什么?

答:在 Amazon API Gateway 中,阶段类似于标签,定义了部署访问路径。例如,您可以定义开发阶段,并将您的 cars API 部署到此阶段。资源可以在 https://www.myapi.com/dev/cars 中进行访问。您还可以设置直接指向阶段的自定义域名,这样您就无需使用其他路径参数了。例如,如果您将 myapi.com 设置为直接指向开发阶段,则可以在 https://www.myapi.com/cars 访问 cars 资源。 使用可通过 API 配置或映射模板访问的变量可对各阶段进行配置。

问:什么是阶段变量?
通过阶段变量,您可以定义与某个阶段相关的配置值的密钥/值对。这些值与环境变量相似,可用于配置您的 API。例如,您可以将用于方法集成的 HTTP 终端节点定义为阶段变量,并在配置 API 时使用该变量,而不是对终端节点进行硬编码,这样一来,您就可以通过相同的 API 配置将不同终端节点用于每个阶段(如开发、测试或生产阶段)。阶段变量也可通过映射模板进行访问,可用于将配置变量传递至您的 Lambda 或 HTTP 后端。

问:如果我错误地部署到某个阶段,该怎么办?

Amazon API Gateway 会保存您的部署历史记录。使用 Amazon API Gateway API 或控制台,您随时都可以将阶段回滚到先前的部署。

问:我是否可以运行同一 REST API 的多个版本?

是的。Amazon API Gateway 允许您克隆现有 API。当您准备好开始使用 API 的下一主要版本时,您可以继续同时使用版本 1 和版本 2 API。

问:我能否使用自己的 Swagger API 定义?

可以。您可以使用我们的开源 Swagger 导入程序工具将自己的 Swagger API 定义导入 Amazon API Gateway 中。利用 Swagger 导入程序工具,您可以创建和部署新的 API,并能更新现有 API。

问:如何在 API Gateway 上实现 API 创收?
您可以在 AWS Marketplace 中将 API 作为产品发布,以在 API Gateway 上实现 API 创收。首先您需要在 AWS Marketplace 中注册为卖家,然后在 API Gateway 上将您的使用计划作为产品提交。阅读此处的内容,了解有关实现 API 创收的更多信息。

问:如何在 Amazon API Gateway 上为 API 提供文档证明?

借助 API Gateway,您可以创建、更新和删除与 API 的每个部分关联的文档,例如方法和资源。您可以通过 AWS SDK、CLI、RESTful 调用来访问与文档关联的 API,或者通过在 API Gateway 控制台中直接编辑文档字符串来实现目标。文档还可以 Swagger 文件格式导入为 API 的一部分或单独存在,让您在不干扰 API 定义的情况下添加或更新文档。对于以 Swagger 文件格式导入或导出的文档,API Gateway 符合 Open API 规范

问:如何避免创建 API 中频繁发生的错误消息和其他文档的冗余副本?
除提供符合标准的 API 文档支持之外,API Gateway 还支持文档继承,只需定义文档字符串一次,然后将其用于多个位置。继承功能简化了定义 API 文档的过程,并且可以在将 API 导出为 Swagger 文件时转换为标准表示形式。

回到顶部 >>

问:如何授权对我的 API 的访问?

借助 Amazon API Gateway,您可以选择设置 API 的方法,以便要求授权。设置方法以请求授权时,您可以利用 AWS 签名版本 4 或自定义授权命令来支持您自己的不记名令牌身份验证策略。

问:AWS 签名版本 4 的工作原理是什么?

您可以像使用其他 AWS 服务一样使用 AWS 凭证(访问密钥和私有密钥)签署对您服务的请求并授予访问权限。Amazon API Gateway API 请求的签署由针对您的服务生成的自定义 API Gateway SDK 进行管理。您可以使用 Amazon Cognito 来检索与您的 AWS 账户中的某个角色相关联的临时凭证。

问:什么是自定义授权命令?

自定义授权命令是 AWS Lambda 函数。借助自定义请求授权命令,您将能够使用诸如 OAuth 之类的不记名令牌身份验证策略授予对 API 的访问权限。调用 API 后,API Gateway 会检查是否配置了自定义授权命令,然后针对传入授权令牌调用 Lambda 函数。您可以使用 Lambda 实施各种授权策略(如 JWT 验证、OAuth 提供商标注),这些授权策略可返回用于授权请求的 IAM 策略。如果授权命令返回的策略有效,API Gateway 将会缓存与传入令牌关联的策略,缓存时长为 1 小时。

问:Amazon API Gateway 能否生成要分配给第三方开发人员的 API 密钥?

可以。API Gateway 可生成 API 密匙并将其与使用计划相关联。从每个 API 密钥收到的调用会受到监控,并被添加到您可以为每个阶段启用的 Amazon CloudWatch 日志中。不过,我们建议您不要使用 API 密钥进行授权。您应使用 API 密钥来监控第三方开发人员的使用情况,并利用更强大的机制(如签名 API 调用或 OAuth)进行授权。

问:我如何解决或防止 API 威胁或滥用?

Amazon API Gateway 支持对您的 API 中的每种方法进行限制设置。您可以为 REST API 中的每个方法设置每秒的标准速率限制和突发速率限制。此外,Amazon API Gateway 还自动保护您的后端系统免受分布式拒绝服务 (DDoS) 攻击,无论攻击者是通过伪造请求(第 7 层),还是通过 SYN 洪流(第 3 层)展开攻击。

问:Amazon API Gateway 是否能在 Amazon VPC 中使用?

不是。Amazon API Gateway 终端节点对 Internet 始终公开。对后端操作的代理请求同样需要能够在 Internet 上公开访问。但是,您可以在 Amazon API Gateway 生成一个客户端 SSL 证书,以验证那些发送到您后端系统的请求是使用证书的公共密钥通过 API Gateway 发送的。

问:我能否验证到是 API Gateway 在调用我的后端?
能。Amazon API Gateway 能够生成一个客户端 SSL 证书,并让该证书的公共密钥对您可用。可以使用生成的证书来调用到您的后端,而您也可使用证书的公共密钥来验证来自 Amazon API Gateway 的调用。

问:我是否可以将 AWS CloudTrail 与 Amazon API Gateway 配合使用?

可以。Amazon API Gateway 与 AWS CloudTrail 集成,为您提供对 REST API 更改的完整可审计历史记录。为了创建、修改、删除或部署 REST API 而对 Amazon API Gateway API 进行的所有 API 调用都会记录到您 AWS 账户的 CloudTrail 中。

回到顶部 >>

问:我如何监控我的 Amazon API Gateway API?

答:Amazon API Gateway 将 API 调用次数、延迟和错误率记录到您 AWS 账户的 Amazon CloudWatch 中。您还可以通过 Amazon API Gateway 控制台中的 REST API 仪表板来查看这些指标。API Gateway 还会按第三方开发人员计量使用情况,在 API Gatreway 控制台中通过 API 提供这些使用数据。

问:我能否为 Amazon API Gateway 指标设置警报?

答:能。Amazon API Gateway 将记录信息和指标发送到 Amazon CloudWatch 中。您可以利用 Amazon CloudWatch 控制台来设置自定义警报。

问:如何设置 Amazon API Gateway 的指标?

答:默认情况下,Amazon API Gateway 在 REST API 一级监控流量。您可以视需要使用部署配置 API 或控制台屏幕为 REST API 中的每种方法启用详细指标。详细指标还会记录到 Amazon CloudWatch 中,并按 CloudWatch 费率计费。

问:我能否确定我的客户在使用的 API 版本?

可以。指标详细信息是按 REST API 和阶段进行指定。此外,您还可以为 REST API 中的每种方法启用指标。

问:Amazon API Gateway 是否提供记录支持?

可以。Amazon API Gateway 与 Amazon CloudWatch 日志集成。您可以视需要为 API 中的每个阶段启用记录。对于您的 REST API 中的每种方法,您可以设置记录的详细程度,以及是否应记录完整请求和响应数据。

问:日志多快能够提供?

答:日志、警报、错误率和其他指标均存储在 Amazon CloudWatch 中,并且几乎是实时提供。

回到顶部 >>

问:我如何能防止我的后端系统和应用程序出现流量高峰?

答:Amazon API Gateway 提供了多个级别(包括全局)的限制,并按服务调用提供。您可以设置标准速率和突发速率限制。例如,API 所有者可以为其 REST API 中的特定方法设置每秒 1000 条请求的速率限制,并能将 Amazon API Gateway 配置为在几秒内处理每秒 2000 条请求的突发速率。Amazon API Gateway 跟踪每秒请求数量。超过限制的任何请求都会收到 429 HTTP 响应。Amazon API Gateway 生成的客户端 SDK 会在收到此响应时自动重试调用。

问:是否可以限制调用 API 的各个开发人员?
是的。借助使用计划,您可以针对各个 API 密匙设置限制。

问:限制对我有什么帮助?

限制可确保 API 流量得到控制,以帮助您的后端服务保持性能和可用形。

问:Amazon API Gateway 可以在哪些级别限制传入的 API 流量?

答:可以在方法一级设置限制速率。您可以通过 Amazon API Gateway API 或者在 Amazon API Gateway 控制台中,编辑方法设置中的限制。

问:如何应用限制规则?
首先,API Gateway 会针对您的 AWS 账户限制进行检查。如果流量低于设置的账户限制,则 API Gateway 会检查您在阶段或方式上设置的限制。如果流量低于阶段限制,则 API Gateway 会应用您依据每个 API 密匙设置的使用计划限制。

问:Amazon API Gateway 是否提供 API 结果缓存?

是的。您可以通过预配置 Amazon API Gateway 缓存并指定其大小(以 GB 为单位),向 API 调用中添加缓存。缓存是针对 API 的特定阶段进行预配置。这会提升性能并减少发送到后端的流量。借助缓存设置,您可以控制如何构建缓存密钥,以及为每种方法存储的数据的生存时间。Amazon API Gateway 还公开了管理 API,可帮助您将每个阶段的缓存设为无效。

问:如果大量最终用户尝试同时调用我的 API,则发生什么情况?

如果未启用缓存并且没有应用限制,则所有请求都将传递到后端服务,直到达到所设置的账户级别限制。如果实施了限制,则 Amazon API Gateway 会削减必要的请求数量,并且仅将定义的限制发送到后端服务。如果配置了缓存,则 Amazon API Gateway 将针对可自定义的时间内的重复请求返回缓存响应,但这仅限于未达到已配置限制的情况。后端与客户端之间的这种平衡可确保支持的应用程序的 API 性能最佳。限制的请求会自动由 Amazon API Gateway 生成的客户端 SDK 重试。默认情况下,Amazon API Gateway 没有针对 API 方法设置任何缓存。

问:API 的规模如何?

Amazon API Gateway 充当您已配置的后端操作的代理。Amazon API Gateway 会自动扩展,以处理您的 API 收到的流量。Amazon API Gateway 不会任意限制对您的后端操作的调用,并且 Amazon API Gateway 控制台中的限制和缓存设置未拦截的所有请求都会发送到您的后端操作。

回到顶部 >>

问:如何对我使用 Amazon API Gateway 收费?

Amazon API Gateway 费率是每一百万 API 调用 3.5 美元,还包括传出数据的价格(以 GB 为单位)。如果您选择为您的 API 预配置缓存,则小时费率适用。有关数据传输和缓存价格的详细信息,请参阅 API Gateway 定价页面

问:对于由第三方开发人员生成的 Amazon API Gateway API 调用,应该由谁付费?

对于在 API Gateway 上调用 API 所有者的 API,将向 API 所有者收费。

问:如果缓存的数据提供了 API 响应,其是否仍会处于记账目的而被视为 API 调用?

是的。无论响应是由您的后端操作处理,还是由 Amazon API Gateway 缓存操作处理,API 调用的账单计算方式都相同。

回到顶部 >>