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

API网关:前端的后端

让我们讨论一下API网关是什么,为什么拥有一个API网关是很重要的,以及它如何更好地管理API。我们还将探索并列出市场上一些最好的开源和托管API网关。

API网关是什么?

API网关是微服务架构中的一个重要概念。它形成了外部客户端(不是微服务系统的一部分的任何东西)的入口点。它是一个充当应用程序入口点的组件。

换句话说,API网关是一个具有有关端点信息的API管理服务器。它还能够执行身份验证、速率限制、负载均衡等功能。

为了更好地了解API网关,我们需要知道为什么拥有API网关是很重要的。

为什么我们需要API网关?

为了理解API网关的必要性,让我们讨论一个应用程序的使用案例。

案例研究

考虑一个复杂页面(比如电子商务应用程序的产品页面)的案例研究。如果我们看一下亚马逊产品列表的下面页面,我们可以看到需要渲染该特定页面的大量信息。

为了说明问题,让我们列出可能需要用于渲染上述特定页面的所有微服务。

考虑“搜索产品、库存、运输、评级和评论、推荐引擎、商家、财务和保险”是用于渲染上述页面的七个不同的微服务。

注:以上七个微服务只是一个假设,用于解释API网关的概念。实际上,亚马逊可能有不同数量的微服务。

问题

由于这些微服务已经分别部署在不同的服务器上,如果一个客户端想要访问这些服务,至少需要发起七个调用来请求一个页面。

但这真的是一个好方法吗?

我认为这不是一个推荐的方法,因为我们必须进行七个不同的调用,这肯定会影响性能、资源消耗、加载时间等。客户端还与所有服务紧密耦合,假设我们必须将“评论和评级”微服务分开为两个不同的服务,我们必须更新客户端代码。客户端必须发起一次调用来获取评论,一次调用来获取评级,这并不是处理这个问题的最佳方式。

解决方案

那么推荐的方法是什么呢?

这就是API网关。

在这种方法中,我们在客户端和微服务之间增加了一个层,称为API网关。它是所有微服务的前端服务。现在,任何想要访问微服务的客户端都必须调用API网关。现在API网关反过来调用所有微服务,并获取我们可能需要的任何响应。这个过程称为API组合。

简而言之,API网关位于客户端和微服务之间,充当所有微服务的网关。

不仅如此,使用API网关还可以给我们带来许多好处。

API网关的好处

API网关有助于我们实现A/B测试、缓存、管理访问配额、API健康监控、API版本控制、Chaos monkey testing、货币化等。让我们简单介绍一下以下好处。

安全性🛡️

每次执行API调用时,它必须使用公共IP地址访问服务。这会带来风险。

通过切换到API网关,这些微服务只能使用私有IP地址进行访问。这样可以更安全地传输数据。此外,使用API网关还可以保护数据免受恶意和DDoS攻击。

为了确保安全性,需要一个TLS certificate,API网关通过将所有API放在一个单一的静态IP或域名后面并使用密钥、令牌和IP过滤来保护它们来处理所有这些。

身份验证、授权和容错🔐

确保登录应用程序的用户的身份验证和授权是很重要的。API网关作为一个单一的入口点,满足所有要求,使身份验证和授权更加容易。因此,它只允许授权用户登录,并允许经过身份验证的用户进行更改,从而实现容错。

负载平衡和路由🚏

在多个请求进来且流量增加的情况下,API网关帮助处理这些问题。它通过创建多个服务并像轮询那样调用它们来实现。它可以根据用户细分管理和路由客户端请求。因此,为不同的用户提供不同质量或速率的内容。

考虑这样一个使用案例,其中为桌面和移动设备分别定义了两个微服务来返回低质量的图像/视频和高质量的图像/视频。

在这种情况下,我们可以配置一个API网关,使其充当路由器,如果请求来自手机,则将该请求路由到低质量的图像/视频服务,如果请求来自桌面,则可以路由到高质量的图像/视频服务。此路由可以基于头部、路径和参数等进行。

隔离

如果向应用程序添加了一个或多个微服务,或者从应用程序中删除了一个或多个微服务,我们将不会更新客户端代码。在这种情况下,我们需要对API网关本身进行一些更改,以便根据更新的微服务进行调用。

反向代理和缓存

通过微服务提供静态文件(HTML、JS、CSS、字体)不是最佳实践,在这种情况下,我们可以将这些文件移动到API网关。

API网关可以保存所有静态内容,并直接提供给客户端。类似地,考虑一个服务,它评估热门产品,而这些趋势是每小时或每天计算一次的。因此,一旦趋势为其余时间计算出来,该服务将重复返回相同的响应。在这种情况下,API网关具有一个称为响应缓存的功能,可以指定URL和阈值时间,以便将响应缓存起来。

协议适配器

如果我们想利用像WebSocket或较新版本的HTTP(即HTTP/2)这样的协议,即使我们的后端服务尚未准备好或与HTTP/2或WebSocket不兼容,API网关也可以负责将较新的协议转换为较旧的协议。它可以充当协议适配器。

让我们探索API网关。

首先,开源的❤️和自托管的解决方案。

Kong Gateway

Kong Gateway 是最流行的基于轻量级代理构建的开源云原生API网关。它使用Lua编写,并在Nginx的帮助下运行。它是一个模板引擎,可帮助加快事件处理时间。它保证为所有我们的微服务应用程序提供无与伦比的延迟性能和可扩展性,无论它们在何处运行。

Nasdaq、Honeywell、思科、FAB、Expedia、三星、西门子Yahoo Japan等公司广泛使用Kong API网关。

Kong提供的一些功能包括:

  • 认证
  • 流量控制
  • 分析
  • 转换
  • 日志记录
  • 无服务器
  • 可通过插件架构进行扩展

Kong非常出色documentationintegration

您可以在您喜爱的cloud platform上运行Kong。

Apache APISIX

Apache APISIX最初诞生于中国的智慧科技,后来进入Apache孵化器并开源。项目副总裁明文表示,这个API网关解决了云原生和微服务带来的各种挑战。

Apache APISIX被360、HelloTalk、网易、TravelSky等公司使用。

Apache APISIX基于Nginxetcd,具有动态路由和插件热加载,特别适用于微服务系统下的API管理。

Tyk

Tyk是一个企业级开源API网关。您可以选择自托管或托管。

Tyk提供了一些开箱即用的功能,包括:

  • 认证
  • 配额和速率限制
  • 版本控制
  • 通知和事件
  • 模拟API
  • 详细监控和分析
  • 向后兼容
  • 开箱即用的GraphQL

Tyk也可在AWS marketplace上使用。如果您的应用程序堆栈在AWS上,这是一个不错的选择。

Ocelot

Ocelot是一个.NET API网关。

该项目旨在使用.NET,在运行微服务或面向服务的架构时,需要一个统一的系统入口点。然而,它可以与任何支持HTTP的东西一起使用,并在任何ASP.NET Core支持的平台上运行。

Ocelot按特定顺序充当中间件。它将HttpRequest对象根据其配置修改为指定的状态,直到达到请求构建器中间件。它创建一个HttpRequestMessage对象,用于请求下游服务。发起请求的中间件是Ocelot管道中的最后一件事。它不调用下一个中间件。中间件将HttpResponseMessage映射到HttpResponse对象,并返回给客户端。

Ocelot提供了标准功能,如路由、认证、速率限制、缓存、负载均衡等。但它不支持分块编码、转发主机标头和Swagger。

Goku

Goku API Gateway是EOLINK Inc.的一项总称项目。它是一个基于Golang的微服务网关,可以实现高性能的动态路由、服务编排、多租户管理、API访问控制等功能。

Goku提供了图形界面和插件系统,以便更轻松地进行配置和扩展。除了标准功能外,Goku还提供了集群、热更新、告警、日志记录等功能。

Express Gateway

Express Gateway构建在Express.js上。Express Gateway是一组围绕Express声明性构建的组件,以满足API网关的使用场景。Express Gateway利用了Express中间件的丰富生态系统的强大功能。

Joyent、Linux Foundation、VIRICITI、Switch Media、CoozyMusement这样的公司广泛使用Express Gateway。

它简单、快速,并提供了所有基本功能。

Gloo

Gloo是面向云原生环境的下一代全功能API网关和Ingress Controller。它构建在Envoy代理之上,用于连接、安全和控制应用服务之间的流量。

Gloo支持连接到各种工作负载以进行安全和管理,并且在其功能级别路由方面非常出色。它可作为开源和企业版本提供。企业版本提供以下功能。

  • 开发者门户
  • WAF
  • 数据丢失防护
  • 更多身份验证方式
  • 高级速率限制和多集群管理

KrakenD

KrakenD是一个超高性能的开源API网关。其核心功能是创建一个API,将许多微服务聚合到单个端点中,自动为您处理繁重的工作:聚合、转换、过滤、解码、限流、身份验证等等。

它提供了一种声明性的方式来创建端点。它结构良好、分层次,并且可以使用社区开发的即插即用中间件或内部开发来扩展其功能。

KrakenD声称比Kong和Tyk更快。查看 benchmarking results

Fusio

Fusio是一个API管理系统,因为它帮助开发实际的API端点(即从数据库请求和转换数据)。它不仅限于代理请求到另一个API。它提供了一个简单直观的后端来控制和管理您的API。

Fusio提供的一些功能包括:

  • 货币化
  • 订阅支持
  • 生成OAI、RAML模式规范
  • 文档

和其他标准的API网关功能。

WSO2

WSO2是一个完整的生命周期API管理解决方案,可在任何地方运行。它可以部署在本地、云端,或者以混合方式部署,其中其组件可以分布和部署在多个云端和本地基础设施上。

它包括一个原生云API网关,并提供Kubernetes运算符,将原始微服务轻松转换为托管API。API管理器与 service meshes 集成,并提供完整的管理平面和控制平面,用于管理、监控和货币化API和API产品。

它在一个整洁的集成系统中支持API发布、生命周期管理、应用程序开发、访问控制、速率限制和分析。

接下来,让我们来探索商业平台。

Apigee

Apigee是由Google Cloud提供的跨云API管理平台。

它有以下几种版本:

  • Apigee:一种托管的SaaS解决方案,您按使用付费。您专注于构建业务,并将Apigee环境的管理交给GCP。
  • Apigee混合版:允许您在本地、Google Cloud Platform (GCP) 上或两者混合的环境中管理API。

Apigee提供端到端的API管理,包括货币化和内置监控。

Cloud Endpoints

Google Cloud提供的另一个产品。

Endpoints是Google Cloud的一个更轻量级的Apigee版本。它非常适合开发人员在任何Google Cloud后端上开发、部署和管理API。它为其客户提供来自App Engine应用程序的工具和库。它可以使用Google Codelab创建和配置。Codelab可以帮助您使用Java 8和Maven 3.6.0在App Engine中运行示例API。

Google Cloud Endpoints与其他产品(如Trace和Logging用于监控、Auth0和Firebase用于身份验证、GKE和App Engine用于自动部署等)紧密集成。

Amazon API Gateway

AWS可以提供您运行应用程序所需的一切。

API也是如此。

Amazon API Gateway是一个完全托管的服务,方便开发人员轻松地构建、发布、维护和保护任何规模的API。它支持RESTful和WebSocket API,并允许启用实时双向通信。

下面是亚马逊提供的图片,说明了亚马逊API网关的工作原理。

如果您的微服务或API已经托管在AWS上,那么与亚马逊API网关集成是有意义的。它们在免费层提供100万次API调用,这对您来说很好,可以了解它的工作原理。

Azure

为什么要放弃Azure呢?

Microsoft Azure在云端、本地或混合环境中提供端到端的API管理。您可以通过REST API和SDK来管理API管理。

如果您使用SOAP,那么有个好消息。您可以导入他们的SOAP服务的Web服务描述语言(WSDL),Azure将创建一个SOAP前端。他们提供所有标准功能,包括货币化。试试看,体验一下这个平台。

结论

一旦您的API准备就绪,请不要忘记进行monitorsecure。如果您仍在开发中,请查看这些tools,以加快API的测试和开发。

上述内容应该能给您提供有关可用的API网关和管理解决方案的想法。如果您的预算有限,那么您可以尝试开源解决方案。最好在您的cloud VM上安装其中一些,看看哪个适合您。

祝您好运!

类似文章