API 网关(API Gateway)学习
我是做客户端开发的,老是听到服务端开发的同学提到网关,最近培训课上一位老师又讲到了网关,虽然不知道是什么,但是听他讲的就是很好,非常方便,所以就来学习一下了。
1. 什么是 API 网关(API Gateway)
1.1. 定义
API 网关是一个处于应用程序或服务(提供 REST API 接口服务)之前的系统,用来管理授权、访问控制和流量限制等,这样 REST API 接口服务就被 API 网关保护起来,对所有的调用者透明。因此,隐藏在 API 网关后面的业务系统就可以专注于创建和管理服务,而不用去处理这些策略性的基础设施。
网关的角色是作为一个 API 架构,用来保护、增强和控制对于 API 服务的访问。
1.2. 职责
2. 为什么用API Gateway
API gateway是位于客户端和API之间的一个单点入口,它作为反向代理将客户端请求路由到后面的一组API。同时,API gateway可以承担cross-cutting交叉功能,如安全与认证,请求速率管理,日志,缓存等。
如果没有API gateway,客户端就会直接把请求发给API,此时可能会有下列问题:
1)客户端调用代码复杂,客户端需要和多个API交互,并且处理来自不同API的不同错误。
2)客户端与API之间的耦合度高,客户端需要知道各个API的调用细节,当API的接口发生变化,客户端也需要进行更改。
3)客户端的一次操作可能需要调用多个API接口,此时会产生多次网络调用并增加延迟。
4)每个面向公共网络调用的API都需要实现安全,请求速率管理等功能,都需要经过安全测试。
5)API必须使用对调用端友好对通信协议,如http或者websocket。
3. 如何使用API Gateway
API Gateway是一个服务器,它是系统的单一入口点。它类似于面向对象设计中的立面模式。API Gateway封装了内部系统体系结构,并提供了适合每个客户端的API。它可能具有其他职责,如身份验证、监视、负载平衡、缓存、请求形成和管理以及静态响应处理。
下图显示了API Gateway通常是如何适应体系结构的:
API Gateway负责请求路由、组合和协议转换。所有来自客户端的请求首先通过API Gateway。然后它将请求路由到适当的微服务。API Gateway通常通过调用多个微服务并聚合结果来处理请求。它可以在内部使用的web协议(如HTTP和WebSocket)和web不友好协议之间进行转换
API Gateway还可以为每个客户端提供自定义API。它通常为移动客户端公开粗粒度API。例如,考虑产品详细信息场景。API Gateway可以提供一个端点(/productdetails?productid=xxx),使移动客户端能够通过一个请求检索所有产品细节。API Gateway通过调用各种服务(产品信息、建议、评论等)并结合结果来处理请求。
Netflix 是使用API Gateway的一个成功案例, Netflix流媒体服务可以在数百种不同的设备上使用,包括电视、机顶盒、智能手机、游戏系统、平板电脑等。最初,Netflix试图为其流媒体服务提供一种一刀切的API。然而,他们发现,由于设备的多样性和他们独特的需求,它并不能很好地工作。今天,他们使用一个API Gateway,通过运行特定于设备的适配器代码为每个设备量身定制API。适配器通常通过平均调用6到7个后端服务来处理每个请求。Netflix API Gateway每天处理数十亿个请求。
4. 哪些API Gateway产品推荐
目前社区的关于 API Gataway 的项目有以下这些:
Tyk:Tyk是一个开放源码的API网关,它是快速、可扩展和现代的。Tyk提供了一个API管理平台,其中包括API网关、API分析、开发人员门户和API管理面板。Try 是一个基于Go实现的网关服务。
Kong:Kong是一个可扩展的开放源码API Layer(也称为API网关或API中间件)。Kong 在任何RESTful API的前面运行,通过插件扩展,它提供了超越核心平台的额外功能和服务。
Orange:和Kong类似也是基于OpenResty的一个API网关程序.
Netflix zuul:Zuul是一种提供动态路由、监视、弹性、安全性等功能的边缘服务。Zuul是Netflix出品的一个基于JVM路由和服务端的负载均衡器。
apiaxle: Nodejs 实现的一个 API 网关。
api-umbrella: Ruby 实现的一个 API 网关。
AWS API gateway
Spring Cloud Gateway
参考资料:
https://www.jianshu.com/p/1803b8609e0b
https://www.imooc.com/article/287392
https://blog.csdn.net/rain_web/article/details/102469745
AMQP:(高级消息队列协议)
https://en.wikipedia.org/wiki/Advanced_Message_Queuing_Protocol
REST API: