如何选择正确的 API 网关

2025-05-24

如何选择正确的 API 网关

如今,API 网关已成为设计包含多个 API 服务或微服务的分布式系统架构的重要组成部分。本文将帮助您了解API 网关的概念、使用时机和原因,并指导您如何为您的应用程序选择最佳的 API 网关解决方案。

什么是 API 网关?

API网关是一种服务,它是从外部世界进入应用程序的入口点。它负责请求路由、API 组合以及其他功能,例如身份验证。与Facade类似,API 网关封装了应用程序的内部架构,并向其客户端提供 API。来自外部客户端的所有 API 请求首先会转到 API 网关,然后 API 网关会将部分请求路由到相应的服务,无论是上游 API 服务器、第三方应用程序、数据库,还是无服务器架构。

API 网关的主要用例之一是引入 API 即服务抽象,以允许 API 提供商抽象 API 实现并改进后端架构,而不会影响 API 消费者。

什么是 API 网关

为什么要使用 API 网关?

在当今世界,我们通常会为特定产品创建多个微服务,而客户端应用通常需要使用多个微服务的功能。对于每个服务,我们都会有不同的端点从外部世界访问这些服务,因此暴露多个 URL 是没有意义的,我们应该为所有服务设置一个单一的入口点,并根据不同的路径进行路由。

为什么要使用 API 网关

如上图所示,客户端只需一次请求即可从单体式在线购物示例 Web 应用程序中检索订单详情。但在微服务架构中,客户端必须发出多个请求才能检索相同的信息。在这种设计中,移动应用程序扮演着 API 编写器的角色。它调用多个服务并合并结果。虽然这种方法看似合理,但它存在一些严重的问题。

第一个问题是用户体验不佳,因为客户端需要多次请求才能获取想要显示给用户的数据。第二个问题是,它要求移动开发者编写可能非常复杂的 API 组合代码。这项工作会分散他们专注于打造卓越用户体验这一主要任务的注意力。移动应用直接调用服务的挑战在于,某些服务可能使用客户端不易使用的协议。移动应用直接访问服务的另一个缺点是缺乏封装。随着应用程序的发展,服务的开发者有时会以破坏现有客户端的方式更改 API。您还可以将其他类型客户端的 API 设计问题添加到此列表中。

正如您所了解的,服务直接访问服务存在诸多缺点。客户端通过互联网执行 API 组合通常不太实际。因此,更好的方法是使用API 网关

API 网关作为单一入口点

为什么不开发自己的 API 网关

如果您拥有足够的资源和无限的时间,那么独立开发 API 网关并非难事(实际耗时可能比您预期的要长)。它本质上是一个代理请求到其他服务的 Web 应用程序。您可以使用自己喜欢的 Web 框架构建一个 API 网关,并添加一些最重要的功能,例如实现一种定义路由规则的机制以最大限度地减少复杂的编码,或者正确实现 HTTP 代理行为(包括如何处理 HTTP 标头等等)。然而,您需要解决许多设计、安全和维护问题。

您需要应用适当的安全考虑(除非您手头有一批安全专家),测试每个新功能,监控 API 网关性能,记录每个更改,扩展、维护和升级内部库,作为开发工作量的一部分不断进行。

如果您没有特殊的定制需求,使用市面上现有的产品可能会更方便(尤其是在需要快速使用网关的情况下)。因此,开发 API 网关的更好起点是使用专为此目的设计的现成解决方案。其内置功能可以显著减少您需要编写的代码量。

十大顶级 API 网关和管理工具

由于有各种类型的网关可用,并且每个网关都提供许多功能。

下面,我分享了10 个顶级 API 网关和 API 管理解决方案(开源和 SaaS),请注意,它们的受欢迎程度或使用顺序并不固定。

  1. 金刚网关
  2. Apache APISIX
  3. 泰克
  4. KrakenD
  5. Gravitee.io
  6. Apigee
  7. 亚马逊 API 网关
  8. Azure API 管理
  9. 大使
  10. 格洛

下一节我们来看看如何根据最佳实践选择正确的 API 网关。

如何选择您的 API 网关

在选择完全符合您需求的API 网关或 API 管理解决方案时,需要考虑以下一些特性。请注意,以下属性列表并非按优先级排序:

  1. 主要边缘功能。
  2. 安全。
  3. 配置简单。
  4. 安装和部署选项。
  5. 自托管与云托管。
  6. 定制。
  7. 一体化。
  8. 表现。
  9. 特征。
  10. 社区。
  11. 价格。

现在我们可以分解每个属性并了解为什么我们应该考虑每个属性。

主要边缘功能。

虽然 API 网关的主要职责是 API 路由和组合,但它也应该实现所谓的边缘函数。顾名思义,边缘函数是在应用程序边缘实现的请求处理函数。应用程序可能实现的边缘函数示例包括:

  • 身份验证——验证发出请求的客户端的身份。
  • 授权——验证客户端是否有权执行该特定操作。
  • 速率限制——限制来自特定客户端和/或所有客户端每秒的请求数。
  • 缓存——缓存响应以减少对服务发出的请求数量。
  • 指标收集——收集 API 使用情况指标以用于计费分析目的。
  • 请求日志记录——记录请求。
  • 有效负载转换——API 网关应该能够提供修改请求/响应有效负载的功能。API 网关还可以执行协议转换。即使应用服务内部使用了多种协议(包括 REST 和 gRPC),它也可以向外部客户端提供 RESTful API。

您需要确保所选的 API 网关能够开箱即用地支持上述基本横切关注点。

安全

API 网关是另一个必须开发、部署和管理的高可用性组件。API 网关也存在成为安全瓶颈的风险。在选择它之前,您需要确保它的安全性。它应该具有强制使用SSL(安全套接字层)的策略,并符合某些数据保护法规。此外,在与管理配置交互时,您需要验证该工具是否启用了强身份验证。

由于配置是一项至关重要的功能,我们需要通过 API 密钥或其他身份验证方法进行身份验证。例如,大多数 API 网关提供商(例如Apache APISIX)都支持基于令牌的Admin API访问,并且强烈建议您生成自己的令牌并定期更改。或者,Azure API 管理依赖于Azure Active Directory (Azure AD),其中包含多重身份验证(MFA) 和Azure RBAC等可选功能,以实现对 API 管理服务及其实体(包括 API 和策略)的细粒度访问。

简单配置

尽可能简化API 网关的配置流程至关重要。否则,开发人员将被迫排队等待配置网关。随着微服务数量及其 API 范围的增加,路由所需的配置可能会变得复杂。请确保在添加/删除路由和上游服务时,API 网关配置的更新能够快速生效,且不会导致任何停机。例如,APISIX 插件支持热加载,这意味着您无需通过调用特殊的 HTTP 接口来重启正在运行的服务。

检查所选 API 网关支持的配置语言 ( JSON/Yaml) 和样式 ( Declarative/Imperative)。这并非至关重要,但有时您可能会问:它是否具有用户友好的 GUI 和拖放式简易配置选项?一些开源项目(例如TykKrakend.ioApache APISIX )内置了无需代码即可进行可视化编辑的仪表板。您甚至可以从JSON.

安装和部署选项

另一个需要考虑的问题是,安装 API 网关或在发生更改时重新部署网关有多难。请检查提供的安装选项。大多数现代 API 网关都可以通过多种方式(基于软件包、DockerHelmRPM)在任何环境(Linux、Windows、macOS)中安装。例如,Kong的最大优势之一是其广泛的安装选择,它提供 Docker 和Vagrant等预制容器,因此您可以快速启动部署。

接下来,回顾一下部署的复杂性,例如无数据库部署与有数据库支持的部署。例如,Kong需要运行CassandraPostgres。Apigee需要CassandraZookeeper和 Postgres 才能运行,而Express GatewayTyk等其他解决方案只需要Redis。Apache APISIX使用etcd作为其数据存储,它在数据平面的 etcd 中存储和管理与路由和插件相关的配置

自托管与云托管

选择 API 网关时,您需要考虑 API 网关服务的托管选项,例如本地部署SaaS(软件即服务)或混合网关部署。所有面向 API 平台的 SaaS 产品都包含嵌入式 API 网关功能,大多数人也只是这样使用。因为他们可以获得 SaaS 环境的优势(可用性保证、自动扩展和提供的运营安全性),并且易于与云提供商的其他服务集成。

以下是一些流行的云 API 管理解决方案的列表:

但是,如果它在您使用的云提供商中运行,则与第三方服务的集成可能会更加困难,并且在本地运行 API 网关可以获得更大的控制权,或者还有另一种选择,即将特定的开源或企业 API 网关部署到正在运行其他应用程序(Web 或 API 服务)的云提供商。

例如,将 Kong 或 Apache APISIX 实例部署到您选择的任何云平台非常简单,因为您仍然可以将其托管在Microsoft AzureAWS上,并使用免费开源项目的功能,而不必为其内置的 API 管理工具花费额外成本。另一方面,TykAPiGeeAPI7则同时提供云托管 SaaS 和本地部署解决方案。

定制

除了部署要求外,API 网关还要求定制。因此,另一个需要考虑的因素是,当您无法直接使用 API 网关满足需求时,所选的 API 网关如何简化定制开发。有时,如果您系统的技术要求目前不受内置插件的支持,则需要实现新的自定义插件来扩展网关的附加功能。

Kong 提供了多种语言的开源插件开发工具包(简称“PDK”)。您可以使用GoJavascriptPythonLua构建 Kong 插件。在 Apache APISIX 中,您可以使用不同的插件运行器,使用您熟悉的编程语言开发插件。APISIX 还将Wasm嵌入到 APISIX 中,您可以利用 Wasm 编译 Wasm 字节码并在 APISIX 中运行。

一体化

优质 API 网关的下一个特点是能够轻松集成更多生态系统。您需要检查它是否与其他产品、工具、平台和服务集成。例如,您可以调查它是否支持多种应用协议,是否兼容第三方身份提供商进行身份验证,以及它是否提供预构建的连接器,以便您轻松集成到大多数可观察性平台,例如(PrometheusSkywalkingElasticSearchOpentelemetry等)。

表现

速度——在当今的数字环境中,速度至关重要。如果您的应用性能太慢,消费者很容易转向竞争对手。API 网关是应用程序的前门,所有外部请求都必须首先通过该网关,这意味着它必须足够快才能快速响应来自外部世界的请求。但并非所有 API 网关的性能都达到相同的水平。如果您的应用程序需要快速且实时响应,则需要查看每个 API 网关提供商的性能基准。

虽然大多数公司运营规模不大,每天处理数十亿个请求,但 API 网关的性能和可扩展性通常非常重要。例如,Apache APISIX Gateway 底层使用基数树路由匹配和 etcd,为您提供创建高速同步系统的能力。

API 网关除了可扩展之外,还必须可靠。实现可靠性的一种方法是在负载均衡器后运行多个网关实例。如果一个实例发生故障,负载均衡器会将请求路由到其他实例。一些云供应商提供的 API 管理解决方案提供开箱即用的自动扩展功能,无需与提供此功能的服务集成。

特征

每个 API 网关都拥有各种功能,这些功能有时彼此不同。根据您选择的开源版本或企业版本,功能可能会有所限制,并且某些插件/扩展是免费提供的。在调查过程中,您可能会发现,一些企业版的付费插件或功能可以在最广泛的开源项目中免费找到。

IBM API Connect提供自动化、模型驱动的工具,用于 API 创建和 API 使用情况分析,可供 API 提供者和使用者使用。Kong 开箱即用,提供 API 管理的许多预期功能,包括企业插件、开发者门户、分析平台、安全功能、增强性能、GUI、全天候支持等等。

社区

如果选择的 API 网关扩展了开源网关,您需要仔细分析它是否有许可证文件,是否有活跃的社区,查找贡献者的数量、社区用户是谁、人们提交的频率以及他们发布新版本、编写良好的文档以及在论坛上回答的问题。

价格

最后但同样重要的一点是 API 管理解决方案的使用成本。如果它是一个 100% 可立即投入生产的开源版本,并且已经被许多公司采用,那么您可以选择它。对于企业版,请在付费之前检查他们是否提供合适的免费套餐来试用功能,以及该公司是否提供您所需的全面支持。一些开源 API 网关提供商(例如Tyk或基于 Apache APISIX 构建的API7.ai)提供相同的功能集,无论您是社区版用户还是企业版用户,您都可以获得相同的 API 网关。

结论

API 网关是现代云原生微服务 API 架构的重要组成部分。然而,选择合适的 API 网关解决方案并非易事。市面上有很多开源和企业级工具,既有本地部署的,也有 SaaS 的。没有放之四海而皆准的解决方案,正确的选择取决于上述诸多方面,以及每个组织的独特需求。

相关资源

14 个适用于现代应用程序的开源和托管 API 网关

推荐内容💁

➔观看视频版本:

➔阅读博客文章:

关于作者

访问我的个人博客:www.iambobur.com

文章来源:https://dev.to/apisix/how-to-choose-the-right-api-gateway-3f9i
PREV
机器学习入门 - 第一部分
NEXT
设计一个易于使用且灵活的 REST API