From ae0679d880672ff016889c12a951c26ef71a41b2 Mon Sep 17 00:00:00 2001 From: sunface Date: Wed, 5 Sep 2018 17:19:13 +0800 Subject: [PATCH] resolved #16 --- api/load_data.go | 4 ++-- api/manage/api.go | 18 +++++++++--------- api/router.go | 4 ++-- api/sql_data/juz.sql | 6 ++++-- misc/data.go | 1 + 5 files changed, 18 insertions(+), 15 deletions(-) diff --git a/api/load_data.go b/api/load_data.go index 059a2016..1b35d49a 100644 --- a/api/load_data.go +++ b/api/load_data.go @@ -20,8 +20,8 @@ func (p *ApiServer) loadData() { now := time.Now() date := talent.Time2StringSecond(time.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_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_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,method) values('admin','admin.test.get.v1','','',1,'http://httpbin.org/get','%s','%s','admin','%s','GET')", version, version, date)) lastLoadTime = time.Now() // 加载所有数据 diff --git a/api/manage/api.go b/api/manage/api.go index 8fd853ca..e14b4d95 100644 --- a/api/manage/api.go +++ b/api/manage/api.go @@ -144,9 +144,9 @@ func (m *Manage) DefineAPI(c echo.Context) error { pr := g.B64.EncodeToString(talent.String2Bytes(*api.ParamTable)) 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) - values ('%s','%d','%s','%s','%d','%s','%d','%d','%d','%d','%s','%d','%s','%d','%s','%d','%s','%d','%s', '%s','%s','%d','%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) + 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','%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.Method) _, err := g.DB.Exec(query) if err != nil { 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"), "") } 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'", - *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) + 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.Method, api.APIID) res, err := g.DB.Exec(query) if err != nil { 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 - 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'", - *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) + 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.Method, api.APIID) _, err = g.DB.Exec(query) if err != nil { @@ -802,8 +802,8 @@ func (m *Manage) APIBatchRelease(c echo.Context) error { } // 更新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'", - *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) + 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.Method, api.APIID) _, err = g.DB.Exec(query) if err != nil { diff --git a/api/router.go b/api/router.go index 842b229c..0009883d 100644 --- a/api/router.go +++ b/api/router.go @@ -113,7 +113,7 @@ func (rt *router) sync(r *req.Request) (int, []byte, error) { // 请求头部加入request id,方便后续业务进行跟踪 req.Header.Set("rid", strconv.FormatInt(r.Rid, 10)) - req.Header.SetMethod(r.Method) + req.Header.SetMethod(r.Api.Method) // 写入客户端真实ip 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 } - switch r.Method { + switch r.Api.Method { case "GET": // 拼接url url = url + "?" + args.String() diff --git a/api/sql_data/juz.sql b/api/sql_data/juz.sql index 9d8366d8..f5eb8c5e 100644 --- a/api/sql_data/juz.sql +++ b/api/sql_data/juz.sql @@ -7,13 +7,14 @@ CREATE TABLE IF NOT EXISTS `api_release` ( `path_type` int(11) DEFAULT '0' COMMENT '是否是路径映射类型,0代表否,1代表是', `service` varchar(255) NOT NULL COMMENT 'service名', `description` text COMMENT '介绍', - + `route_type` int(11) NOT NULL DEFAULT '1' COMMENT '代理类型,1: direct 2: redirect', `addr_type` int(11) DEFAULT '1' COMMENT '后端地址类型,1:直接寻址 2: ETCD服务发现', `backend_addr` varchar(255) NOT NULL COMMENT '后段服务地址', `backend_uri` varchar(255) DEFAUlT '' COMMENT '后端服务URI路径', `backend_type` int(11) DEFAULT '1' COMMENT '后端服务协议,1: HTTP(S) 2: Mock', `mock_data` text COMMENT 'mock类型接口,返回定义的mock数据', + `method` varchar(255) DEFAULT 'POST' COMMENT 'HTTP METHOD', `retry_strategy` int(11) DEFAULT '0' COMMENT '重试策略ID', `bw_strategy` int(11) DEFAULT '0' COMMENT '黑白名单策略ID', @@ -54,7 +55,8 @@ CREATE TABLE IF NOT EXISTS `api_define` ( `backend_uri` varchar(255) DEFAUlT '' COMMENT '后端服务URI路径', `backend_type` int(11) DEFAULT '1' COMMENT '后端服务协议,1: HTTP(S) 2: Mock', `mock_data` text COMMENT 'mock类型接口,返回定义的mock数据', - + `method` varchar(255) DEFAULT 'POST' COMMENT 'HTTP METHOD', + `retry_strategy` int(11) DEFAULT '0' COMMENT '重试策略ID', `bw_strategy` int(11) DEFAULT '0' COMMENT '黑白名单策略ID', `traffic_strategy` int(11) DEFAULT '0' COMMENT '流量控制策略ID', diff --git a/misc/data.go b/misc/data.go index 99837c6f..be3b68ae 100644 --- a/misc/data.go +++ b/misc/data.go @@ -24,6 +24,7 @@ type API struct { BackendURI string `db:"backend_uri" json:"backend_uri"` BackendType int `db:"backend_type" json:"backend_type"` MockData *string `db:"mock_data" json:"mock_data"` + Method string `db:"method" json:"method"` // 通用策略 RetryStrategy int `db:"retry_strategy" json:"retry_strategy"`