

# Amazon API Gateway 概念
<a name="api-gateway-basic-concept"></a>

以下部分描述有关使用 API Gateway 的介绍性概念。

**API Gateway**  <a name="apigateway-definition-apigateway"></a>
API Gateway 是一项AWS服务，支持以下操作：  
+ 创建、部署和管理 [RESTful](https://en.wikipedia.org/wiki/Representational_state_transfer) 应用程序编程接口 (API) 以便公开后端 HTTP 终端节点、AWS Lambda 函数或其他 AWS 服务。
+ 创建、部署和管理 [WebSocket](https://datatracker.ietf.org/doc/html/rfc6455) API 以公开 AWS Lambda 函数或其他AWS服务。
+ 通过前端 HTTP 和 WebSocket 终端节点调用公开的 API 方法。

**API Gateway REST API**  <a name="apigateway-definition-apigateway-api"></a>
与后端 HTTP 终端节点、Lambda 函数或其他AWS服务集成的 HTTP 资源与方法的集合。您可以在一个或多个阶段部署中此集合。通常情况下，根据应用程序逻辑将 API 资源组织成资源树形式。每个 API 资源均可公开一个或多个 API 方法，这些方法具有受 API Gateway 支持的唯一 HTTP 命令动词。有关更多信息，请参阅 [在 REST API 和 HTTP API 之间进行选择](http-api-vs-rest.md)。

**API Gateway HTTP API**  <a name="apigateway-definition-http-api"></a>
与后端 HTTP 终端节点或 Lambda 函数集成的路由和方法的集合。您可以在一个或多个阶段部署中此集合。每个路由均可公开一个或多个 API 方法，这些方法具有受 API Gateway 支持的唯一 HTTP 命令动词。有关更多信息，请参阅 [在 REST API 和 HTTP API 之间进行选择](http-api-vs-rest.md)。

**API Gateway WebSocket API**  <a name="apigateway-definition-apigateway-websocket-api"></a>
与后端 HTTP 终端节点、Lambda 函数或其他AWS服务集成的 WebSocket 路由和路由键的集合。您可以在一个或多个阶段部署中此集合。API 方法通过可以与注册的自定义域名关联的前端 WebSocket 连接进行调用。

**API 部署**  <a name="apigateway-definition-api-deployment"></a>
API Gateway API 的时间点快照。要使客户端可用，必须将部署与一个或多个 API 阶段关联。

**API 开发人员**  <a name="apigateway-definition-api-developer"></a>
拥有 API Gateway 部署的AWS账户（例如，也支持编程访问的服务提供商。）

**API 终端节点**  <a name="apigateway-definition-api-endpoints"></a>
API Gateway 中部署到特定区域的 API 的主机名。主机名的格式是 `{api-id}.execute-api.{region}.amazonaws.com`。支持以下类型的 API 终端节点：  
+ [边缘优化的 API 终端节点](#apigateway-definition-edge-optimized-api-endpoint)
+ [私有 API 终端节点](#apigateway-definition-private-api-endpoint)
+ [区域 API 终端节点](#apigateway-definition-regional-api-endpoint)

**API 密钥**  <a name="apigateway-definition-api-key"></a>
API Gateway 用于识别使用 REST 或 WebSocket API 的应用程序开发人员的字母数字字符串。API Gateway 可以代表您生成 API 密钥，也可以从 CSV 文件中导入 API 密钥。您可以将 API 密钥与 [Lambda 授权方](apigateway-use-lambda-authorizer.md)或[使用计划](api-gateway-api-usage-plans.md)一起使用来控制对 API 的访问。  
请参阅 [API 终端节点](#apigateway-definition-api-endpoints)。

**API 所有者**  <a name="apigateway-definition-api-owner"></a>
请参阅 [API 开发人员](#apigateway-definition-api-developer)。

**API 阶段**  <a name="apigateway-definition-api-stage"></a>
对您的 API 生命周期状态（例如，“dev”、“prod”、“beta”、“v2”）的逻辑引用。API 阶段由 API ID 和阶段名称标识。

**应用程序开发人员**  <a name="apigateway-definition-app-developer"></a>
应用程序创建者，可能拥有也可能不拥有 AWS 账户并与您（API 开发人员）部署的 API 交互。应用程序开发人员是您的客户。应用程序开发人员通常由 [API 密钥](#apigateway-definition-api-key)标识。

**回调 URL**  
当新客户端通过 WebSocket 连接进行连接时，您可以调用 API Gateway 中的集成来存储客户端的回调 URL。然后，您可以使用该回调 URL 从后端系统向客户端发送消息。

**开发人员门户**  <a name="apigateway-definition-developer-portal"></a>
供 API 提供者向 API 使用者共享其 API 及 API 文档的应用程序。API 被分组到产品中，产品是 REST API 端点、API 文档和补充产品文档的集合。  
请参阅 [API Gateway 门户](apigateway-portals.md)。

**边缘优化的 API 终端节点**  <a name="apigateway-definition-edge-optimized-api-endpoint"></a>
API Gateway API 的默认主机名，它部署到指定区域，并使用 CloudFront 分配以方便客户端跨AWS区域进行常规访问。API 请求将路由至最近的 CloudFront 接入点 (POP)，通常可改进不同地理位置客户端的连接时间。  
请参阅 [API 终端节点](#apigateway-definition-api-endpoints)。

**集成请求**  <a name="apigateway-definition-integration-request"></a>
API Gateway 中的 WebSocket API 路由或 REST API 方法的内部接口，在其中您会将路由请求的正文或方法请求的参数和正文映射到后端所需的格式。

**集成响应**  <a name="apigateway-definition-integration-response"></a>
API Gateway 中的 WebSocket API 路由或 REST API 方法的内部接口，在其中您会将从后端接收到的状态代码、标头和负载映射到返回到客户端应用程序的响应格式。

**映射模板**  <a name="apigateway-definition-mapping-template"></a>
使用 [Velocity 模板语言 (VTL)](https://velocity.apache.org/engine/devel/vtl-reference.html) 表示的脚本，此脚本用于将请求正文从前端数据格式转换为后端数据格式，或将响应正文从后端数据格式转换为前端数据格式。映射模板可以在集成请求中或在集成响应中指定。它们可以将运行时提供的数据引用为上下文和阶段变量。  
映射可以像[身份转换](https://en.wikipedia.org/wiki/Identity_transform)一样简单，它通过集成将标头或正文从客户端按原样传递到请求的后端。对于响应也是如此，在其中负载从后端传递到客户端。

**方法请求**  <a name="apigateway-definition-method-request"></a>
API Gateway 中 API 方法的公共接口，定义了应用程序开发人员在通过 API 访问后端时必须在请求中发送的参数和正文。

**方法响应**  <a name="apigateway-definition-method-response"></a>
REST API 的公共接口，定义应用程序开发人员期望在 API 的响应中收到的状态代码、标头和正文模型。

**模拟集成**  <a name="apigateway-definition-mock-integration"></a>
在模拟集成中，API 响应直接从 API Gateway 生成，而无需集成后端。作为 API 开发人员，您可以决定 API Gateway 响应模拟集成的方式。为此，您可以配置方法的集成请求和集成响应，以将响应与给定的状态代码相关联。

**模型**  <a name="apigateway-definition-model"></a>
指定请求或响应负载的数据结构的数据架构。生成 API 的强类型的开发工具包时需要使用模型。它还用于验证负载。模型可以方便地用于生成示例映射模板，以便开始创建生产映射模板。虽然模型很有用，但不是创建映射模板所必需的。

**门户**  <a name="apigateway-definition-portal"></a>
请参阅[开发人员门户](#apigateway-definition-developer-portal)。

**门户产品**  <a name="apigateway-definition-product"></a>
您想要共享的服务或功能。门户产品是产品 REST 端点和产品页面的集合。产品 REST 端点是门户产品的接入点，它们由 REST API 的路径和方法以及 REST API 部署到的阶段组成。产品页面是您提供的文档，用于向 API 使用者说明如何使用您的产品端点。您可以跨 AWS 账户共享产品以将其添加到门户。  
请参阅[创建产品](apigateway-portals-create-portal-product.md)。

**私有 API**  <a name="apigateway-definition-private-api"></a>
请参阅[私有 API 终端节点](#apigateway-definition-private-api)。

**私有 API 终端节点**  <a name="apigateway-definition-private-api-endpoint"></a>
一个通过接口 VPC 终端节点公开的 API 终端节点，能让客户端安全地访问 VPC 内的私有 API 资源。私有 API 与公有 Internet 隔离，只能使用已授予访问权限的 API Gateway 的 VPC 终端节点访问它们。

**私有集成**  <a name="apigateway-definition-private-integration"></a>
一种 API Gateway 集成类型，供客户端通过私有 REST API 终端节点访问客户 VPC 中的资源，而不向公有 Internet 公开资源。

**代理集成**  <a name="apigateway-definition-proxy-integration"></a>
简化的 API Gateway 集成配置。您可以将代理集成设置为 HTTP 代理集成或 Lambda 代理集成。  
对于 HTTP 代理集成，API Gateway 在前端与 HTTP 后端之间传递整个请求和响应。对于 Lambda 代理集成，API Gateway 将整个请求作为输入发送到后端 Lambda 函数。API Gateway 随后将 Lambda 函数输出转换为前端 HTTP 响应。  
在 REST API 中，代理集成最常与代理资源一起使用，以“贪婪”路径变量（例如 `{proxy+}`）与“捕获所有”`ANY` 方法相结合的方式表示。

**快速创建**  <a name="apigateway-definition-quick-create"></a>
您可以使用快速创建来简化 HTTP API 的创建。使用“快速创建”可以创建具有 Lambda 或 HTTP 集成、默认“捕获全部”路由和默认阶段（配置为自动部署更改）的 API。有关更多信息，请参阅 [使用AWS CLI 创建 HTTP API](http-api-develop.md#http-api-examples.cli.quick-create)。

**区域 API 终端节点**  <a name="apigateway-definition-regional-api-endpoint"></a>
部署到指定区域并旨在服务于同一 AWS 区域中的客户端（例如 EC2 实例）的 API 的主机名。API 请求直接以区域特定的 API Gateway API 为目标而不经过任何 CloudFront 分配。对于区域内请求，区域性终端节点会绕过到 CloudFront 分配的不必要往返行程。  
此外，您可以在区域性终端节点上应用[基于延迟的路由](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/routing-policy.html#routing-policy-latency)，从而使用相同的区域性 API 终端节点配置将 API 部署到多个区域，为每个已部署的 API 设置相同的自定义域名，以及在 Route 53 中配置基于延迟的 DNS 记录以将客户端请求路由到具有最低延迟的区域。  
请参阅 [API 终端节点](#apigateway-definition-api-endpoints)。

**路由**  <a name="apigateway-definition-route"></a>
API Gateway 中的 WebSocket 路由用于根据消息内容将传入消息定向到特定集成，例如 AWS Lambda 函数。在定义 WebSocket API 时，指定路由键和集成后端。路由键是消息正文中的一种属性。当路由键在传入消息中匹配时，将会调用集成后端。  
还可以为不匹配的路由键设置默认路由，或者设置默认路由来指定一个将消息按原样传递给执行路由和处理请求的后端组件的代理模型。

**路由请求**  <a name="apigateway-definition-route-request"></a>
API Gateway 中 WebSocket API 方法的公共接口，定义了应用程序开发人员在通过 API 访问后端时必须在请求中发送的正文。

**路由响应**  <a name="apigateway-definition-route-response"></a>
WebSocket API 的公共接口，定义应用程序开发人员期望从 API Gateway 收到的状态代码、标头和正文模型。

**使用计划**  <a name="apigateway-definition-usage-plan"></a>
[使用计划](api-gateway-api-usage-plans.md)可以提供能够访问一个或多个部署的 REST 或 WebSocket API 的选定 API 客户端。您可以通过使用计划来配置限制和配额限制，这些限制会应用到单独的客户端 API 密钥。

**WebSocket 连接**  
API Gateway 在客户端和 API Gateway 本身之间维护持久连接。API Gateway 和后端集成（如 Lambda 函数）之间没有持久连接。基于从客户端收到的消息内容，根据需要来调用后端服务。