APIGateway的設計文檔去件,包括整體架構(gòu)和數(shù)據(jù)庫設計感耙。
整體架構(gòu)
使用draw io畫的圖荠医,這里是源文件:APIGateway整體架構(gòu)
調(diào)用方吁脱,手機端、接入方等等一系列調(diào)用方
LVS負載均衡
Nginx反向代理
-
APIGateway
流控彬向,控制流量豫喧,針對同一個ip在指定的時間段內(nèi)訪問次數(shù)做限制
驗簽解密,校驗參數(shù)幢泼、驗證簽名信息紧显、將加密的信息解密
接口驗證,驗證接口是否存在缕棵、接口信息是否是當前調(diào)用者的接口
接口權(quán)限驗證孵班,ip黑名單校驗涉兽、調(diào)用的ip是否在白名單內(nèi)
業(yè)務參數(shù)驗證,校驗業(yè)務接口參數(shù)是否正確
調(diào)用業(yè)務接口篙程,可以使用dubbo泛化調(diào)用
熔斷降級枷畏,業(yè)務方接口不可用的時候或者業(yè)務方處理速度變慢,考慮進行熔斷降級
加密返回虱饿,將調(diào)用結(jié)果封裝拥诡、加密、返回
注冊中心氮发,dubbo服務注冊到注冊中心zookeeper
業(yè)務服務渴肉,各個業(yè)務提供的dubbo服務,服務注冊到注冊中心
-
存儲
本地緩存
分布式緩存
MySQL
數(shù)據(jù)庫設計
agw_api爽冕,接口信息
agw_api_param仇祭,接口對應的參數(shù)信息
agw_sys,接口所屬業(yè)務系統(tǒng)
agw_out颈畸,外部調(diào)用方
agw_out_api乌奇,外部調(diào)用方擁有的api
agw_out_ip,外部調(diào)用方的白名單配置
agw_black_ip眯娱,黑名單ip
使用draw io畫的圖礁苗,這里是源文件:APIGateway數(shù)據(jù)庫設計
agw_api
名稱 | 類型 | 是否為空 | 索引 | 默認值 | 備注 |
---|---|---|---|---|---|
id | bigint(20) | N | PRIMARY | 主鍵ID | |
created_time | datetime | N | 創(chuàng)建時間 | ||
modified_time | datetime | N | 修改時間 | ||
version | smallint(6) | N | 版本號 | ||
code | varchar(255) | N | api唯一標識 | ||
name | varchar(255) | N | api接口名 | ||
method | varchar(255) | N | api方法名 | ||
alias | varchar() | Y | api方法別名 | ||
sys_id | bigint(20) | N | 所屬業(yè)務系統(tǒng)id | ||
timeout | int(6) | N | 1000 | 超時時間,毫秒 |
agw_api_param
名稱 | 類型 | 是否為空 | 索引 | 默認值 | 備注 |
---|---|---|---|---|---|
id | bigint(20) | N | PRIMARY | 主鍵ID | |
created_time | datetime | N | 創(chuàng)建時間 | ||
modified_time | datetime | N | 修改時間 | ||
version | smallint(6) | N | 版本號 | ||
api_id | varchar(255) | N | api id | ||
name | varchar(255) | N | 參數(shù)名 | ||
type | varchar(255) | N | 參數(shù)類型 | ||
sequence | smallint(6) | N | 參數(shù)順序 |
agw_sys
名稱 | 類型 | 是否為空 | 索引 | 默認值 | 備注 |
---|---|---|---|---|---|
id | bigint(20) | N | PRIMARY | 主鍵ID | |
created_time | datetime | N | 創(chuàng)建時間 | ||
modified_time | datetime | N | 修改時間 | ||
version | smallint(6) | N | 版本號 | ||
name | varchar(255) | N | 業(yè)務系統(tǒng)名 | ||
desc | varchar(255) | N | 業(yè)務系統(tǒng)描述 |
agw_out
名稱 | 類型 | 是否為空 | 索引 | 默認值 | 備注 |
---|---|---|---|---|---|
id | bigint(20) | N | PRIMARY | 主鍵ID | |
created_time | datetime | N | 創(chuàng)建時間 | ||
modified_time | datetime | N | 修改時間 | ||
version | smallint(6) | N | 版本號 | ||
name | varchar(255) | N | 外部系統(tǒng)名 | ||
desc | varchar(255) | N | 外部系統(tǒng)描述 | ||
code | varchar(255) | N | 外部系統(tǒng)唯一標識 | ||
ip_control | tinyint(4) | Y | 0 | 是否白名單控制 0-否 1-是 |
agw_out_api
名稱 | 類型 | 是否為空 | 索引 | 默認值 | 備注 |
---|---|---|---|---|---|
id | bigint(20) | N | PRIMARY | 主鍵ID | |
created_time | datetime | N | 創(chuàng)建時間 | ||
modified_time | datetime | N | 修改時間 | ||
version | smallint(6) | N | 版本號 | ||
out_id | bigint(20) | N | 外部系統(tǒng)id | ||
api_id | bigint(20) | N | api id |
agw_out_ip
名稱 | 類型 | 是否為空 | 索引 | 默認值 | 備注 |
---|---|---|---|---|---|
id | bigint(20) | N | PRIMARY | 主鍵ID | |
created_time | datetime | N | 創(chuàng)建時間 | ||
modified_time | datetime | N | 修改時間 | ||
version | smallint(6) | N | 版本號 | ||
out_id | bigint(20) | N | 外部系統(tǒng)id | ||
ip | varchar(255) | N | 外部系統(tǒng)白名單 |
agw_black_ip
名稱 | 類型 | 是否為空 | 索引 | 默認值 | 備注 |
---|---|---|---|---|---|
id | bigint(20) | N | PRIMARY | 主鍵ID | |
created_time | datetime | N | 創(chuàng)建時間 | ||
modified_time | datetime | N | 修改時間 | ||
version | smallint(6) | N | 版本號 | ||
out_id | bigint(20) | Y | 外部系統(tǒng)id | ||
ip | varchar(255) | N | 黑名單ip |
源碼:https://github.com/dachengxi/APIGateway
原文鏈接:https://cxis.me/2020/04/07/APIGateway%E8%AE%BE%E8%AE%A1%E6%96%87%E6%A1%A3/