Goku项目自2022年1月14日起,正式改名为Apinto,文章或图片提到的Goku字样实际是和Apinto同属一个项目。
Apinto 网关由于采用了模块化的设计,你几乎可以扩展其中的所有功能,为了方便大家了解如何扩展Apinto ,我这里花几分钟的时间演示如何去开发Apinto 的鉴权插件。
首先来了解一下goku网关执行的流程,客户端发送请求给网关,当路由模块匹配成功后,会将请求下发到服务模块,在这个过程中如果配置了鉴权模块,则会先进行身份认证,符合条件的请求才会最终下发到负载均衡模块,配合服务发现,最终转发到后端服务。
在流程图中,蓝色部分是我们网关的功能模块,也可以理解为是网关执行过程中的各个阶段,灰色部分便是我们功能模块的具体功能实现,比如在路由模块中可以同时实现http、tcp等多种协议的匹配。
在Goku中,我们定义了几个基本概念:
首先是Profession,可以理解为功能模块,比如路由模块,鉴权模块,负载模块,服务模块等,不同的Profession负责不同的工作职责。
其次是Driver,可以理解为功能模块内的不同的功能,比如对于鉴权模块来说,里面包含了APIKey、Basic Auth、JWT等不同的Driver。他们都是执行鉴权的工作,但是各自的鉴权方式不同。
然后是Worker,可以理解为某个具体功能的配置信息,为运行时的配置更新器,其定义了当配置更改时,如何去对缓存进行操作
了解了这三个基本概念之后,我们就可以很快地开发一个新的插件,开发的基本流程如下:
我们需要先定义好插件的配置格式,比如xxxx
我们需要实现IWorker接口,当配置发生改变时,网关将会调用IWorker的相关方法进行更新同步,比如xxxx
我们实现Driver接口,该接口主要用于创建IWorker对象,比如xxxx
实现Factory接口,用于创建IDriver对象,比如xxxx
而此时的Factory对象,则是我们apikey驱动的入口,比如xxxx
目前我们设计了两种驱动加载的模式,一种是将驱动编译进原程序中,这样最终编译出来的是一个完整的网关程序。另外一种是将渠道单独编译成.so扩展文件,由网关节点加载.so文件。
关于插件的具体开发方式,大家可以访问我们的帮助文档来了解,如果在开发过程中遇到疑问,可以随时在我们的QQ群或者slack群内提问,我们会及时解答。