如果有多个产品线售卖API,那么他们都会有一些共性的需求,例如签名认证、限速等,为了避免每个产品线重复开发,那么可以实现一个网关系统来统一提供这些功能。
那么大致的流程是这样的:
- 1.产品线将自己要售卖的API注册到网关管理后台
- 2.网关管理后台将数据同步到网关系统
- 3.用户购买了某产品线的API之后,调用API。请求是统一发往网关的。
- 4.网关对用户请求进行代理,转发给相应的产品线
前几篇笔记里面,学习了soul网关divide插件如何进行请求代理和数据同步机制之websocket,对上述步骤里面的2和4有了大概的了解。
在今天的源码学习之前,可以设想一下,假如让我来为各产品线提供一个注册API到网关管理后台的方案的话,可能是这样的:
- 网关管理后台除了给管理员提供的用于UI界面CRUD的接口之外,还提供一套批量接口,这套批量接口都需要token进行鉴权,token是分发给每个产品线的
- 产品线使用分配到的token,调用相应的批量接口(批量创建、批量删除、批量更新)等,将自己的API注册到网关管理后台
这个方案的缺点是,有一定的学习成本,提供的接口放在一个文档里面,各个产品线的RD需要自行阅读和学习;接入时间长,从开发到调试到正式接入,至少要两天的时间;对产品线的业务或者业务后台有比较大的侵入性,总要在某个地方有一些代码是将API注册到网关管理后台的。总体来说就是不够无痛。
本文就来学习一下soul网关项目是如何简便地让产品线将要售卖的API注册到网关管理后台的。
首先看一下官方文档里面关于项目接入的介绍,就先看普通的springboot项目如何接入soul网关,很方便,只需要几个步骤就可以,分别是:
- 在自己的springboot项目的pom里面,加入
soul-spring-boot-starter-client-springmvc
依赖
<dependency>
<groupId>org.dromara</groupId>
<artifactId>soul-spring-boot-starter-client-springmvc</artifactId>
<version>${last.version}</version>
</dependency>
- 在springboot项目的application.yml里面加入一些配置信息
soul:
http:
adminUrl: http://localhost:9095
port: 你本项目的启动端口
contextPath: /http
appName: http
full: false
# adminUrl: 为你启动的soul-admin 项目的ip