关于 API Gateway

如今,基于网络的服务提供了各种各样的功能,这意味着涵盖从地图、天气和图片服务,到游戏、竞价和许多其他服务类型等各种内容。服务提供商有很多选项来实现、部署和管理他们的服务。例如,一项服务可能使用 Java 或 .NET 进行开发,而另一项服务使用 Node.js。

此外,单个服务提供商的后端实现也会有所不同。服务提供商可能具有使用一种架构实现的旧版服务,还有使用完全不同的架构实现的新服务。

无论实现如何,基于网络的服务都需要一个方法来向应用开发者提供服务。这些服务通常作为一组 HTTP 端点公开。根据服务,端点也可能会以 XML 或 JSON 格式向客户端应用返回数据。

关于 Google Cloud Platform 服务

在 Google Cloud Platform (GCP) 上开发服务时,您可以通过多种方式来实现服务,例如 Cloud FunctionsCloud RunApp Engine 标准环境。GCP 的灵活性意味着您可以根据服务要求选择正确的后端架构。

应用开发者是后端服务的客户。应用开发者会使用您的服务,通过在浏览器中运行的应用,或者通过可发出服务请求的任何其他类型的应用为移动设备或平板电脑实现应用。

在网络上公开服务可能并非易事。为了获得成功,服务提供商必须满足以下要求:

  • 对服务的访问权限进行身份验证
  • 保护客户端与服务之间的数据传输
  • 保护服务免受恶意攻击
  • 随着使用量的增加或减少扩缩服务
  • 为后端运营团队提供监控和跟踪服务使用情况的方法
  • 跟踪用量以提供准确的结算信息

此外,如果您的服务使用不同的接口和协议,则应用开发者可能难以访问这些服务。开发者不仅必须知道和了解每个服务接口,还必须监控不同的服务是否有变化,然后根据需要更新和重新部署应用。

API Gateway

借助 API Gateway,您可以通过在所有服务之间保持一致且定义明确的 REST API 来安全地访问您的服务,而不考虑服务实现。一致的 API:

  • 使应用开发者可以轻松使用您的服务
  • 让您能够更改后端服务实现,而不会影响公共 API
  • 让您能够利用 Google Cloud Platform (GCP) 中内置的扩缩、监控和安全功能

下图显示了应用开发者通过 API Gateway 向后端服务发出请求:

通过 API Gateway 发出 Web 服务请求。

借助 API Gateway,应用开发者可以使用您的 REST API 来实现应用。由于所有 API 都托管在 API Gateway 上,因此应用开发者会在所有后端服务中看到一致的接口。

通过在 API Gateway 上部署 API,您可以更新后端服务,甚至可以将服务从一个架构移动到另一个架构,而无需更改 API。只要服务的 API 保持一致,应用开发者不必由于后端发生底层更改而修改已部署的应用。

API Gateway 是一个分布式 API 管理系统,它还提供托管、日志记录和监控等功能,可帮助您创建、共享、维护和保护您的 API。API Gateway 与 GCP 原生集成,可执行处理并发 API 调用所涉及的所有任务,包括流量管理、授权和监控。

什么是 API?

API 是一个接口,应用可通过它轻松使用来自另一个应用的功能或数据。通过定义稳定、简单且文档齐全的入口点,API 使开发者可以轻松访问和重复使用其他开发者构建的应用逻辑。

例如,下表说明了可以返回图书相关信息的 REST API 示例:

属性 说明
网址 https://www.mybooksapi.com/books/info 根据图书的国际标准书籍编号 (DRM) 返回图书的书名、作者和出版日期。
HTTP 动词 GET 向 API 发出 GET 请求。
Query param isbn 传递图书的 ISBN 编号,即图书 ID。
响应数据

{
  "title" : "book_title",
  "author" : "author_name",
  "published" : "publish_date"
}
包含图书详情的 JSON 对象。
响应代码 200 请求成功。

使用此信息,您可以向此 API 发出以下 cURL 请求来获取图书的相关信息:

curl -X GET https://www.mybooksapi.com/books/info?isbn=0385504217

由于此服务具有定义明确的 API,包括数据格式和 HTTP 响应代码的说明,因此应用开发者无需了解后端服务的基础实现。

由于使用 API 的应用对更改很敏感,因此 API 还暗含 API 提供商与 API 使用方之间的合同。此合同可确保 API 随时间的变化以可预测的方式发生变化。例如,图书 API 可能会被更新以添加其他查询参数(如 titleauthor),或者更改响应 JSON 以添加有关图书的其他信息。

定义 API

您可以将部署在 API Gateway 上的 API 定义为 OpenAPI 2.0 规范。API 定义的关键组成部分包括:

  • 后端服务的网址(或入口点)
  • 随请求传递给 API 的任何数据的数据格式
  • 服务在 API 的响应中返回的任何数据的数据格式
  • 用于控制对服务的访问权限的身份验证机制

定义 API 后,请使用 gcloud 命令行界面将其上传到 GCP 上的 API 配置:

使用 gcloud 将 API 规范上传到 GCP。

在 API Gateway 上部署 API 配置

要创建 API,请在 API Gateway 上部署 API 配置。使用 gcloud 命令部署 API 配置:

使用 gcloud 部署 OpenAPI 规范。

部署 API 配置后,您的客户端可对 API 发出 REST 调用。

管理 API

部署和运行后,您可以监控 API 活动,例如使用情况指标和日志。当客户端向您的 API 发出请求时,API Gateway 会记录请求和响应的相关信息。API Gateway 还会跟踪延迟时间、流量和错误。

随着时间的推移,您可能需要更新已部署的 API,以添加新功能、提高性能或解决 API 问题。要更新已部署的 API,您只需更新 API 定义的 OpenAPI 规范,然后上传并重新部署 API 即可。

控制 API 访问权限

通过 API Gateway,您可以配置 API,要求在客户端在通过身份验证后才能访问 API。目前,API Gateway 支持与 Cloud Endpoints 相同的身份验证机制和语法,包括使用:

您还可以使用 Google Cloud Platform Console 与其他开发者共享您的 API,让他们能启用您的 API 并生成 API 密钥进行调用。

除了定义身份验证机制来验证用户的身份外,您的 API 还需要确定通过身份验证的用户可对您的 API 执行哪些操作。如需了解详情,请参阅 GCP 身份验证指南

后续步骤