diff --git a/api/manage/manage.go b/api/manage/manage.go index 176f1b21..785d16c5 100644 --- a/api/manage/manage.go +++ b/api/manage/manage.go @@ -49,6 +49,10 @@ func (m *Manage) Start() { e.POST("/manage/auditLog/count", audit.Count, auth) e.POST("/manage/auditLog/load", audit.Load, auth) + // API调试 + e.POST("/manage/api/saveParam", m.APISaveParam, auth) + e.GET("/manage/api/queryParam", m.APIQueryParam, auth) + e.Logger.Fatal(e.Start(":" + misc.Conf.Manage.Port)) } diff --git a/api/manage/test_api.go b/api/manage/test_api.go new file mode 100644 index 00000000..d4c4bfbb --- /dev/null +++ b/api/manage/test_api.go @@ -0,0 +1,92 @@ +package manage + +import ( + "fmt" + "net/http" + + "github.com/labstack/echo" + "github.com/mafanr/g" + "github.com/sunface/talent" + "go.uber.org/zap" +) + +type TestApi struct { + ID int `json:"id" db:"id"` + ApiID string `json:"api_id" db:"api_id"` + Params string `json:"params" db:"params"` + ModifyDate string `json:"modify_date" db:"modify_date"` +} + +/* API调试模块 */ +func (m *Manage) APIQueryParam(c echo.Context) error { + apiID := talent.FormValue(c, "api_id") + if apiID == "" { + return c.JSON(http.StatusBadRequest, g.Result{ + Status: http.StatusBadRequest, + ErrCode: g.ParamEmptyC, + Message: g.ParamEmptyE, + }) + } + + query := fmt.Sprintf("select params from test_api where api_id='%s'", apiID) + rows, err := g.DB.Query(query) + if err != nil { + g.Info("access database error", zap.Error(err), zap.String("query", query)) + return c.JSON(http.StatusInternalServerError, g.Result{ + Status: http.StatusInternalServerError, + ErrCode: g.DatabaseC, + Message: g.DatabaseE, + }) + } + + var params string + rows.Next() + rows.Scan(¶ms) + + return c.JSON(http.StatusOK, g.Result{ + Status: http.StatusOK, + Data: params, + }) +} + +func (m *Manage) APISaveParam(c echo.Context) error { + apiID := talent.FormValue(c, "api_id") + params := talent.FormValue(c, "params") + if apiID == "" || params == "" { + return c.JSON(http.StatusBadRequest, g.Result{ + Status: http.StatusBadRequest, + ErrCode: g.ParamEmptyC, + Message: g.ParamEmptyE, + }) + } + + // 判断是否已经存在,若存在则更新 + var temp interface{} + exist := false + query := fmt.Sprintf("select id from test_api where api_id='%s'", apiID) + err := g.DB.Get(&temp, query) + if err == nil { + exist = true + } + + if !exist { + query = fmt.Sprintf("insert into test_api (api_id,params) values ('%s','%s')", apiID, params) + + } else { + query = fmt.Sprintf("update test_api set params='%s' where api_id='%s'", params, apiID) + } + + _, err = g.DB.Exec(query) + if err != nil { + g.Info("access database error", zap.Error(err), zap.String("query", query)) + return c.JSON(http.StatusInternalServerError, g.Result{ + Status: http.StatusInternalServerError, + ErrCode: g.DatabaseC, + Message: g.DatabaseE, + }) + } + + return c.JSON(http.StatusOK, g.Result{ + Status: http.StatusOK, + }) +} diff --git a/api/router.go b/api/router.go index 40bb135a..842b229c 100644 --- a/api/router.go +++ b/api/router.go @@ -125,7 +125,7 @@ func (rt *router) sync(r *req.Request) (int, []byte, error) { } else { // get url from etcd s := g.GetServer(r.Api.BackendAddr) if s == nil { - return http.StatusServiceUnavailable, nil, errors.New("no target server available") + return http.StatusServiceUnavailable, nil, errors.New("no server available") } url = "http://" + s.IP + r.Api.BackendURI } diff --git a/api/sql_data/juz.sql b/api/sql_data/juz.sql index a06244ba..9d8366d8 100644 --- a/api/sql_data/juz.sql +++ b/api/sql_data/juz.sql @@ -116,3 +116,12 @@ CREATE TABLE IF NOT EXISTS `audit_log` ( KEY `Index_audit_log_type` (`target_type`) USING BTREE, KEY `Index_audit_log_modifydate` (`modify_date`) USING BTREE ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT '审计日志表'; + +CREATE TABLE IF NOT EXISTS `test_api` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'id', + `api_id` varchar(255) DEFAULT '' COMMENT 'API ID', + `params` TEXT COMMENT '测试参数', + `modify_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '记录更新时间', + PRIMARY KEY (`id`), + KEY `Index_api_test_apiid` (`api_id`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT 'API调试表';