前端也需要了解的 API 网关
网关(Gateway),简单地说就是请求的入口。如果你接触过微服务,应该经常听到“网关”这个词。
虽然 API 网关并不是微服务所独有的,但它的流行是在微服务兴起之后才开始的。那么到底什么是 API 网关呢?
基本概念
API 网关是位于客户端和它所依赖的服务之间的一层。有时称为“反向代理”,它们充当从客户端到其服务的单一入口点。
API 网关就像一座大楼的服务台:转接电话,访客登记,快递收发等。
如果你曾经用过第三方 API,你可能就是在跟网关通信,而网关又与服务的内部API 通信。
网关的好处后面会讨论,主要是让服务提供方向外部公开 API 的一部分,并集中处理版本管理、安全、本地化等工作。
API 网关最常见的用途是请求路由。大致过程如下:
客户端向网关发起请求
网关处理这些请求并转发到相关服务
服务向网关发送响应
网关处理响应并发送到客户端
这里的客户端可以是各种身份。上面流程提到的原始实现中,客户端是 API 的消费者,但是 API 网关也可以向客户端暴露内部 API。对许多 web 应用来说,客户端就是单页应用(SPA),但也可以是web应用的后端服务器、手机原生应用,甚至是智能电视、媒体播放器和 IoT 设备等。
服务通常是你的应用控制的内部服务,比如数据库或微服务。网关也可以位于客户端和第三方 API 之间。这样你的用户就可以用统一的方式访问第三方数据了。
客户端不需要知道每个 API 或服务的实现细节,而是由网关公开统一的 API 供客户端访问。客户端可以独立开发,不用关心服务端的改动。服务也可以根据业务需要随时替换,只要新的服务跟现有接口匹配。例如,应用目前使用第三方 API 做用户认证,如果想改用内部服务,客户端不会受影响,只要新服务跟接口能对上。
传统网关与 BFF 网关
API 网关主要有两种形式:传统网关和 backends for frontends 网关。两者目的相同,只是实现方式不一样。
传统 API 网关处理来自应用的所有客户端的请求。例如,流媒体视频服务会处理所有来自 web,电视,手机和平板电脑的请求。
传统 API 网关
不要觉得这种网关很简单。在许多情况下,它将根据客户的需要为每种客户端类型提供唯一的 API。例如,语音接口可能不需要传统 web接口所需要的全部数据,相应客户端 API 可能更简洁。GraphQL 试图解决同样的问题,但是却让客户控制想要的数据量。
backends for frontends 网关则对每一种客户端提供单独的 API 网关。相对于为客户端请求提供路由功能的单个大型网关,这些小型网关互相独立地与服务进行交互。
BFF 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译站
微信公众号:1024译站
发表评论 (审核通过后显示评论):