API Gateway 架构
API Gateway 是一个 API 管理系统,可为您的 API 提供管理、监控和身份验证功能。API Gateway 的组件包括:
- API Gateway:用于管理已部署 API 的所有方面
- Service Control:用于应用 API 管理规则。
- Service Management:用于管理 API 配置
- gcloud CLI:用于部署和管理 API
- Google Cloud 控制台:用于日志记录、监控和共享
架构
以下是 API Gateway 涉及的主要组件的简要图表:
在此图中:
API 提供商负责在 API Gateway 上创建和部署 API。每个 API 由写入为 OpenAPI 2.0 规范的文件定义。
OpenAPI 规范定义 API 的 REST 端点的公开网址、API 访问的后端服务以及 API 的任何其他特征(例如身份验证、数据格式和响应选项)。
API 客户端向托管在 API Gateway 上的 API 发出 REST 请求,以访问后端服务。API 客户端可以是任何能够进行 REST 调用的应用,例如浏览器、移动应用或 Web 应用。
API 客户端只需要知道 API 的网址、请求动词(例如
GET
、PUT
、POST
、DELETE
)、任何身份验证要求和发送到 API 或从 API 接收的任何数据的格式。API 客户端不需要了解后端实现的任何信息。实际上,可以将 API Gateway 上托管的单个 API 配置为根据请求中传递的信息访问不同的后端。
API Gateway 组件
API Gateway
API Gateway 提供完全托管的按用量计费解决方案,用于托管您的 API。API Gateway 通过在所有服务之间保持一致且定义明确的 REST API 来提供对后端服务的安全访问,而不考虑服务实现。
API Gateway 与 Google Cloud 集成,因此您可以使用在任何其他 Google Cloud 产品中使用的同一开发、监控、日志记录和跟踪工具。
如果您要连接到 Google Cloud 外部托管的后端服务,您仍然可以利用所有 Google Cloud 服务,包括用于控制对 API 的访问权限的身份验证和授权服务。
Service Control API
Service Control API 会在运行时应用 API 管理规则,例如 API 密钥身份验证、监控和日志记录。Service Control 提供以下方法:
- 检查:核查身份验证和 API 密钥,并指示是否应允许调用
- 报告:将日志记录和监控记录报告给系统
Service Management API
您可以使用 OpenAPI 规范来定义 API。然后,使用 gcloud CLI 将 OpenAPI 规范上传到 Service Management,以创建 API 配置。其他与配置相关的任务也在此处进行,例如与其他开发者共享 API、在不同项目中启用或停用 API 以及生成 API 密钥。
gcloud CLI
gcloud CLI 提供了 gcloud 命令行工具,可用于调用各种 Google Cloud 服务。您可以使用 Google Cloud CLI 上传 OpenAPI 规范以创建 API 配置,然后将 API 配置部署到 API Gateway。
Cloud 控制台
Google Cloud 控制台是 Google Cloud 的图形界面。使用 Google Cloud 控制台公开 Service Control 记录的监控和日志记录数据、配置身份验证和授权,以及让开发者生成用于调用 API 的 API 密钥。
处理 API 请求
API 配置中有两种类型的端点:
- API 端点:定义客户端用来使用您的 API 的公开端点。
- 后端端点:定义 API 用于连接到后端服务的端点。安全设置(如 HTTP 或 HTTPS 访问)由后端服务的实现定义。
对 API 端点的请求会传递给后端端点,包括作为请求的一部分传递的所有数据。来自后端服务的响应(包括该服务返回的任何数据)会传递回客户端。
请求路由
收到请求时:
API Gateway 为 Cloud Trace 创建跟踪令牌。
API Gateway 将传入请求的路径与目标 API 相匹配。找到匹配路由后,API Gateway 会对指定的 API 执行所有身份验证步骤。
如果需要验证 JWT,API Gateway 会使用相应的签名者公钥验证身份验证,并验证 JWT 中的受众字段。如果需要 API 密钥,API Gateway 会调用 Service Control API 来验证密钥。
Service Control 会查找密钥以对其进行验证,并确保与密钥关联的项目已启用 API。如果密钥无效或项目尚未启用该 API,则调用会被拒绝并通过 Service Control API 进行记录。
如果 Service Control 成功验证密钥,则请求将与所有原始标头和一个 JWT 验证标头(如果适用)一起转发到后端。
从后端收到响应后,API Gateway 会将该响应返回给调用者,并将最终的时间信息发送到 Trace。Service Control API 会记录这些调用点,然后将指标和日志写入其相应的目标。