API 网关是传入调用应用程序编程接口 (API) 的单一入口点。网关聚合被请求的服务,然后返回适当的响应。为了使您的 API 网关有效,设计可靠、高效和简单的 API 至关重要。这是一个架构难题,但只要您了解最重要的组件,就可以解决它。
基于 API 驱动的方法
基于 API 驱动的方法将 API 置于应用程序与它们需要访问的业务能力之间通信的核心,以便在所有数字渠道中持续提供无缝功能。基于 API 驱动的连接是指使用可重用且设计良好的 API 来链接数据和应用程序的技术。
基于 API 驱动的架构
基于 API 驱动的架构是一种架构方法,它着眼于重用 API 的最佳方式。基于 API 驱动的架构解决了以下问题:
- 保护 API 免受未经授权的访问。
- 确保消费应用程序始终可以找到正确的 API 端点。
- 限制或限制对 API 的调用次数,以确保持续可用性。
- 支持持续集成、测试、生命周期管理、监控、运维等等。
- 防止错误在堆栈中传播。
- 对 API 进行实时监控,提供丰富的分析和洞察。
- 实现可扩展且灵活的业务能力(例如,支持 微服务 架构。)
API 资源路由
将 API 网关作为所有服务的单一入口点意味着 API 消费者只需要知道一个 URL。将流量路由到相应的服务端点并执行策略成为 API 网关的责任。

(Bobur Umurzokov, CC BY-SA 4.0)
这降低了 API 消费者端的复杂性,因为客户端应用程序无需从多个 HTTP 端点消费功能。也无需为每个服务实施单独的身份验证、授权、限制和速率限制层。大多数 API 网关,例如开源 Apache APISIX 项目,已经内置了这些核心功能。
基于 API 内容的路由
基于内容的路由机制也使用 API 网关根据请求的内容来路由调用。例如,请求可能会根据 HTTP 标头或消息正文(而不仅仅是其目标 URI)进行路由。
考虑一种场景,当应用数据库分片以将负载分布到多个数据库实例时。当存储的记录总数巨大且单个实例难以管理负载时,通常会应用此技术。
更好的解决方案是将记录分布到多个数据库实例中。然后,您为每个唯一的数据存储实施多个服务,并采用 API 网关作为所有服务的唯一入口点。然后,您可以配置 API 网关以根据从 HTTP 标头或有效负载获得的密钥将调用路由到相应的服务。

(Bobur Umurzokov, CC BY-SA 4.0)
在上图中,API 网关为多个客户服务公开了一个 /customers
资源,每个服务都有不同的数据存储。
API 地理路由
API 地理路由解决方案根据 API 调用的来源将其路由到最近的 API 网关。为了防止由于距离引起的延迟问题(例如,来自亚洲的消费应用程序调用位于北美的 API),您可以在全球多个区域部署 API 网关。您可以为每个区域中的每个 API 网关使用不同的子域名,让消费应用程序根据应用程序逻辑确定最近的网关。然后,API 网关提供内部负载均衡,以确保传入的请求分布在可用的实例中。

(Bobur Umurzokov, CC BY-SA 4.0)
通常使用 DNS 流量管理服务和 API 网关来将每个子域名解析为区域的负载均衡器,以定位最近的网关。
API 聚合器
此技术对多个服务执行操作(例如,查询),并使用单个 HTTP 响应将结果返回给客户端服务。API 聚合器使用 API 网关在服务器端代表消费者执行此操作,而不是让客户端应用程序多次调用多个 API。
假设您有一个移动应用程序,它多次调用不同的 API。这增加了客户端代码的复杂性,导致网络资源过度利用,并由于延迟增加而产生不良的用户体验。API 网关可以接受作为输入的所有必需信息,并且可以请求身份验证和验证,并了解与其交互的每个 API 的数据结构。它还能够转换响应有效负载,以便可以将它们作为消费者所需的统一有效负载发送回移动应用程序。

(Bobur Umurzokov, CC BY-SA 4.0)
API 集中式身份验证
在此设计中,API 网关充当集中式身份验证网关。作为身份验证器,API 网关在 HTTP 标头(例如承载令牌)中查找访问凭据。然后,它实现业务逻辑,以使用身份提供程序验证这些凭据。

(Bobur Umurzokov, CC BY-SA 4.0)
使用 API 网关进行集中式身份验证可以解决许多问题。它完全从应用程序卸载用户管理,通过快速响应从客户端应用程序收到的身份验证请求来提高性能。Apache APISIX 提供了各种插件,以启用不同的 API 网关身份验证方法。

(Bobur Umurzokov, CC BY-SA 4.0)
API 格式转换
API 格式转换是指在同一传输上将有效负载从一种格式转换为另一种格式的能力。例如,您可以从基于 HTTPS 的 XML/SOAP 传输到基于 HTTPS 的 JSON,然后再返回。API 网关提供对 REST API 的支持能力,并且可以进行有效负载转换和传输转换。例如,网关可以将基于 TCP 的消息队列遥测传输 (MQTT)(一种在 IoT 中非常流行的传输)转换为基于 HTTPS 的 JSON。

(Bobur Umurzokov, CC BY-SA 4.0)
Apache APISIX 能够接收 HTTP 请求,对其进行转码,然后将其转发到 gRPC 服务。它获取响应,并通过其 gRPC Transcode 插件以 HTTP 格式将其返回给客户端。
API 可观测性
到目前为止,您已经知道 API 网关为各种目标的传入流量提供了一个中心控制点。但它也可以是一个中心观测点,因为它非常适合监控客户端和服务网络之间移动的所有流量。您可以调整 API 网关,以便可以收集数据(结构化日志、指标和跟踪),以用于专门的监控工具。
Apache APISIX 提供了预构建的连接器,因此您可以与外部监控工具集成。您可以利用这些连接器从您的 API 网关收集日志数据,以进一步导出有用的指标,并完全了解您的服务如何被使用。您还可以管理您的 API 在您环境中的性能和安全性。
API 缓存
API 缓存通常在 API 网关内部实现。它可以减少对您的端点的调用次数,还可以通过缓存来自上游的响应来改善对您的 API 的请求延迟。如果 API 网关缓存具有请求资源的最新副本,它将使用该副本直接满足请求,而不是向端点发出请求。如果未找到缓存数据,则请求将传递到预期的上游服务。

(Bobur Umurzokov, CC BY-SA 4.0)
API 故障处理
API 服务可能由于多种原因而失败。在这种情况下,您的 API 服务必须足够弹性,以应对可预测的故障。您还希望确保您已到位的任何弹性机制都能正常工作。这包括错误处理代码、断路器、健康检查、回退、冗余等等。现代 API 网关支持所有最常见的错误处理功能,包括自动重试和超时。

(Bobur Umurzokov, CC BY-SA 4.0)
API 网关充当编排器,可以使用状态报告来决定如何管理流量,将负载均衡发送到健康节点,并可以快速失败。当出现问题时,它也可以向您发出警报。API 网关还确保路由和其他网络级组件协同工作,成功地将请求传递到 API 进程。它帮助您在早期阶段检测问题并解决问题。API 网关级别的故障注入机制(如 Apache APISIX 使用的机制)可用于测试应用程序或微服务 API 针对各种形式故障的弹性。
API 版本控制
这指的是能够定义和运行 API 的多个并发版本。这一点尤为重要,因为 API 会随着时间的推移而演变。能够管理 API 的并发版本使 API 消费者能够逐步切换到较新版本的 API。这意味着较旧的版本可以被弃用并最终淘汰。这很重要,因为 API 就像任何其他软件应用程序一样,应该能够演变,无论是为了支持新功能还是为了响应错误修复。

(Bobur Umurzokov, CC BY-SA 4.0)
您可以使用 API 网关来实现 API 版本控制。版本控制可以是标头、查询参数或路径。
APISIX 网关
如果您想扩展您的 API 服务,您需要一个 API 网关。Apache APISIX 项目为强大的入口点提供了基本功能,其优势显而易见。它与基于 API 驱动的架构保持一致,并且很可能改变您的客户与您的托管服务交互的方式。
本文已获得作者许可,改编并重新发布自 Apache APISIX 博客 。
评论已关闭。