如何选择合适的 API 网关

2023-11-12

如今,API 网关是设计具有多个 API 服务或微服务的分布式系统架构的重要组成部分。这篇文章帮助您了解什么是 API 网关、何时以及为何使用它,并指导您如何为您的应用程序选择最佳的 API 网关解决方案。

什么是 API 网关?

API 网关是一种服务,它是从外部世界进入应用程序的入口点。它负责请求路由、API 组合和其他功能,例如身份验证。与外观一样,API 网关封装了应用程序的内部架构并向其客户端提供 API。来自外部客户端的所有 API 请求首先进入 API 网关,API 网关将一些请求路由到适当的服务,无论是上游 API 服务器、第三方应用程序、数据库,甚至是无服务器。

API 网关的主要用例之一是它们引入了 API 即服务抽象,以允许 API 提供者抽象 API 实现并在不影响 API 消费者的情况下发展后端架构。

为什么要使用 API 网关?

在当今世界,我们通常为特定产品创建多个微服务,而客户端应用程序通常需要使用多个微服务的功能。对于这些服务中的每一个,我们将有不同的端点从外部世界访问这些服务暴露多个 URL 没有意义我们应该有一个单一的入口点到我们所有的服务,并且基于我们应该的不同路径正在做路由。

如上图所示,客户端可以通过单个请求从整体式在线示例购物 Web 应用程序中检索订单详细信息。但在微服务架构中,客户端必须发出多个请求来检索相同的信息。在此设计中,移动应用程序扮演着 API 编写器的角色。它调用多个服务并组合结果。尽管这种方法看起来很合理,但它存在几个严重的问题。

第一个问题是糟糕的用户体验,因为客户端发出多个请求来检索它想要显示给用户的数据。第二个问题是它要求移动开发人员编写可能很复杂的 API 组合代码。这项工作分散了他们创造出色用户体验的主要任务。直接调用服务的移动应用程序更具挑战性的是,某些服务可能使用客户端不容易使用的协议。还有一个缺点直接访问服务的移动应用程序的最大缺点是缺乏封装。随着应用程序的发展,服务的开发人员有时会以破坏现有客户端的方式更改 API。您还可以将其他类型客户端的 API 设计问题添加到此列表中。

如您所知,服务直接访问服务有很多缺点。客户端通过 Internet 执行 API 组合通常是不切实际的。因此,更好的方法是使用API 网关

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

如果您有足够的资源和无限的时间(这将花费比您预期更长的时间),那么您自己开发一个 API 网关并不是特别困难。它基本上是一个代理对其他服务的请求的网络应用程序。您可以使用您最喜欢的 Web 框架构建一个具有最重要功能的框架,例如实现一种定义路由规则的机制,以最大程度地减少复杂的编码或正确实现 HTTP 代理行为,包括如何处理 HTTP 标头等。但是,您需要解决许多设计、安全和维护问题。

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

如果您没有特殊的定制需求,使用市场上可用的产品可能更容易(特别是如果您需要快速使用网关)。因此,开发 API 网关的更好起点是使用为此目的设计的现成解决方案。它的内置功能显着减少了您需要编写的代码量。

10 个顶级 API 网关和管理工具

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

下面,我分享了10 个顶级 API 网关和 API 管理解决方案(包括开源和 SaaS),并注意它们没有按流行或使用的特定顺序排列。

  1. 孔网关
  2. 阿帕奇 APISIX
  3. 泰克
  4. 克拉肯_
  5. Gravitee.io
  6. 艾皮吉
  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 网关也可能执行协议转换。它可能会向外部客户端提供 RESTful API,即使应用程序服务在内部使用混合协议,包括 REST 和 gRPC。

您需要确保所选 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 网关都可以在任何环境(Linux、Windows、macOS)中以多种不同的方式(基于包、DockerHelmRPM)安装。例如,Kong的最大优势之一是其广泛的安装选择,带有 Docker 和Vagrant等预制容器,因此您可以快速部署。

接下来,查看部署复杂性,例如无数据库与数据库支持的部署。例如,Kong确实需要运行CassandraPostgres。 Apigee需要 Cassandra、Zookeeper和 Postgres 才能运行,而Express GatewayTyk等其他解决方案只需要RedisApache APISIX使用etcd作为它的数据存储,它在Data Plane的 etcd 中存储和管理路由相关和插件相关的配置。

自托管与云托管

选择 API 网关时,您需要考虑 API 网关服务的托管选项,例如内部部署SaaS(软件即服务)或混合网关部署。API 平台的所有 SaaS 产品都包含嵌入式 API 网关功能,大多数人只是那样使用它。因为他们获得了 SaaS 环境的好处(提供可用性保证、自动扩展和操作安全性)并且很容易与云提供商的其他服务集成。

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

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

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

客制化

API网关除了部署需求外,还有定制需求。因此,另一个需要考虑的因素是,当您不能直接使用 API 网关来满足您的需求时,选择的 API 网关如何使定制开发变得更容易。如果内置插件当前不支持系统的技术要求,有时您需要实施新的自定义插件以使用附加功能扩展网关。

Kong 提供多种语言的开源插件开发工具包(或“PDK”)。您可以使用GoJavascriptPythonLua构建 Kong 插件。在 Apache APISIX 中,您可以使用不同的Plugin Runners来使用您熟悉的编程语言开发插件。他们还将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、24/7 支持等。

社区

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

价格

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

结论

API 网关是现代云原生微服务 API 架构的重要组成部分。然而,选择合适的 API 网关解决方案并不是那么简单。您可以在市场上找到许多开源和企业工具,包括内部部署和 SaaS。没有万能的解决方案,正确的选择取决于上面列出的许多方面,以及每个组织的独特需求。

相关资源

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

推荐内容

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何选择合适的 API 网关 的相关文章

随机推荐

  • C++(day7)

    思维导图 Vector include
  • 关于Jquery的Validate插件------rules规则说明

    Query Validate 插件为表单提供了强大的验证功能 让客户端表单验证变得更简单 同时提供了大量的定制选项 满足应用程序各种需求 该插件捆绑了一套有用的验证方法 包括 URL 和电子邮件验证 同时提供了一个用来编写用户自定义方法的
  • DevOPs介绍,这一篇就足够了

    一 什么是DevOps DevOps是一种将软件开发和IT运维进行整合的文化和运动 它的目标是通过加强软件开发 测试和运维之间的协作和沟通 使整个软件开发和交付过程更加高效 快速 安全和可靠 DevOps涵盖了从计划和设计到开发 测试 交付
  • C语言动态内存管理

    目录 1 函数栈空间 1 1栈上的内存分配 2堆上的内存分配 2 1堆区分配内存的特点 2 2申请空间的操作 2 2 1malloc 2 2 2calloc 2 2 3realloc 2 3申请空间操作的技巧 1 函数栈空间 首先我们需要清
  • 实验---采用SOM网络进行聚类

    1 SOM网络简介 自组织特征映射网络SOFM又称自组织映射网络SOM 是一种自组织竞争神经网络 一个神经网络接受外界输入模式时 将会分为不同的对应区域 各区域对输入模式具有不同的响应特征 而且这个过程是自动完成的 其特点与人脑的自组织特性
  • 快速实现M5311NBIOT MQTT通信

    NBIOT MQTT接入ONE NET云平台 一 本例程实现功能介绍 三 硬件接线图 材料清单 四 完整代码 代码解析 前言 MQTT是一种基于TCP的物联网通信协议 在物联网领域应用非常广泛 基本上所有的云平台都支持设备以MQTT协议接入
  • 如何看懂照片的直方图?

    直方图的观看规则就是 左黑右白 左边代表暗部 右边代表亮部 而中间则代表中间调 纵向上的高度代表像素密集程度 越高 代表的就是分布在这个亮度上的像素很多 上图为例 对于一张 正常 的照片来说 直方图应该是中间高两边低 amp lt img
  • 龙芯笔记

    1 用交叉编译器编译时 也会出现找不到sqlite3 h头文件的情况 需要把sqlite3 h这个头文件放到交叉编译工具目录下的 include 2 mips64el redhat linux g sqlite c lm o sql tes
  • SVM 二分类与模型评估参数

    code 正常输出中文 import io import sys sys stdout io TextIOWrapper sys stdout buffer encoding utf 8 Accuracy AUC Recall Precis
  • 电脑连接KONICA MINOLTA(柯尼卡美能达) 打印机及驱动安装

    电脑系统 Windows 7 安装的打印机型号 Konica minolta bizhub 363 驱动下载 https www konicaminolta com cn support drivers index html 打印机配置好网
  • 财务模块 - 采购、接收、应付会计分录和功能认识

    一 企业采购业务 采购业务是一般企业都会有的业务 主要包括请购 采购 接收 入库 发票 付款几个步骤 分别对应采购 库存 成本 应付以及总账模块 Oracle是财务业务一体化的系统 只要录入了相应的业务 则会自动生成相应的财务信息 1 采购
  • c#观察者模式和事件委托的联合使用

    using System using System Collections Generic using System Linq using System Text using System Threading Tasks 观察者模式和事件委
  • 人才盘点:盘活人力资本的价值

    导读 人才是企业发展的第一资源 也是推动科技进步 创新驱动和提高核心竞争力的关键因素 随着科技日新月异的发展 一些传统产业正面临深度调整甚至颠覆性改变 在这种背景下 企业更应当关注存量人才的配置合理性 培养有市场前瞻和创业精神的高素质人才
  • cookie httponly

    Java 中的JSESSIONID的cookie 默认是httponly 具体啥是httponly 设置cookie为httponly将无法被javascript读取到 所以默认情况下JavaScript是无法通过读取JSESSIONID的
  • Eclipse 导入Go项目

    用Eclipse开发Java的程序员 一想到导入项目 首先是Import 但是发现点击import后 导入不了go项目 所以采用新建的方式来导入Go项目 这个前提是要搭建好Eclipse中Go开发环境 这些有很多可以百度 这里只描述Go项目
  • 发布依赖到maven中央仓库

    目录 前言 一 jira 1 注册 2 新建问题 3 新建关键表单配置 4 问题页面 5 Group id 对应的 域名认证 二 gpg秘钥配置 1gpg下载 三 maven项目配置 也可以看官方文档 1 setting xml 2 pom
  • Linux 查看服务器内存、CPU 命令

    1 服务器CPU情况 cat 1 查看物理CPU个数 Procs 进程 cat proc cpuinfo grep physical id sort uniq wc l 2 查看服务器CPU内核个数 cat proc cpuinfo gre
  • 关于若依框架中v-hasRole/v-hasPermi作用到el-table-column中无法生效问题

    在某些情况下 它是不适合使用v hasPermi 如元素标签组件 只能通过手动设置v if 可以使用全局权限判断函数 用法和指令 v hasPermi 类似
  • 静态链表基本操作

    增 删 查找位序下标 查找空元素操作 next 1为表最后一个元素 next 2为空元素 define CRT SECURE NO WARNINGS include
  • 如何选择合适的 API 网关

    如今 API 网关是设计具有多个 API 服务或微服务的分布式系统架构的重要组成部分 这篇文章帮助您了解什么是 API 网关 何时以及为何使用它 并指导您如何为您的应用程序选择最佳的 API 网关解决方案 什么是 API 网关 API 网关