前端也需要了解的API网关

编程

虽然 API 网关并不是微服务所独有的,但它的流行是在微服务兴起之后才开始的。那么到底什么是 API 网关呢?

基本概念

API 网关是位于客户端和它所依赖的服务之间的一层。有时称为“反向代理”,它们充当从客户端到其服务的单一入口点。

API 网关就像一座大楼的服务台:转接电话,访客登记,快递收发等。

如果你曾经用过第三方 API,你可能就是在跟网关通信,而网关又与服务的内部API 通信。

网关的好处后面会讨论,主要是让服务提供方向外部公开 API 的一部分,并集中处理版本管理、安全、本地化等工作。

API 网关最常见的用途是请求路由。大致过程如下:

  1. 客户端向网关发起请求
  2. 网关处理这些请求并转发到相关服务
  3. 服务向网关发送响应
  4. 网关处理响应并发送到客户端

这里的客户端可以是各种身份。上面流程提到的原始实现中,客户端是 API 的消费者,但是 API 网关也可以向客户端暴露内部 API。对许多 web 应用来说,客户端就是单页应用(SPA),但也可以是web应用的后端服务器、手机原生应用,甚至是智能电视、媒体播放器和 IoT 设备等。

服务通常是你的应用控制的内部服务,比如数据库或微服务。网关也可以位于客户端和第三方 API 之间。这样你的用户就可以用统一的方式访问第三方数据了。

客户端不需要知道每个 API 或服务的实现细节,而是由网关公开统一的 API 供客户端访问。客户端可以独立开发,不用关心服务端的改动。服务也可以根据业务需要随时替换,只要新的服务跟现有接口匹配。例如,应用目前使用第三方 API 做用户认证,如果想改用内部服务,客户端不会受影响,只要新服务跟接口能对上。

传统网关与 BFF 网关

API 网关主要有两种形式:传统网关和 backends for frontends 网关。两者目的相同,只是实现方式不一样。

传统 API 网关处理来自应用的所有客户端的请求。例如,流媒体视频服务会处理所有来自 web,电视,手机和平板电脑的请求。

不要觉得这种网关很简单。在许多情况下,它将根据客户的需要为每种客户端类型提供唯一的 API。例如,语音接口可能不需要传统 web接口所需要的全部数据,相应客户端 API 可能更简洁。GraphQL 试图解决同样的问题,但是却让客户控制想要的数据量。

backends for frontends 网关则对每一种客户端提供单独的 API 网关。相对于为客户端请求提供路由功能的单个大型网关,这些小型网关互相独立地与服务进行交互。

API 网关的主要优点

前面提到过,API 网关的核心用途是请求路由。它将实现细节从客户端中抽象出来,集中在一个地方:网关。网关可以处理各种共享任务,比如:

  • 认证与授权:可以简单到确保用户能访问某个资源,也可以复杂到处理完整的权限验证流程。
  • 处理和验证输入:验证和处理来自客户端的数据,然后再发送到相关服务。这样可以避免让客户端做复杂的数据处理。
  • 转换响应数据:正如网关可以在发送到第三方 API 或微服务之前处理数据,它也可以在给客户端发送响应前做一定的转换。比如前面的例子,可以根据客户端的需要决定返回相应的数据结构。
  • 监控采集: 由于所有请求和响应都经过网关,可以在这里集中处理日志和度量数据收集。
  • 服务混淆: 通过将服务与客户端分离,API 网关不仅保护服务不受客户端问题的影响,而且还允许客户端和服务彼此独立存在。可以更改或替换服务,而不会直接影响客户端。

API 网关的缺点

说完优点说缺点。

API 网关引入了新模块,增加了管理难度。跟架构中的其他部分一样,网关也需要托管、扩展和运维。由于所有请求和响应都必须经过网关,因此多了一个故障点,并且增加了每次调用的延迟,因为网络中多了一跳。

由于它的中心位置,很容易逐渐增加网关内部的复杂性,直到它成为代码的“黑盒”。这使得维护代码变得更加困难。

这种“一锅炖”的方法违背了使用微服务分割应用程序的核心思想,并且减少了这些微服务的部分自治权。

这些问题大多是可以避免的,但需要做一些工作。

API 网关与 Service Mesh

网关让客户端可以访问服务,但是怎么解决服务之间互相访问的问题?这就是 service mesh 的用武之地。service mesh 是解决服务之间互相通信的一层。如果说网关通信是纵向的(从客户端到网关),那么 service mesh 就是横向的(服务于服务之间)。

通常来说,可以把 service mesh 和 API 网关结合使用。网关作为客户端请求的入口,然后 service mesh 可以让服务互相依赖,再将响应通过网关传回客户端。

在过去几年,service mesh 扩展了功能版图,可以处理外部通信了。有个流行的 service mesh 产品 Istio,现在包含了一些网关功能。预计随着时间的推移,许多 service mesh 产品将提供网关的许多核心特性。

作者:Mark Michon
来源:https://dev.to/bearer/what-is-an-api-gateway-42i6
翻译:1024译站

更多前端技术干货尽在微信公众号:1024译站

以上是 前端也需要了解的API网关 的全部内容, 来源链接: utcz.com/z/513541.html

回到顶部