pull/25/head
sunface 7 years ago
parent 77b66ea4d1
commit ae0679d880

@ -20,8 +20,8 @@ func (p *ApiServer) loadData() {
now := time.Now() now := time.Now()
date := talent.Time2StringSecond(time.Now()) date := talent.Time2StringSecond(time.Now())
version := talent.Time2Version(now) version := talent.Time2Version(now)
g.DB.Exec(fmt.Sprintf("insert into api_release (service,api_id,description,mock_data,route_type,backend_addr,app,create_date) values('admin','admin.test.get.v1','','',1,'http://httpbin.org/get','admin','%s')", date)) g.DB.Exec(fmt.Sprintf("insert into api_release (service,api_id,description,mock_data,route_type,backend_addr,app,create_date,method) values('admin','admin.test.get.v1','','',1,'http://httpbin.org/get','admin','%s','GET')", date))
g.DB.Exec(fmt.Sprintf("insert into api_define (service,api_id,description,mock_data,route_type,backend_addr,revise_version,release_version,app,create_date) values('admin','admin.test.get.v1','','',1,'http://httpbin.org/get','%s','%s','admin','%s')", version, version, date)) g.DB.Exec(fmt.Sprintf("insert into api_define (service,api_id,description,mock_data,route_type,backend_addr,revise_version,release_version,app,create_date,method) values('admin','admin.test.get.v1','','',1,'http://httpbin.org/get','%s','%s','admin','%s','GET')", version, version, date))
lastLoadTime = time.Now() lastLoadTime = time.Now()
// 加载所有数据 // 加载所有数据

@ -144,9 +144,9 @@ func (m *Manage) DefineAPI(c echo.Context) error {
pr := g.B64.EncodeToString(talent.String2Bytes(*api.ParamTable)) pr := g.B64.EncodeToString(talent.String2Bytes(*api.ParamTable))
if action == "create" { if action == "create" {
query := fmt.Sprintf(`insert into api_define (api_id,path_type,service,description,route_type,backend_addr,backend_type,bw_strategy,retry_strategy,traffic_strategy,mock_data,traffic_on,traffic_api,traffic_ratio,traffic_ips,verify_on,param_rules,cached_time,revise_version,create_date,app,addr_type,backend_uri) query := fmt.Sprintf(`insert into api_define (api_id,path_type,service,description,route_type,backend_addr,backend_type,bw_strategy,retry_strategy,traffic_strategy,mock_data,traffic_on,traffic_api,traffic_ratio,traffic_ips,verify_on,param_rules,cached_time,revise_version,create_date,app,addr_type,backend_uri,method)
values ('%s','%d','%s','%s','%d','%s','%d','%d','%d','%d','%s','%d','%s','%d','%s','%d','%s','%d','%s', '%s','%s','%d','%s')`, values ('%s','%d','%s','%s','%d','%s','%d','%d','%d','%d','%s','%d','%s','%d','%s','%d','%s','%d','%s', '%s','%s','%d','%s','%s')`,
api.APIID, api.PathType, api.Service, *api.Desc, api.RouteType, api.BackendAddr, api.BackendType, api.BwStrategy, api.RetryStrategy, api.TrafficStrategy, *api.MockData, api.TrafficOn, api.TrafficAPI, api.TrafficRatio, api.TrafficIPs, api.VerifyOn, pr, api.CachedTime, talent.Time2Version(now), date, api.App, api.AddrType, api.BackendURI) api.APIID, api.PathType, api.Service, *api.Desc, api.RouteType, api.BackendAddr, api.BackendType, api.BwStrategy, api.RetryStrategy, api.TrafficStrategy, *api.MockData, api.TrafficOn, api.TrafficAPI, api.TrafficRatio, api.TrafficIPs, api.VerifyOn, pr, api.CachedTime, talent.Time2Version(now), date, api.App, api.AddrType, api.BackendURI, api.Method)
_, err := g.DB.Exec(query) _, err := g.DB.Exec(query)
if err != nil { if err != nil {
if strings.Contains(err.Error(), g.DUP_KEY_ERR) { if strings.Contains(err.Error(), g.DUP_KEY_ERR) {
@ -178,8 +178,8 @@ func (m *Manage) DefineAPI(c echo.Context) error {
} }
audit.Log(c.FormValue("username"), api.Service, audit.TypeApi, api.APIID, audit.OpCreate, c.FormValue("api"), "") audit.Log(c.FormValue("username"), api.Service, audit.TypeApi, api.APIID, audit.OpCreate, c.FormValue("api"), "")
} else { } else {
query := fmt.Sprintf("update api_define set description='%s',route_type='%d',backend_addr='%s',backend_type='%d',bw_strategy='%d',retry_strategy='%d',traffic_strategy='%d',mock_data='%s',traffic_on='%d',traffic_api='%s',traffic_ratio='%d',traffic_ips='%s',verify_on='%d',param_rules='%s',cached_time='%d',app='%s',addr_type='%d',backend_uri='%s' where api_id='%s'", query := fmt.Sprintf("update api_define set description='%s',route_type='%d',backend_addr='%s',backend_type='%d',bw_strategy='%d',retry_strategy='%d',traffic_strategy='%d',mock_data='%s',traffic_on='%d',traffic_api='%s',traffic_ratio='%d',traffic_ips='%s',verify_on='%d',param_rules='%s',cached_time='%d',app='%s',addr_type='%d',backend_uri='%s',method='%s' where api_id='%s'",
*api.Desc, api.RouteType, api.BackendAddr, api.BackendType, api.BwStrategy, api.RetryStrategy, api.TrafficStrategy, *api.MockData, api.TrafficOn, api.TrafficAPI, api.TrafficRatio, api.TrafficIPs, api.VerifyOn, pr, api.CachedTime, api.App, api.AddrType, api.BackendURI, api.APIID) *api.Desc, api.RouteType, api.BackendAddr, api.BackendType, api.BwStrategy, api.RetryStrategy, api.TrafficStrategy, *api.MockData, api.TrafficOn, api.TrafficAPI, api.TrafficRatio, api.TrafficIPs, api.VerifyOn, pr, api.CachedTime, api.App, api.AddrType, api.BackendURI, api.Method, api.APIID)
res, err := g.DB.Exec(query) res, err := g.DB.Exec(query)
if err != nil { if err != nil {
g.Info("access database error", zap.Error(err), zap.String("query", query)) g.Info("access database error", zap.Error(err), zap.String("query", query))
@ -457,8 +457,8 @@ func (m *Manage) APIRelease(c echo.Context) error {
} }
// 更新release // 更新release
query = fmt.Sprintf("update api_release set description='%s',route_type='%d',backend_addr='%s',backend_type='%d',mock_data='%s',retry_strategy='%d',bw_strategy='%d',traffic_strategy='%d',traffic_on='%d',traffic_api='%s',traffic_ratio='%d',traffic_ips='%s',verify_on='%d',param_rules='%s', cached_time='%d',status='%d',app='%s',addr_type='%d',backend_uri='%s' where api_id='%s'", query = fmt.Sprintf("update api_release set description='%s',route_type='%d',backend_addr='%s',backend_type='%d',mock_data='%s',retry_strategy='%d',bw_strategy='%d',traffic_strategy='%d',traffic_on='%d',traffic_api='%s',traffic_ratio='%d',traffic_ips='%s',verify_on='%d',param_rules='%s', cached_time='%d',status='%d',app='%s',addr_type='%d',backend_uri='%s',method='%s' where api_id='%s'",
*api.Desc, api.RouteType, api.BackendAddr, api.BackendType, *api.MockData, api.RetryStrategy, api.BwStrategy, api.TrafficStrategy, api.TrafficOn, api.TrafficAPI, api.TrafficRatio, api.TrafficIPs, api.VerifyOn, *api.ParamTable, api.CachedTime, misc.API_RELEASED, api.App, api.AddrType, api.BackendURI, api.APIID) *api.Desc, api.RouteType, api.BackendAddr, api.BackendType, *api.MockData, api.RetryStrategy, api.BwStrategy, api.TrafficStrategy, api.TrafficOn, api.TrafficAPI, api.TrafficRatio, api.TrafficIPs, api.VerifyOn, *api.ParamTable, api.CachedTime, misc.API_RELEASED, api.App, api.AddrType, api.BackendURI, api.Method, api.APIID)
_, err = g.DB.Exec(query) _, err = g.DB.Exec(query)
if err != nil { if err != nil {
@ -802,8 +802,8 @@ func (m *Manage) APIBatchRelease(c echo.Context) error {
} }
// 更新release // 更新release
query = fmt.Sprintf("update api_release set description='%s',route_type='%d',backend_addr='%s',backend_type='%d',mock_data='%s',retry_strategy='%d',bw_strategy='%d',traffic_on='%d',traffic_api='%s',traffic_ratio='%d',traffic_ips='%s',verify_on='%d',param_rules='%s', cached_time='%d',status='%d',app='%s',addr_type='%d',backend_uri='%s' where api_id='%s'", query = fmt.Sprintf("update api_release set description='%s',route_type='%d',backend_addr='%s',backend_type='%d',mock_data='%s',retry_strategy='%d',bw_strategy='%d',traffic_on='%d',traffic_api='%s',traffic_ratio='%d',traffic_ips='%s',verify_on='%d',param_rules='%s', cached_time='%d',status='%d',app='%s',addr_type='%d',backend_uri='%s',method='%s' where api_id='%s'",
*api.Desc, api.RouteType, api.BackendAddr, api.BackendType, *api.MockData, api.RetryStrategy, api.BwStrategy, api.TrafficOn, api.TrafficAPI, api.TrafficRatio, api.TrafficIPs, api.VerifyOn, *api.ParamTable, api.CachedTime, misc.API_RELEASED, api.App, api.AddrType, api.BackendURI, api.APIID) *api.Desc, api.RouteType, api.BackendAddr, api.BackendType, *api.MockData, api.RetryStrategy, api.BwStrategy, api.TrafficOn, api.TrafficAPI, api.TrafficRatio, api.TrafficIPs, api.VerifyOn, *api.ParamTable, api.CachedTime, misc.API_RELEASED, api.App, api.AddrType, api.BackendURI, api.Method, api.APIID)
_, err = g.DB.Exec(query) _, err = g.DB.Exec(query)
if err != nil { if err != nil {

@ -113,7 +113,7 @@ func (rt *router) sync(r *req.Request) (int, []byte, error) {
// 请求头部加入request id方便后续业务进行跟踪 // 请求头部加入request id方便后续业务进行跟踪
req.Header.Set("rid", strconv.FormatInt(r.Rid, 10)) req.Header.Set("rid", strconv.FormatInt(r.Rid, 10))
req.Header.SetMethod(r.Method) req.Header.SetMethod(r.Api.Method)
// 写入客户端真实ip // 写入客户端真实ip
req.Header.Set("X-Forwarded-For", r.ClientIP) req.Header.Set("X-Forwarded-For", r.ClientIP)
@ -129,7 +129,7 @@ func (rt *router) sync(r *req.Request) (int, []byte, error) {
} }
url = "http://" + s.IP + r.Api.BackendURI url = "http://" + s.IP + r.Api.BackendURI
} }
switch r.Method { switch r.Api.Method {
case "GET": case "GET":
// 拼接url // 拼接url
url = url + "?" + args.String() url = url + "?" + args.String()

@ -14,6 +14,7 @@ CREATE TABLE IF NOT EXISTS `api_release` (
`backend_uri` varchar(255) DEFAUlT '' COMMENT '后端服务URI路径', `backend_uri` varchar(255) DEFAUlT '' COMMENT '后端服务URI路径',
`backend_type` int(11) DEFAULT '1' COMMENT '后端服务协议,1: HTTP(S) 2: Mock', `backend_type` int(11) DEFAULT '1' COMMENT '后端服务协议,1: HTTP(S) 2: Mock',
`mock_data` text COMMENT 'mock类型接口返回定义的mock数据', `mock_data` text COMMENT 'mock类型接口返回定义的mock数据',
`method` varchar(255) DEFAULT 'POST' COMMENT 'HTTP METHOD',
`retry_strategy` int(11) DEFAULT '0' COMMENT '重试策略ID', `retry_strategy` int(11) DEFAULT '0' COMMENT '重试策略ID',
`bw_strategy` int(11) DEFAULT '0' COMMENT '黑白名单策略ID', `bw_strategy` int(11) DEFAULT '0' COMMENT '黑白名单策略ID',
@ -54,6 +55,7 @@ CREATE TABLE IF NOT EXISTS `api_define` (
`backend_uri` varchar(255) DEFAUlT '' COMMENT '后端服务URI路径', `backend_uri` varchar(255) DEFAUlT '' COMMENT '后端服务URI路径',
`backend_type` int(11) DEFAULT '1' COMMENT '后端服务协议,1: HTTP(S) 2: Mock', `backend_type` int(11) DEFAULT '1' COMMENT '后端服务协议,1: HTTP(S) 2: Mock',
`mock_data` text COMMENT 'mock类型接口返回定义的mock数据', `mock_data` text COMMENT 'mock类型接口返回定义的mock数据',
`method` varchar(255) DEFAULT 'POST' COMMENT 'HTTP METHOD',
`retry_strategy` int(11) DEFAULT '0' COMMENT '重试策略ID', `retry_strategy` int(11) DEFAULT '0' COMMENT '重试策略ID',
`bw_strategy` int(11) DEFAULT '0' COMMENT '黑白名单策略ID', `bw_strategy` int(11) DEFAULT '0' COMMENT '黑白名单策略ID',

@ -24,6 +24,7 @@ type API struct {
BackendURI string `db:"backend_uri" json:"backend_uri"` BackendURI string `db:"backend_uri" json:"backend_uri"`
BackendType int `db:"backend_type" json:"backend_type"` BackendType int `db:"backend_type" json:"backend_type"`
MockData *string `db:"mock_data" json:"mock_data"` MockData *string `db:"mock_data" json:"mock_data"`
Method string `db:"method" json:"method"`
// 通用策略 // 通用策略
RetryStrategy int `db:"retry_strategy" json:"retry_strategy"` RetryStrategy int `db:"retry_strategy" json:"retry_strategy"`

Loading…
Cancel
Save