Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Eolink
goku-api-gateway
提交
de15a85c
G
goku-api-gateway
项目概览
Eolink
/
goku-api-gateway
上一次同步 1 年多
通知
133
Star
2992
Fork
611
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
G
goku-api-gateway
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
de15a85c
编写于
5月 07, 2018
作者:
E
eoLinker API Management
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
V2.0.2
上级
dcc0db4f
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
75 addition
and
52 deletion
+75
-52
README.md
README.md
+35
-29
release/goku_ce_2.0.2.zip
release/goku_ce_2.0.2.zip
+0
-0
source_code/middleware/request_mapping.go
source_code/middleware/request_mapping.go
+40
-23
未找到文件。
README.md
浏览文件 @
de15a85c
...
...
@@ -73,28 +73,38 @@ GoKu API Gateway CE,支持OpenAPI与微服务管理,支持私有云部署,
## 更新日志
#### V
1.0.0(2018/4/17)
新增
:
#### V
2.0.2(2018/5/7)
修复
:
1.
“网关概况”新增监控信息,方便监控API运行状况,包括:请求总数、成功请求数、失败请求数、每分钟实时访问次数等;
2.
“权限控制”新增策略组,每个策略组下包括鉴权方式、IP黑白名单、流量控制三大模块;
3.
强化鉴权方式,包括Basic Auth、API Key、无认证;
4.
强化流量控制,支持允许访问时间段与禁止访问时间段;
5.
强化流量控制,支持设置每秒最大访问次数、每分钟最大访问次数、每小时最大访问次数、每天最大访问次数。
1、修复请求路径带参数时,匹配路径失败;
2、修复proxy_method配置必须大写的问题,现支持不区分大小写。
#### V2.0.1(2018/5/4)
优化:
1.
全面优化界面;
2.
优化访问性能。
1.
优化网关的错误提示。
其他:
1.
加入开源声明。
修复:
#### V1.0.1(2018/4/17)
1.
修复访问网关根路径时,报越界错误。
#### V2.0.0(2018/5/4)
新增:
1.
通过配置文件修改网关配置;
2.
新增全局IP黑白名单;
3.
参数新增支持json类型。
优化:
1.
架构优化,减少第三方依赖,提升网关性能;
2.
弃置mysql、redis数据库的使用,改用配置文件方式读取文件配置。
#### V1.0.3(2018/4/20)
修复:
1.
某个脚本的编码错误
。
1.
修复“鉴权方式”编辑页错位问题
。
#### V1.0.2(2018/4/19)
新增:
...
...
@@ -107,29 +117,25 @@ GoKu API Gateway CE,支持OpenAPI与微服务管理,支持私有云部署,
2.
修复mysql5.7环境下,sql脚本执行失败;
3.
修复访问网关后端服务时,请求提示错误的问题。
#### V1.0.
3(2018/4/20
)
#### V1.0.
1(2018/4/17
)
修复:
1.
修复“鉴权方式”编辑页错位问题
。
1.
某个脚本的编码错误
。
#### V
2.0.0(2018/5/4)
#### V
1.0.0(2018/4/17)
新增:
1.
通过配置文件修改网关配置;
2.
新增全局IP黑白名单;
3.
参数新增支持json类型。
优化:
1.
架构优化,减少第三方依赖,提升网关性能;
2.
弃置mysql、redis数据库的使用,改用配置文件方式读取文件配置。
1.
“网关概况”新增监控信息,方便监控API运行状况,包括:请求总数、成功请求数、失败请求数、每分钟实时访问次数等;
2.
“权限控制”新增策略组,每个策略组下包括鉴权方式、IP黑白名单、流量控制三大模块;
3.
强化鉴权方式,包括Basic Auth、API Key、无认证;
4.
强化流量控制,支持允许访问时间段与禁止访问时间段;
5.
强化流量控制,支持设置每秒最大访问次数、每分钟最大访问次数、每小时最大访问次数、每天最大访问次数。
#### V2.0.1(2018/5/4)
优化:
1.
优化网关的错误提示。
1.
全面优化界面;
2.
优化访问性能。
修复
:
其他
:
1.
修复访问网关根路径时,报越界错误。
\ No newline at end of file
1.
加入开源声明。
release/goku_ce_2.0.2.zip
0 → 100644
浏览文件 @
de15a85c
文件已添加
source_code/middleware/request_mapping.go
浏览文件 @
de15a85c
package
middleware
import
(
"fmt"
"net/http"
"strings"
"goku-ce/goku"
...
...
@@ -9,7 +10,7 @@ import (
)
func
Mapping
(
g
*
goku
.
Goku
,
res
http
.
ResponseWriter
,
req
*
http
.
Request
)
(
bool
,
string
){
url
:=
req
.
RequestURI
url
:=
InterceptURL
(
req
.
RequestURI
,
"?"
)
requestURI
:=
strings
.
Split
(
url
,
"/"
)
if
len
(
requestURI
)
==
2
{
if
requestURI
[
1
]
==
""
{
...
...
@@ -22,6 +23,7 @@ func Mapping(g *goku.Goku,res http.ResponseWriter, req *http.Request) (bool,stri
return
false
,
"Lack StrategyID"
}
}
fmt
.
Println
(
url
)
gatewayAlias
:=
requestURI
[
1
]
StrategyID
:=
requestURI
[
2
]
urlLen
:=
len
(
gatewayAlias
)
+
len
(
StrategyID
)
+
2
...
...
@@ -30,28 +32,28 @@ func Mapping(g *goku.Goku,res http.ResponseWriter, req *http.Request) (bool,stri
if
m
.
GatewayAlias
==
gatewayAlias
{
for
_
,
i
:=
range
m
.
StrategyList
.
Strategy
{
if
i
.
StrategyID
==
StrategyID
{
flag
=
true
f
,
r
:=
IPLimit
(
m
,
i
,
res
,
req
)
if
!
f
{
res
.
Write
([]
byte
(
r
))
return
false
,
r
}
flag
=
true
f
,
r
:=
IPLimit
(
m
,
i
,
res
,
req
)
if
!
f
{
res
.
Write
([]
byte
(
r
))
return
false
,
r
}
f
,
r
=
Auth
(
i
,
res
,
req
)
if
!
f
{
res
.
Write
([]
byte
(
r
))
return
false
,
r
}
f
,
r
=
Auth
(
i
,
res
,
req
)
if
!
f
{
res
.
Write
([]
byte
(
r
))
return
false
,
r
}
f
,
r
=
RateLimit
(
g
,
i
)
if
!
f
{
res
.
Write
([]
byte
(
r
))
return
false
,
r
}
break
f
,
r
=
RateLimit
(
g
,
i
)
if
!
f
{
res
.
Write
([]
byte
(
r
))
return
false
,
r
}
break
}
}
}
}
if
flag
{
for
_
,
i
:=
range
m
.
ApiList
.
Apis
{
if
i
.
RequestURL
==
url
[
urlLen
:
]{
...
...
@@ -109,9 +111,9 @@ func CreateRequest(api conf.ApiInfo,i conf.BackendInfo,httpRequest *http.Request
return
500
,[]
byte
(
"Fail to Parse Args"
),
make
(
map
[
string
][]
string
)
}
backendMethod
:=
api
.
ProxyMethod
backendMethod
:=
strings
.
ToUpper
(
api
.
ProxyMethod
)
backenDomain
:=
i
.
BackendPath
+
api
.
ProxyURL
requ
,
err
:=
request
.
Method
(
strings
.
ToUpper
(
backendMethod
)
,
backenDomain
)
requ
,
err
:=
request
.
Method
(
backendMethod
,
backenDomain
)
for
_
,
reqParam
:=
range
api
.
ProxyParams
{
var
param
[]
string
switch
reqParam
.
KeyPosition
{
...
...
@@ -124,7 +126,7 @@ func CreateRequest(api conf.ApiInfo,i conf.BackendInfo,httpRequest *http.Request
continue
}
case
"query"
:
param
=
httpRequest
.
Form
[
reqParam
.
Key
]
param
=
httpRequest
.
Form
[
reqParam
.
Key
]
}
if
param
==
nil
{
if
reqParam
.
NotEmpty
{
...
...
@@ -166,11 +168,15 @@ func CreateRequest(api conf.ApiInfo,i conf.BackendInfo,httpRequest *http.Request
for
key
,
values
:=
range
backendHeaders
{
requ
.
SetHeader
(
key
,
values
...
)
}
}
for
key
,
values
:=
range
backendQueryParams
{
fmt
.
Println
(
key
)
fmt
.
Println
(
values
)
requ
.
SetQueryParam
(
key
,
values
...
)
}
for
key
,
values
:=
range
backendFormParams
{
fmt
.
Println
(
key
)
fmt
.
Println
(
values
)
requ
.
SetFormParam
(
key
,
values
...
)
}
if
api
.
ProxyBodyType
==
"raw"
{
...
...
@@ -201,3 +207,14 @@ func CreateRequest(api conf.ApiInfo,i conf.BackendInfo,httpRequest *http.Request
return
res
.
StatusCode
(),
res
.
Body
(),
httpResponseHeader
}
func
InterceptURL
(
str
,
substr
string
)
string
{
result
:=
strings
.
Index
(
str
,
substr
)
var
rs
string
if
result
!=
-
1
{
rs
=
str
[
:
result
]
}
else
{
rs
=
str
}
return
rs
}
\ No newline at end of file
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录