Fix traffic backend, get and delete api methods (#1159)

diff --git a/Makefile b/Makefile
index c0f6157..5d86b21 100644
--- a/Makefile
+++ b/Makefile
@@ -100,8 +100,8 @@
 generate: controller-gen ## Generate code containing DeepCopy, DeepCopyInto, and DeepCopyObject method implementations.
 	#$(CONTROLLER_GEN) object:headerFile="./hack/boilerplate.go.txt"  crd:allowDangerousTypes=true paths="./..."
 
-.PHONY: dubbo-admin-swagger
-dubbo-admin-swagger: swagger-install ## Generate dubbo-admin swagger docs.
+.PHONY: swagger
+swagger: swagger-install ## Generate dubbo-admin swagger docs.
 	$(SWAGGER) init --parseDependency -d cmd/admin,pkg/admin -o hack/swagger
 	@rm -f hack/swagger/docs.go hack/swagger/swagger.yaml
 
diff --git a/README.md b/README.md
index e58c3e7..c9c2737 100644
--- a/README.md
+++ b/README.md
@@ -73,7 +73,7 @@
 
 ### Swagger API
 ```shell
-make  dubbo-admin-swagger  #Generate dubbo-admin swagger docs in hack/swagger
+make swagger  #Generate dubbo-admin swagger docs in hack/swagger
 ```
 
 ### 打包
diff --git a/hack/swagger/swagger.json b/hack/swagger/swagger.json
index a8b52ea..51b5000 100644
--- a/hack/swagger/swagger.json
+++ b/hack/swagger/swagger.json
@@ -95,6 +95,93 @@
                 }
             }
         },
+        "/api/{env}/metrics/cluster": {
+            "get": {
+                "description": "show cluster overview",
+                "consumes": [
+                    "application/json"
+                ],
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "metrics"
+                ],
+                "summary": "show cluster overview",
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/model.ClusterMetricsRes"
+                        }
+                    },
+                    "500": {
+                        "description": "Internal Server Error",
+                        "schema": {
+                            "$ref": "#/definitions/model.HTTPError"
+                        }
+                    }
+                }
+            }
+        },
+        "/api/{env}/metrics/flow": {
+            "get": {
+                "description": "show Prometheus collected metrics",
+                "consumes": [
+                    "application/json"
+                ],
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "metrics"
+                ],
+                "summary": "show Prometheus collected metrics",
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/model.FlowMetricsRes"
+                        }
+                    },
+                    "500": {
+                        "description": "Internal Server Error",
+                        "schema": {
+                            "$ref": "#/definitions/model.HTTPError"
+                        }
+                    }
+                }
+            }
+        },
+        "/api/{env}/metrics/metadata": {
+            "get": {
+                "description": "show metadata of the cluster, like dubbo versions, protocols, etc.",
+                "consumes": [
+                    "application/json"
+                ],
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "metrics"
+                ],
+                "summary": "show metadata of the cluster, like dubbo versions, protocols, etc.",
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/model.Metadata"
+                        }
+                    },
+                    "500": {
+                        "description": "Internal Server Error",
+                        "schema": {
+                            "$ref": "#/definitions/model.HTTPError"
+                        }
+                    }
+                }
+            }
+        },
         "/api/{env}/mock/rule": {
             "post": {
                 "description": "Create or update MockRule",
@@ -1488,13 +1575,11 @@
                 "summary": "get rule list",
                 "parameters": [
                     {
-                        "description": "rule",
-                        "name": "accesslog",
-                        "in": "body",
-                        "required": true,
-                        "schema": {
-                            "$ref": "#/definitions/model.Accesslog"
-                        }
+                        "type": "string",
+                        "description": "application name",
+                        "name": "application",
+                        "in": "query",
+                        "required": true
                     }
                 ],
                 "responses": {
@@ -1617,13 +1702,11 @@
                 "summary": "delete rule",
                 "parameters": [
                     {
-                        "description": "rule",
-                        "name": "accesslog",
-                        "in": "body",
-                        "required": true,
-                        "schema": {
-                            "$ref": "#/definitions/model.Accesslog"
-                        }
+                        "type": "string",
+                        "description": "application name",
+                        "name": "application",
+                        "in": "query",
+                        "required": true
                     }
                 ],
                 "responses": {
@@ -1633,12 +1716,6 @@
                             "type": "bool"
                         }
                     },
-                    "400": {
-                        "description": "Bad Request",
-                        "schema": {
-                            "$ref": "#/definitions/model.HTTPError"
-                        }
-                    },
                     "500": {
                         "description": "Internal Server Error",
                         "schema": {
@@ -1663,13 +1740,25 @@
                 "summary": "get rule list",
                 "parameters": [
                     {
-                        "description": "rule",
-                        "name": "argument",
-                        "in": "body",
-                        "required": true,
-                        "schema": {
-                            "$ref": "#/definitions/model.Argument"
-                        }
+                        "type": "string",
+                        "description": "service name",
+                        "name": "service",
+                        "in": "query",
+                        "required": true
+                    },
+                    {
+                        "type": "string",
+                        "description": "service version",
+                        "name": "version",
+                        "in": "query",
+                        "required": true
+                    },
+                    {
+                        "type": "string",
+                        "description": "service group",
+                        "name": "group",
+                        "in": "query",
+                        "required": true
                     }
                 ],
                 "responses": {
@@ -1792,13 +1881,25 @@
                 "summary": "delete rule",
                 "parameters": [
                     {
-                        "description": "rule",
-                        "name": "argument",
-                        "in": "body",
-                        "required": true,
-                        "schema": {
-                            "$ref": "#/definitions/model.Argument"
-                        }
+                        "type": "string",
+                        "description": "service name",
+                        "name": "service",
+                        "in": "query",
+                        "required": true
+                    },
+                    {
+                        "type": "string",
+                        "description": "service version",
+                        "name": "version",
+                        "in": "query",
+                        "required": true
+                    },
+                    {
+                        "type": "string",
+                        "description": "service group",
+                        "name": "group",
+                        "in": "query",
+                        "required": true
                     }
                 ],
                 "responses": {
@@ -1808,12 +1909,6 @@
                             "type": "bool"
                         }
                     },
-                    "400": {
-                        "description": "Bad Request",
-                        "schema": {
-                            "$ref": "#/definitions/model.HTTPError"
-                        }
-                    },
                     "500": {
                         "description": "Internal Server Error",
                         "schema": {
@@ -1838,13 +1933,11 @@
                 "summary": "get rule list",
                 "parameters": [
                     {
-                        "description": "rule",
-                        "name": "gray",
-                        "in": "body",
-                        "required": true,
-                        "schema": {
-                            "$ref": "#/definitions/model.Gray"
-                        }
+                        "type": "string",
+                        "description": "application name",
+                        "name": "application",
+                        "in": "query",
+                        "required": true
                     }
                 ],
                 "responses": {
@@ -1967,13 +2060,11 @@
                 "summary": "delete rule",
                 "parameters": [
                     {
-                        "description": "rule",
-                        "name": "gray",
-                        "in": "body",
-                        "required": true,
-                        "schema": {
-                            "$ref": "#/definitions/model.Gray"
-                        }
+                        "type": "string",
+                        "description": "application name",
+                        "name": "application",
+                        "in": "query",
+                        "required": true
                     }
                 ],
                 "responses": {
@@ -1983,12 +2074,6 @@
                             "type": "bool"
                         }
                     },
-                    "400": {
-                        "description": "Bad Request",
-                        "schema": {
-                            "$ref": "#/definitions/model.HTTPError"
-                        }
-                    },
                     "500": {
                         "description": "Internal Server Error",
                         "schema": {
@@ -2013,13 +2098,25 @@
                 "summary": "get rule list",
                 "parameters": [
                     {
-                        "description": "rule",
-                        "name": "mock",
-                        "in": "body",
-                        "required": true,
-                        "schema": {
-                            "$ref": "#/definitions/model.Mock"
-                        }
+                        "type": "string",
+                        "description": "service name",
+                        "name": "service",
+                        "in": "query",
+                        "required": true
+                    },
+                    {
+                        "type": "string",
+                        "description": "service version",
+                        "name": "version",
+                        "in": "query",
+                        "required": true
+                    },
+                    {
+                        "type": "string",
+                        "description": "service group",
+                        "name": "group",
+                        "in": "query",
+                        "required": true
                     }
                 ],
                 "responses": {
@@ -2142,13 +2239,25 @@
                 "summary": "delete rule",
                 "parameters": [
                     {
-                        "description": "rule",
-                        "name": "mock",
-                        "in": "body",
-                        "required": true,
-                        "schema": {
-                            "$ref": "#/definitions/model.Mock"
-                        }
+                        "type": "string",
+                        "description": "service name",
+                        "name": "service",
+                        "in": "query",
+                        "required": true
+                    },
+                    {
+                        "type": "string",
+                        "description": "service version",
+                        "name": "version",
+                        "in": "query",
+                        "required": true
+                    },
+                    {
+                        "type": "string",
+                        "description": "service group",
+                        "name": "group",
+                        "in": "query",
+                        "required": true
                     }
                 ],
                 "responses": {
@@ -2188,13 +2297,25 @@
                 "summary": "get rule list",
                 "parameters": [
                     {
-                        "description": "rule",
-                        "name": "region",
-                        "in": "body",
-                        "required": true,
-                        "schema": {
-                            "$ref": "#/definitions/model.Region"
-                        }
+                        "type": "string",
+                        "description": "service name",
+                        "name": "service",
+                        "in": "query",
+                        "required": true
+                    },
+                    {
+                        "type": "string",
+                        "description": "service version",
+                        "name": "version",
+                        "in": "query",
+                        "required": true
+                    },
+                    {
+                        "type": "string",
+                        "description": "service group",
+                        "name": "group",
+                        "in": "query",
+                        "required": true
                     }
                 ],
                 "responses": {
@@ -2317,13 +2438,25 @@
                 "summary": "delete rule",
                 "parameters": [
                     {
-                        "description": "rule",
-                        "name": "region",
-                        "in": "body",
-                        "required": true,
-                        "schema": {
-                            "$ref": "#/definitions/model.Region"
-                        }
+                        "type": "string",
+                        "description": "service name",
+                        "name": "service",
+                        "in": "query",
+                        "required": true
+                    },
+                    {
+                        "type": "string",
+                        "description": "service version",
+                        "name": "version",
+                        "in": "query",
+                        "required": true
+                    },
+                    {
+                        "type": "string",
+                        "description": "service group",
+                        "name": "group",
+                        "in": "query",
+                        "required": true
                     }
                 ],
                 "responses": {
@@ -2363,13 +2496,25 @@
                 "summary": "get rule list",
                 "parameters": [
                     {
-                        "description": "rule",
-                        "name": "retry",
-                        "in": "body",
-                        "required": true,
-                        "schema": {
-                            "$ref": "#/definitions/model.Retry"
-                        }
+                        "type": "string",
+                        "description": "service name",
+                        "name": "service",
+                        "in": "query",
+                        "required": true
+                    },
+                    {
+                        "type": "string",
+                        "description": "service version",
+                        "name": "version",
+                        "in": "query",
+                        "required": true
+                    },
+                    {
+                        "type": "string",
+                        "description": "service group",
+                        "name": "group",
+                        "in": "query",
+                        "required": true
                     }
                 ],
                 "responses": {
@@ -2382,12 +2527,6 @@
                             }
                         }
                     },
-                    "400": {
-                        "description": "Bad Request",
-                        "schema": {
-                            "$ref": "#/definitions/model.HTTPError"
-                        }
-                    },
                     "500": {
                         "description": "Internal Server Error",
                         "schema": {
@@ -2498,13 +2637,25 @@
                 "summary": "delete rule",
                 "parameters": [
                     {
-                        "description": "rule",
-                        "name": "retry",
-                        "in": "body",
-                        "required": true,
-                        "schema": {
-                            "$ref": "#/definitions/model.Retry"
-                        }
+                        "type": "string",
+                        "description": "service name",
+                        "name": "service",
+                        "in": "query",
+                        "required": true
+                    },
+                    {
+                        "type": "string",
+                        "description": "service version",
+                        "name": "version",
+                        "in": "query",
+                        "required": true
+                    },
+                    {
+                        "type": "string",
+                        "description": "service group",
+                        "name": "group",
+                        "in": "query",
+                        "required": true
                     }
                 ],
                 "responses": {
@@ -2514,12 +2665,6 @@
                             "type": "bool"
                         }
                     },
-                    "400": {
-                        "description": "Bad Request",
-                        "schema": {
-                            "$ref": "#/definitions/model.HTTPError"
-                        }
-                    },
                     "500": {
                         "description": "Internal Server Error",
                         "schema": {
@@ -2544,13 +2689,25 @@
                 "summary": "get timeout rule list",
                 "parameters": [
                     {
-                        "description": "timeout rule",
-                        "name": "timeout",
-                        "in": "body",
-                        "required": true,
-                        "schema": {
-                            "$ref": "#/definitions/model.Timeout"
-                        }
+                        "type": "string",
+                        "description": "service name",
+                        "name": "service",
+                        "in": "query",
+                        "required": true
+                    },
+                    {
+                        "type": "string",
+                        "description": "service version",
+                        "name": "version",
+                        "in": "query",
+                        "required": true
+                    },
+                    {
+                        "type": "string",
+                        "description": "service group",
+                        "name": "group",
+                        "in": "query",
+                        "required": true
                     }
                 ],
                 "responses": {
@@ -2673,13 +2830,25 @@
                 "summary": "delete a new timeout rule",
                 "parameters": [
                     {
-                        "description": "timeout rule",
-                        "name": "timeout",
-                        "in": "body",
-                        "required": true,
-                        "schema": {
-                            "$ref": "#/definitions/model.Timeout"
-                        }
+                        "type": "string",
+                        "description": "service name",
+                        "name": "service",
+                        "in": "query",
+                        "required": true
+                    },
+                    {
+                        "type": "string",
+                        "description": "service version",
+                        "name": "version",
+                        "in": "query",
+                        "required": true
+                    },
+                    {
+                        "type": "string",
+                        "description": "service group",
+                        "name": "group",
+                        "in": "query",
+                        "required": true
                     }
                 ],
                 "responses": {
@@ -2689,12 +2858,6 @@
                             "type": "boolean"
                         }
                     },
-                    "400": {
-                        "description": "Bad Request",
-                        "schema": {
-                            "$ref": "#/definitions/model.HTTPError"
-                        }
-                    },
                     "500": {
                         "description": "Internal Server Error",
                         "schema": {
@@ -2719,13 +2882,25 @@
                 "summary": "get rule list",
                 "parameters": [
                     {
-                        "description": "rule",
-                        "name": "weight",
-                        "in": "body",
-                        "required": true,
-                        "schema": {
-                            "$ref": "#/definitions/model.Weight"
-                        }
+                        "type": "string",
+                        "description": "service name",
+                        "name": "service",
+                        "in": "query",
+                        "required": true
+                    },
+                    {
+                        "type": "string",
+                        "description": "service version",
+                        "name": "version",
+                        "in": "query",
+                        "required": true
+                    },
+                    {
+                        "type": "string",
+                        "description": "service group",
+                        "name": "group",
+                        "in": "query",
+                        "required": true
                     }
                 ],
                 "responses": {
@@ -2848,13 +3023,25 @@
                 "summary": "delete rule",
                 "parameters": [
                     {
-                        "description": "rule",
-                        "name": "weight",
-                        "in": "body",
-                        "required": true,
-                        "schema": {
-                            "$ref": "#/definitions/model.Weight"
-                        }
+                        "type": "string",
+                        "description": "service name",
+                        "name": "service",
+                        "in": "query",
+                        "required": true
+                    },
+                    {
+                        "type": "string",
+                        "description": "service version",
+                        "name": "version",
+                        "in": "query",
+                        "required": true
+                    },
+                    {
+                        "type": "string",
+                        "description": "service group",
+                        "name": "group",
+                        "in": "query",
+                        "required": true
                     }
                 ],
                 "responses": {
@@ -2864,12 +3051,6 @@
                             "type": "bool"
                         }
                     },
-                    "400": {
-                        "description": "Bad Request",
-                        "schema": {
-                            "$ref": "#/definitions/model.HTTPError"
-                        }
-                    },
                     "500": {
                         "description": "Internal Server Error",
                         "schema": {
@@ -2878,6 +3059,29 @@
                     }
                 }
             }
+        },
+        "/api/{env}/version": {
+            "get": {
+                "description": "show basic information of the Admin process",
+                "consumes": [
+                    "application/json"
+                ],
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "metrics"
+                ],
+                "summary": "show basic information of the Admin process",
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/version.Version"
+                        }
+                    }
+                }
+            }
         }
     },
     "definitions": {
@@ -2931,6 +3135,17 @@
                 }
             }
         },
+        "model.ClusterMetricsRes": {
+            "type": "object",
+            "properties": {
+                "data": {
+                    "type": "object",
+                    "additionalProperties": {
+                        "type": "integer"
+                    }
+                }
+            }
+        },
         "model.ConditionMatch": {
             "type": "object",
             "properties": {
@@ -3097,6 +3312,17 @@
                 }
             }
         },
+        "model.FlowMetricsRes": {
+            "type": "object",
+            "properties": {
+                "data": {
+                    "type": "object",
+                    "additionalProperties": {
+                        "type": "number"
+                    }
+                }
+            }
+        },
         "model.Gray": {
             "type": "object",
             "required": [
@@ -3181,6 +3407,34 @@
                 }
             }
         },
+        "model.Metadata": {
+            "type": "object",
+            "properties": {
+                "configCenter": {
+                    "type": "string"
+                },
+                "metadataCenter": {
+                    "type": "string"
+                },
+                "protocols": {
+                    "type": "array",
+                    "items": {}
+                },
+                "registry": {
+                    "type": "string"
+                },
+                "rules": {
+                    "type": "array",
+                    "items": {
+                        "type": "string"
+                    }
+                },
+                "versions": {
+                    "type": "array",
+                    "items": {}
+                }
+            }
+        },
         "model.Mock": {
             "type": "object",
             "required": [
@@ -3590,11 +3844,6 @@
                 1000000,
                 1000000000,
                 60000000000,
-                1,
-                1000,
-                1000000,
-                1000000000,
-                60000000000,
                 3600000000000,
                 1,
                 1000,
@@ -3609,11 +3858,6 @@
                 "Millisecond",
                 "Second",
                 "Minute",
-                "Nanosecond",
-                "Microsecond",
-                "Millisecond",
-                "Second",
-                "Minute",
                 "Hour",
                 "Nanosecond",
                 "Microsecond",
@@ -3622,6 +3866,32 @@
                 "Minute",
                 "Hour"
             ]
+        },
+        "version.Version": {
+            "type": "object",
+            "properties": {
+                "buildDate": {
+                    "type": "string"
+                },
+                "compiler": {
+                    "type": "string"
+                },
+                "gitCommit": {
+                    "type": "string"
+                },
+                "gitTreeState": {
+                    "type": "string"
+                },
+                "gitVersion": {
+                    "type": "string"
+                },
+                "goVersion": {
+                    "type": "string"
+                },
+                "platform": {
+                    "type": "string"
+                }
+            }
         }
     }
 }
\ No newline at end of file
diff --git a/pkg/admin/handlers/traffic/accesslog.go b/pkg/admin/handlers/traffic/accesslog.go
index 3fc7e48..56682da 100644
--- a/pkg/admin/handlers/traffic/accesslog.go
+++ b/pkg/admin/handlers/traffic/accesslog.go
@@ -68,15 +68,21 @@
 // @Tags         TrafficAccesslog
 // @Accept       json
 // @Produce      json
-// @Param        accesslog  body  model.Accesslog      true   "rule"
+// @Param        application  query  string  true   "application name"
 // @Success      200  {bool}    true
-// @Failure      400  {object}  model.HTTPError
 // @Failure      500  {object}  model.HTTPError
 // @Router       /api/{env}/traffic/accesslog [delete]
 func DeleteAccesslog(c *gin.Context) {
-	doAccesslogUpdate(c, func(a *model.Accesslog) error {
-		return accesslogSvc.Delete(a)
-	})
+	a := &model.Accesslog{
+		Application: c.Query("application"),
+	}
+
+	err := accesslogSvc.Delete(a)
+	if err != nil {
+		c.JSON(http.StatusInternalServerError, model.HTTPError{Error: err.Error()})
+	}
+
+	c.JSON(http.StatusOK, true)
 }
 
 // SearchAccesslog   get rule list
@@ -85,7 +91,7 @@
 // @Tags         TrafficAccesslog
 // @Accept       json
 // @Produce      json
-// @Param        accesslog  body  model.Accesslog      true   "rule"
+// @Param        application  query  string  true   "application name"
 // @Success      200  {object}  []model.Accesslog
 // @Failure      500  {object}  model.HTTPError
 // @Router       /api/{env}/traffic/accesslog [get]
diff --git a/pkg/admin/handlers/traffic/argument.go b/pkg/admin/handlers/traffic/argument.go
index c643b86..ada5194 100644
--- a/pkg/admin/handlers/traffic/argument.go
+++ b/pkg/admin/handlers/traffic/argument.go
@@ -68,15 +68,25 @@
 // @Tags         TrafficArgument
 // @Accept       json
 // @Produce      json
-// @Param        argument  body  model.Argument      true   "rule"
+// @Param        service  query  string  true   "service name"
+// @Param        version  query  string  true   "service version"
+// @Param        group    query  string  true   "service group"
 // @Success      200  {bool}    true
-// @Failure      400  {object}  model.HTTPError
 // @Failure      500  {object}  model.HTTPError
 // @Router       /api/{env}/traffic/argument [delete]
 func DeleteArgument(c *gin.Context) {
-	doArgumentUpdate(c, func(a *model.Argument) error {
-		return argumentSvc.Delete(a)
-	})
+	a := &model.Argument{
+		Service: c.Query("service"),
+		Group:   c.Query("group"),
+		Version: c.Query("version"),
+	}
+
+	err := argumentSvc.Delete(a)
+	if err != nil {
+		c.JSON(http.StatusInternalServerError, model.HTTPError{Error: err.Error()})
+	}
+
+	c.JSON(http.StatusOK, true)
 }
 
 // SearchArgument   get rule list
@@ -85,7 +95,9 @@
 // @Tags         TrafficArgument
 // @Accept       json
 // @Produce      json
-// @Param        argument  body  model.Argument      true   "rule"
+// @Param        service  query  string  true   "service name"
+// @Param        version  query  string  true   "service version"
+// @Param        group    query  string  true   "service group"
 // @Success      200  {object}  []model.Argument
 // @Failure      500  {object}  model.HTTPError
 // @Router       /api/{env}/traffic/argument [get]
diff --git a/pkg/admin/handlers/traffic/gray.go b/pkg/admin/handlers/traffic/gray.go
index dc7150b..c0c4a17 100644
--- a/pkg/admin/handlers/traffic/gray.go
+++ b/pkg/admin/handlers/traffic/gray.go
@@ -68,15 +68,21 @@
 // @Tags         TrafficGray
 // @Accept       json
 // @Produce      json
-// @Param        gray  body  model.Gray      true   "rule"
+// @Param        application  query  string  true   "application name"
 // @Success      200  {bool}    true
-// @Failure      400  {object}  model.HTTPError
 // @Failure      500  {object}  model.HTTPError
 // @Router       /api/{env}/traffic/gray [delete]
 func DeleteGray(c *gin.Context) {
-	doGrayUpdate(c, func(g *model.Gray) error {
-		return graySVC.Delete(g)
-	})
+	g := &model.Gray{
+		Application: c.Query("application"),
+	}
+
+	err := graySVC.Delete(g)
+	if err != nil {
+		c.JSON(http.StatusInternalServerError, model.HTTPError{Error: err.Error()})
+	}
+
+	c.JSON(http.StatusOK, true)
 }
 
 // SearchGray   get rule list
@@ -85,7 +91,7 @@
 // @Tags         TrafficGray
 // @Accept       json
 // @Produce      json
-// @Param        gray  body  model.Gray      true   "rule"
+// @Param        application  query  string  true   "application name"
 // @Success      200  {object}  []model.Gray
 // @Failure      500  {object}  model.HTTPError
 // @Router       /api/{env}/traffic/gray [get]
diff --git a/pkg/admin/handlers/traffic/mock.go b/pkg/admin/handlers/traffic/mock.go
index bf80a78..b452fb7 100644
--- a/pkg/admin/handlers/traffic/mock.go
+++ b/pkg/admin/handlers/traffic/mock.go
@@ -68,15 +68,26 @@
 // @Tags         TrafficMock
 // @Accept       json
 // @Produce      json
-// @Param        mock  body  model.Mock      true   "rule"
+// @Param        service  query  string  true   "service name"
+// @Param        version  query  string  true   "service version"
+// @Param        group    query  string  true   "service group"
 // @Success      200  {bool}    true
 // @Failure      400  {object}  model.HTTPError
 // @Failure      500  {object}  model.HTTPError
 // @Router       /api/{env}/traffic/mock [delete]
 func DeleteMock(c *gin.Context) {
-	doMockUpdate(c, func(m *model.Mock) error {
-		return mockSvc.Delete(m)
-	})
+	m := &model.Mock{
+		Service: c.Query("service"),
+		Group:   c.Query("group"),
+		Version: c.Query("version"),
+	}
+
+	err := mockSvc.Delete(m)
+	if err != nil {
+		c.JSON(http.StatusInternalServerError, model.HTTPError{Error: err.Error()})
+	}
+
+	c.JSON(http.StatusOK, true)
 }
 
 // SearchMock   get rule list
@@ -85,7 +96,9 @@
 // @Tags         TrafficMock
 // @Accept       json
 // @Produce      json
-// @Param        mock  body  model.Mock      true   "rule"
+// @Param        service  query  string  true   "service name"
+// @Param        version  query  string  true   "service version"
+// @Param        group    query  string  true   "service group"
 // @Success      200  {object}  []model.Mock
 // @Failure      500  {object}  model.HTTPError
 // @Router       /api/{env}/traffic/mock [get]
diff --git a/pkg/admin/handlers/traffic/region.go b/pkg/admin/handlers/traffic/region.go
index 616b252..e07504d 100644
--- a/pkg/admin/handlers/traffic/region.go
+++ b/pkg/admin/handlers/traffic/region.go
@@ -68,15 +68,26 @@
 // @Tags         TrafficRegion
 // @Accept       json
 // @Produce      json
-// @Param        region  body  model.Region      true   "rule"
+// @Param        service  query  string  true   "service name"
+// @Param        version  query  string  true   "service version"
+// @Param        group    query  string  true   "service group"
 // @Success      200  {bool}    true
 // @Failure      400  {object}  model.HTTPError
 // @Failure      500  {object}  model.HTTPError
 // @Router       /api/{env}/traffic/region [delete]
 func DeleteRegion(c *gin.Context) {
-	doRegionUpdate(c, func(r *model.Region) error {
-		return regionSVC.Delete(r)
-	})
+	r := &model.Region{
+		Service: c.Query("service"),
+		Group:   c.Query("group"),
+		Version: c.Query("version"),
+	}
+
+	err := regionSVC.Delete(r)
+	if err != nil {
+		c.JSON(http.StatusInternalServerError, model.HTTPError{Error: err.Error()})
+	}
+
+	c.JSON(http.StatusOK, true)
 }
 
 // SearchRegion   get rule list
@@ -85,7 +96,9 @@
 // @Tags         TrafficRegion
 // @Accept       json
 // @Produce      json
-// @Param        region  body  model.Region      true   "rule"
+// @Param        service  query  string  true   "service name"
+// @Param        version  query  string  true   "service version"
+// @Param        group    query  string  true   "service group"
 // @Success      200  {object}  []model.Region
 // @Failure      500  {object}  model.HTTPError
 // @Router       /api/{env}/traffic/region [get]
diff --git a/pkg/admin/handlers/traffic/retry.go b/pkg/admin/handlers/traffic/retry.go
index 0c7c158..71cbba3 100644
--- a/pkg/admin/handlers/traffic/retry.go
+++ b/pkg/admin/handlers/traffic/retry.go
@@ -68,15 +68,25 @@
 // @Tags         TrafficRetry
 // @Accept       json
 // @Produce      json
-// @Param        retry  body  model.Retry      true   "rule"
+// @Param        service  query  string  true   "service name"
+// @Param        version  query  string  true   "service version"
+// @Param        group    query  string  true   "service group"
 // @Success      200  {bool}    true
-// @Failure      400  {object}  model.HTTPError
 // @Failure      500  {object}  model.HTTPError
 // @Router       /api/{env}/traffic/retry [delete]
 func DeleteRetry(c *gin.Context) {
-	doRetryUpdate(c, func(r *model.Retry) error {
-		return retrySvc.Delete(r)
-	})
+	r := &model.Retry{
+		Service: c.Query("service"),
+		Group:   c.Query("group"),
+		Version: c.Query("version"),
+	}
+
+	err := retrySvc.Delete(r)
+	if err != nil {
+		c.JSON(http.StatusInternalServerError, model.HTTPError{Error: err.Error()})
+	}
+
+	c.JSON(http.StatusOK, true)
 }
 
 // SearchRetry   get rule list
@@ -85,9 +95,10 @@
 // @Tags         TrafficRetry
 // @Accept       json
 // @Produce      json
-// @Param        retry  body  model.Retry      true   "rule"
+// @Param        service  query  string  true   "service name"
+// @Param        version  query  string  true   "service version"
+// @Param        group    query  string  true   "service group"
 // @Success      200  {object}  []model.Retry
-// @Failure      400  {object}  model.HTTPError
 // @Failure      500  {object}  model.HTTPError
 // @Router       /api/{env}/traffic/retry [get]
 func SearchRetry(c *gin.Context) {
@@ -96,11 +107,6 @@
 		Group:   c.Query("group"),
 		Version: c.Query("version"),
 	}
-	if err := c.ShouldBindJSON(&r); err != nil {
-		logger.Errorf("Error parsing rule input when trying to create override rule, err msg is %s.", err.Error())
-		c.JSON(http.StatusBadRequest, model.HTTPError{Error: err.Error()})
-		return
-	}
 
 	result, err := retrySvc.Search(r)
 	if err != nil {
diff --git a/pkg/admin/handlers/traffic/timeout.go b/pkg/admin/handlers/traffic/timeout.go
index 9b8ec23..48adc85 100644
--- a/pkg/admin/handlers/traffic/timeout.go
+++ b/pkg/admin/handlers/traffic/timeout.go
@@ -68,15 +68,25 @@
 // @Tags         TrafficTimeout
 // @Accept       json
 // @Produce      json
-// @Param        timeout  body  model.Timeout      true   "timeout rule"
+// @Param        service  query  string  true   "service name"
+// @Param        version  query  string  true   "service version"
+// @Param        group    query  string  true   "service group"
 // @Success      200  {boolean} true
-// @Failure      400  {object}  model.HTTPError
 // @Failure      500  {object}  model.HTTPError
 // @Router       /api/{env}/traffic/timeout [delete]
 func DeleteTimeout(c *gin.Context) {
-	doTimeoutUpdate(c, func(t *model.Timeout) error {
-		return timeoutSvc.Delete(t)
-	})
+	t := &model.Timeout{
+		Service: c.Query("service"),
+		Group:   c.Query("group"),
+		Version: c.Query("version"),
+	}
+
+	err := timeoutSvc.Delete(t)
+	if err != nil {
+		c.JSON(http.StatusInternalServerError, model.HTTPError{Error: err.Error()})
+	}
+
+	c.JSON(http.StatusOK, true)
 }
 
 // SearchTimeout get timeout rule list
@@ -85,7 +95,9 @@
 // @Tags         TrafficTimeout
 // @Accept       json
 // @Produce      json
-// @Param        timeout  body  model.Timeout      true   "timeout rule"
+// @Param        service  query  string  true   "service name"
+// @Param        version  query  string  true   "service version"
+// @Param        group    query  string  true   "service group"
 // @Success      200  {object}  []model.Timeout
 // @Failure      500  {object}  model.HTTPError
 // @Router       /api/{env}/traffic/timeout [get]
diff --git a/pkg/admin/handlers/traffic/weight.go b/pkg/admin/handlers/traffic/weight.go
index 4afae5b..ad12b36 100644
--- a/pkg/admin/handlers/traffic/weight.go
+++ b/pkg/admin/handlers/traffic/weight.go
@@ -68,15 +68,25 @@
 // @Tags         TrafficWeight
 // @Accept       json
 // @Produce      json
-// @Param        weight  body  model.Weight      true   "rule"
+// @Param        service  query  string  true   "service name"
+// @Param        version  query  string  true   "service version"
+// @Param        group    query  string  true   "service group"
 // @Success      200  {bool}    true
-// @Failure      400  {object}  model.HTTPError
 // @Failure      500  {object}  model.HTTPError
 // @Router       /api/{env}/traffic/weight [delete]
 func DeleteWeight(c *gin.Context) {
-	doWeightUpdate(c, func(p *model.Percentage) error {
-		return weightSvc.Delete(p)
-	})
+	p := &model.Percentage{
+		Service: c.Query("service"),
+		Group:   c.Query("group"),
+		Version: c.Query("version"),
+	}
+
+	err := weightSvc.Delete(p)
+	if err != nil {
+		c.JSON(http.StatusInternalServerError, model.HTTPError{Error: err.Error()})
+	}
+
+	c.JSON(http.StatusOK, true)
 }
 
 // SearchWeight get rule list
@@ -85,7 +95,9 @@
 // @Tags         TrafficWeight
 // @Accept       json
 // @Produce      json
-// @Param        weight  body  model.Weight      true   "rule"
+// @Param        service  query  string  true   "service name"
+// @Param        version  query  string  true   "service version"
+// @Param        group    query  string  true   "service group"
 // @Success      200  {object}  []model.Weight
 // @Failure      500  {object}  model.HTTPError
 // @Router       /api/{env}/traffic/weight [get]