update open api, delete unused code (#113)

* update open api, delete unused code

* update open api, delete unused code
diff --git a/docs/api.yaml b/docs/api.yaml
index 64f2b33..cf15553 100644
--- a/docs/api.yaml
+++ b/docs/api.yaml
@@ -21,6 +21,22 @@
           in: query
           description: 'wait until any kv changed. for example wait=5s, server will not response until 5 seconds during that time window, if any kv changed, server will return 200 and kv list, otherwise return 304 and empty body'
           type: string
+        - name: match
+          in: query
+          description: 'match works with label query param, it specifies label match pattern. if it is empty, server will return kv which''s labels partial match the label query param. uf it is exact, server will return kv which''s labels exact match the label query param'
+          type: string
+        - name: revision
+          in: query
+          description: 'each time you query,server will return a number in header X-Kie-Revision. you can record it in client side, use this number as param value. if current revision is greater than it, server will return data'
+          type: string
+        - name: pageSize
+          in: query
+          description: pagination
+          type: string
+        - name: pageNum
+          in: query
+          description: pagination
+          type: string
       consumes:
         - '*/*'
       produces:
@@ -30,28 +46,31 @@
         '200':
           description: ''
           schema:
-            $ref: '#/definitions/KVResponse'
+            $ref: '#/definitions/v1.DocResponseGetKey'
           headers:
-            X-RateLimit-Limit:
+            X-Kie-Revision:
+              description: 'cluster latest revision number, if key value is changed, it will increase.'
               type: integer
-              description: Request limit per hour.
         '304':
           description: empty body
+        '404':
+          description: ''
+          headers:
+            X-Kie-Revision:
+              description: 'cluster latest revision number, if key value is changed, it will increase.'
+              type: integer
     delete:
-      summary: 'delete key by kvID and labelID. Want better performance, give labelID'
+      summary: delete key by kv ID.
       operationId: Delete
       parameters:
         - name: project
           in: path
           required: true
           type: string
-        - name: kvID
+        - name: kv_id
           in: query
           required: true
           type: string
-        - name: labelID
-          in: query
-          type: string
       consumes:
         - '*/*'
       produces:
@@ -59,8 +78,6 @@
       responses:
         '204':
           description: Delete success
-        '400':
-          description: 'Failed,check url'
         '500':
           description: Server error
   '/v1/{project}/kie/kv/{key}':
@@ -80,6 +97,26 @@
           in: query
           description: 'label pairs,for example &label=service:order&label=version:1.0.0'
           type: string
+        - name: wait
+          in: query
+          description: 'wait until any kv changed. for example wait=5s, server will not response until 5 seconds during that time window, if any kv changed, server will return 200 and kv list, otherwise return 304 and empty body'
+          type: string
+        - name: match
+          in: query
+          description: 'match works with label query param, it specifies label match pattern. if it is empty, server will return kv which''s labels partial match the label query param. uf it is exact, server will return kv which''s labels exact match the label query param'
+          type: string
+        - name: revision
+          in: query
+          description: 'each time you query,server will return a number in header X-Kie-Revision. you can record it in client side, use this number as param value. if current revision is greater than it, server will return data'
+          type: string
+        - name: pageSize
+          in: query
+          description: pagination
+          type: string
+        - name: pageNum
+          in: query
+          description: pagination
+          type: string
       consumes:
         - '*/*'
       produces:
@@ -89,11 +126,19 @@
         '200':
           description: get key value success
           schema:
-            type: array
-            items:
-              $ref: '#/definitions/KVResponse'
+            $ref: '#/definitions/v1.DocResponseGetKey'
+          headers:
+            X-Kie-Revision:
+              description: 'cluster latest revision number, if key value is changed, it will increase.'
+              type: integer
         '304':
           description: empty body
+        '404':
+          description: ''
+          headers:
+            X-Kie-Revision:
+              description: 'cluster latest revision number, if key value is changed, it will increase.'
+              type: integer
     put:
       summary: create or update key value
       operationId: Put
@@ -121,24 +166,20 @@
         '200':
           description: ''
           schema:
-            $ref: '#/definitions/v1.KVBody'
-  '/v1/{project}/kie/revision/{label_id}':
+            $ref: '#/definitions/v1.DocResponseSingleKey'
+  '/v1/{project}/kie/revision/{key_id}':
     get:
-      summary: get all revisions by label id
+      summary: get all revisions by key id
       operationId: GetRevisions
       parameters:
         - name: project
           in: path
           required: true
           type: string
-        - name: label_id
+        - name: key_id
           in: path
           required: true
           type: string
-        - name: key
-          in: query
-          description: only return history about a specific key
-          type: string
       consumes:
         - application/json
         - text/yaml
@@ -147,45 +188,31 @@
         - text/yaml
       responses:
         '200':
-          description: 'true'
+          description: ''
           schema:
             type: array
             items:
-              $ref: '#/definitions/LabelHistoryResponse'
-  '/v1/{project}/kie/summary':
-    get:
-      summary: 'search key values by labels combination, it returns multiple labels group'
-      operationId: Search
-      parameters:
-        - name: project
-          in: path
-          required: true
-          type: string
-        - name: q
-          in: query
-          description: 'the combination format is {label_key}:{label_value}+{label_key}:{label_value} for example: /v1/test/kie/kv?q=app:mall&q=app:mall+service:cart, that will query key values from 2 kinds of labels'
-          type: string
-      consumes:
-        - '*/*'
-      produces:
-        - application/json
-        - text/yaml
-      responses:
-        '200':
-          description: get key value success
-          schema:
-            type: array
-            items:
-              $ref: '#/definitions/KVResponse'
+              $ref: '#/definitions/v1.DocResponseSingleKey'
 definitions:
-  KVDoc:
+  v1.DocResponseGetKey:
     type: object
     properties:
-      _id:
+      data:
+        type: array
+        items:
+          $ref: '#/definitions/v1.DocResponseSingleKey'
+      total:
+        type: integer
+        format: int64
+  v1.DocResponseSingleKey:
+    type: object
+    properties:
+      create_revision:
+        type: integer
+        format: int64
+      create_time:
         type: string
-      check:
-        type: string
-      domain:
+      id:
         type: string
       key:
         type: string
@@ -195,58 +222,15 @@
         type: object
         additionalProperties:
           type: string
-      project:
-        type: string
-      revision:
+      update_revision:
         type: integer
-        format: int32
+        format: int64
+      update_time:
+        type: string
       value:
         type: string
       value_type:
         type: string
-  KVResponse:
-    type: object
-    properties:
-      data:
-        type: array
-        items:
-          $ref: '#/definitions/KVDoc'
-      label:
-        $ref: '#/definitions/LabelDocResponse'
-      num:
-        type: integer
-        format: int32
-      size:
-        type: integer
-        format: int32
-      total:
-        type: integer
-        format: int32
-  LabelDocResponse:
-    type: object
-    properties:
-      label_id:
-        type: string
-      labels:
-        type: object
-        additionalProperties:
-          type: string
-  LabelHistoryResponse:
-    type: object
-    properties:
-      data:
-        type: array
-        items:
-          $ref: '#/definitions/KVDoc'
-      label_id:
-        type: string
-      labels:
-        type: object
-        additionalProperties:
-          type: string
-      revision:
-        type: integer
-        format: int32
   v1.KVBody:
     type: object
     properties:
@@ -256,5 +240,5 @@
           type: string
       value:
         type: string
-      valueType:
+      value_type:
         type: string
diff --git a/docs/getstarted/verify.md b/docs/getstarted/verify.md
index 5b802d6..44a5efc 100644
--- a/docs/getstarted/verify.md
+++ b/docs/getstarted/verify.md
@@ -27,4 +27,6 @@
 }
 ```
 
-the api docs is http://127.0.0.1:30110/apidocs.json
\ No newline at end of file
+Check open API doc
+- the api doc mounted to http://127.0.0.1:30110/apidocs.json 
+- or see https://github.com/apache/servicecomb-kie/blob/master/docs/api.yaml
diff --git a/go.mod b/go.mod
index 4c0ea9e..b432bbf 100644
--- a/go.mod
+++ b/go.mod
@@ -2,10 +2,9 @@
 
 require (
 	github.com/DataDog/zstd v1.4.4 // indirect
-	github.com/emicklei/go-restful v2.11.1+incompatible
-	github.com/go-chassis/foundation v0.1.1-0.20191113114104-2b05871e9ec4
-	github.com/go-chassis/go-archaius v1.0.0
-	github.com/go-chassis/go-chassis v1.8.2-0.20191227102336-e3ac2ea137b1
+	github.com/emicklei/go-restful v2.12.0+incompatible
+	github.com/go-chassis/go-archaius v1.2.1-0.20200309104817-8c3d4e87d33c
+	github.com/go-chassis/go-chassis v1.8.2-0.20200310060113-4b383ba3d3f0
 	github.com/go-chassis/paas-lager v1.1.1
 	github.com/go-mesh/openlogging v1.0.1
 	github.com/hashicorp/mdns v1.0.1 // indirect
diff --git a/go.sum b/go.sum
index 96a71c3..11098bd 100644
--- a/go.sum
+++ b/go.sum
@@ -12,8 +12,10 @@
 github.com/DataDog/zstd v1.4.4 h1:+IawcoXhCBylN7ccwdwf8LOH2jKq7NavGpEPanrlTzE=
 github.com/DataDog/zstd v1.4.4/go.mod h1:1jcaCB/ufaK+sKp1NBhlGmpz41jOoPQ35bpF36t7BBo=
 github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ=
+github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU=
 github.com/PuerkitoBio/purell v1.0.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0=
 github.com/PuerkitoBio/urlesc v0.0.0-20160726150825-5bd2802263f2/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE=
+github.com/Shonminh/apollo-client v0.2.0/go.mod h1:Jk6K99uIGxQm7Uyy1gCQTvM/kc1YLp4Qo9/jtGkEXvI=
 github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
 github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
 github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e h1:QEF07wC0T1rKkctt1RINW/+RMTVmiwxETico2l3gxJA=
@@ -28,7 +30,9 @@
 github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs=
 github.com/cenkalti/backoff v2.0.0+incompatible h1:5IIPUHhlnUZbcHQsQou5k1Tn58nJkeJL9U+ig5CHJbY=
 github.com/cenkalti/backoff v2.0.0+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM=
+github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc=
 github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
+github.com/coocood/freecache v1.0.1/go.mod h1:ePwxCDzOYvARfHdr1pByNct1at3CoKnsipOHwKlNbzI=
 github.com/davecgh/go-spew v0.0.0-20151105211317-5215b55f46b2/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
@@ -40,25 +44,45 @@
 github.com/emicklei/go-restful v2.8.0+incompatible/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs=
 github.com/emicklei/go-restful v2.11.1+incompatible h1:CjKsv3uWcCMvySPQYKxO8XX3f9zD4FeZRsW4G0B4ffE=
 github.com/emicklei/go-restful v2.11.1+incompatible/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs=
+github.com/emicklei/go-restful v2.12.0+incompatible h1:SIvoTSbsMEwuM3dzFirLwKc4BH6VXP5CNf+G1FfJVr4=
+github.com/emicklei/go-restful v2.12.0+incompatible/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs=
 github.com/evanphx/json-patch v4.2.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk=
 github.com/fatih/color v1.7.0 h1:DkWD4oS2D8LGGgTQ6IvwJJXSL5Vp2ffcQg58nFV38Ys=
 github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4=
 github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I=
 github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
 github.com/ghodss/yaml v0.0.0-20150909031657-73d445a93680/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
+github.com/gin-contrib/sse v0.0.0-20190301062529-5545eab6dad3/go.mod h1:VJ0WA2NBN22VlZ2dKZQPAPnyWw5XTlK1KymzLKsr59s=
+github.com/gin-gonic/gin v1.4.0/go.mod h1:OW2EZn3DO8Ln9oIKOvM++LBO+5UPHJJDH72/q/3rZdM=
 github.com/go-chassis/foundation v0.1.0/go.mod h1:21/ajGtgJlWTCeM0TxGJdRhO8bJkKirWyV8Stlh6g6c=
 github.com/go-chassis/foundation v0.1.1-0.20191113114104-2b05871e9ec4 h1:wx8JXvg/n4i8acXsBJ5zIkiK7EO2kn/HuEjKK3kSgv8=
 github.com/go-chassis/foundation v0.1.1-0.20191113114104-2b05871e9ec4/go.mod h1:21/ajGtgJlWTCeM0TxGJdRhO8bJkKirWyV8Stlh6g6c=
 github.com/go-chassis/go-archaius v1.0.0 h1:grSgvtpJsyYk0+1UiSqShF6+Zv0L6SWdsOUNi49bVTQ=
 github.com/go-chassis/go-archaius v1.0.0/go.mod h1:Px2evF91zbMr78UQ+lwehjEwXelwgvTtHzIeODsBEEE=
+github.com/go-chassis/go-archaius v1.0.1-0.20200121100918-32f6f1a3f33d h1:62TEFw6c0cSkknaNm56kXz95OedPcy+9EWb+shfjySM=
+github.com/go-chassis/go-archaius v1.0.1-0.20200121100918-32f6f1a3f33d/go.mod h1:Px2evF91zbMr78UQ+lwehjEwXelwgvTtHzIeODsBEEE=
+github.com/go-chassis/go-archaius v1.2.1-0.20200309024713-9fc5b70ee2df h1:ezv5b7FI5HdrD71McnIZaLsdtMF5+z2pIuwufK6Io+c=
+github.com/go-chassis/go-archaius v1.2.1-0.20200309024713-9fc5b70ee2df/go.mod h1:gVP52u/jCU0fgUjXdUW1VLp5YLLJ+Yl2zoOPrLM/WOM=
+github.com/go-chassis/go-archaius v1.2.1-0.20200309104817-8c3d4e87d33c h1:pimEM4Oy/Uf4xG4G7TrRUQbIRFAfHiarxDQQS2gmKaM=
+github.com/go-chassis/go-archaius v1.2.1-0.20200309104817-8c3d4e87d33c/go.mod h1:gVP52u/jCU0fgUjXdUW1VLp5YLLJ+Yl2zoOPrLM/WOM=
 github.com/go-chassis/go-chassis v1.8.1 h1:YWCrVRwPHy2/JIxa3jUxjISH1Z9y93SvUuAkwXVC6kk=
 github.com/go-chassis/go-chassis v1.8.1/go.mod h1:vI0rU2FNAtGi6owfYKXBVj6cvq633/n+8bqbsVfib7E=
 github.com/go-chassis/go-chassis v1.8.2-0.20191227102336-e3ac2ea137b1 h1:7cVyV9MzmpzCPobya0nlxAkUTLPpT3iGmnvCAu5R/gE=
 github.com/go-chassis/go-chassis v1.8.2-0.20191227102336-e3ac2ea137b1/go.mod h1:vI0rU2FNAtGi6owfYKXBVj6cvq633/n+8bqbsVfib7E=
+github.com/go-chassis/go-chassis v1.8.2-0.20200213090219-33eb773c9ac9 h1:cXUzViqOe7m1XQqmeHQ7QqjGSrH8Lh3tvbkpcCF74Zc=
+github.com/go-chassis/go-chassis v1.8.2-0.20200213090219-33eb773c9ac9/go.mod h1:Md4Oq1os4eR08IZRncJHixlow0trajz9KUlOBgZaY1c=
+github.com/go-chassis/go-chassis v1.8.2-0.20200309033031-047975282d7f h1:5ea5R56Hv+kkZXf36uyTHK4NW8d4VytavYS+EBgKjZg=
+github.com/go-chassis/go-chassis v1.8.2-0.20200309033031-047975282d7f/go.mod h1:Md4Oq1os4eR08IZRncJHixlow0trajz9KUlOBgZaY1c=
+github.com/go-chassis/go-chassis v1.8.2-0.20200309123010-e9952adf0aff h1:NoKQksHSaTv8QH7/zo2G1MOf4myfShT7IF19oydwa9Y=
+github.com/go-chassis/go-chassis v1.8.2-0.20200309123010-e9952adf0aff/go.mod h1:OSB9myPrtV+4CQs4aMwOl7Oh7mZG295aFZkjb7P98w8=
+github.com/go-chassis/go-chassis v1.8.2-0.20200310060113-4b383ba3d3f0 h1:YD9MtuYIpQb+EKxIzV/swdXUhnV5PtXtSW696JiwW1c=
+github.com/go-chassis/go-chassis v1.8.2-0.20200310060113-4b383ba3d3f0/go.mod h1:sFnVxSvprpy6umPFK4uSdfCDdfqdgbp3FdW/CG0VNnE=
 github.com/go-chassis/go-chassis-config v0.15.0 h1:cTsUl7r3eo2tFoACHADnymwO/5ebb6RVNTj11kxjiZ8=
 github.com/go-chassis/go-chassis-config v0.15.0/go.mod h1:yuaprnRdObPhYaHVKaocBQPoLfoBFaFmzApM2nRROws=
 github.com/go-chassis/go-restful-swagger20 v1.0.2 h1:Zq74EQP7IjlJK/PnYP/rF3Ptk2QskZVPoNgiVwtvpFM=
 github.com/go-chassis/go-restful-swagger20 v1.0.2/go.mod h1:ZK4hlfS6Q6E46ViezAjn6atrzoteyWl1OBEpUBn/36k=
+github.com/go-chassis/go-restful-swagger20 v1.0.3-0.20200310030431-17d80f34264f h1:5QmmNpVcGqIc6tuKNe5EAI4PA8Yn2EL9Oee7YdcJ4PE=
+github.com/go-chassis/go-restful-swagger20 v1.0.3-0.20200310030431-17d80f34264f/go.mod h1:eW62fYuzlNFDvIacB6AV8bhUDCTy4myfTCv0bT9Gbb0=
 github.com/go-chassis/paas-lager v1.0.2-0.20190328010332-cf506050ddb2/go.mod h1:tILYbn3+0jjCxhY6/ue9L8eRq+VJ60U6VYIdugqchB4=
 github.com/go-chassis/paas-lager v1.1.1 h1:/6wqawUGjPCpd57A/tzJzgC4MnEhNuigbayQS+2VWPQ=
 github.com/go-chassis/paas-lager v1.1.1/go.mod h1:tILYbn3+0jjCxhY6/ue9L8eRq+VJ60U6VYIdugqchB4=
@@ -105,6 +129,7 @@
 github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
 github.com/golang/protobuf v0.0.0-20161109072736-4bd1920723d7/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
 github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
+github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
 github.com/golang/protobuf v1.3.2 h1:6nsPYzhq5kReh6QImI3k5qWzO4PEbvbIW2cwSfR/6xs=
 github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
 github.com/golang/snappy v0.0.1 h1:Qgr9rKW7uDUkrbSmQeiDsGa8SjGyCOGtuasMWwvp2P4=
@@ -164,6 +189,7 @@
 github.com/joho/godotenv v1.3.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg=
 github.com/json-iterator/go v0.0.0-20180612202835-f2b4162afba3/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
 github.com/json-iterator/go v1.1.5/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
+github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
 github.com/json-iterator/go v1.1.8 h1:QiWkFLKq0T7mpzwOTu6BzNDbfTE8OLrYhVKYMLF46Ok=
 github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
 github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU=
@@ -190,6 +216,8 @@
 github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU=
 github.com/mattn/go-isatty v0.0.3 h1:ns/ykhmWi7G9O+8a448SecJU3nSMBXJfqQkl0upE1jI=
 github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4=
+github.com/mattn/go-isatty v0.0.7 h1:UvyT9uN+3r7yLEYSlJsbQGdsaB/a0DlgWP3pql6iwOc=
+github.com/mattn/go-isatty v0.0.7/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s=
 github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU=
 github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
 github.com/miekg/dns v1.0.14 h1:9jZdLNd/P4+SfEJ0TNyxYpsK8N4GtfylBLqtbYN1sbA=
@@ -236,11 +264,13 @@
 github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI=
 github.com/prometheus/client_golang v0.9.1 h1:K47Rk0v/fkEfwfQet2KWhscE0cJzjgCCDBG2KHZoVno=
 github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw=
+github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910 h1:idejC8f05m9MGOsuEi1ATq9shN03HrxNkD/luQvxCv8=
 github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
 github.com/prometheus/client_model v0.0.0-20190115171406-56726106282f h1:BVwpUVJDADN2ufcGik7W992pyps0wZ888b/y9GXcLTU=
 github.com/prometheus/client_model v0.0.0-20190115171406-56726106282f/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
 github.com/prometheus/common v0.2.0 h1:kUZDBDTdBVBYBj5Tmh2NZLlF60mfjA27rM34b+cVwNU=
 github.com/prometheus/common v0.2.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
+github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d h1:GoAlyOgbOEIFdaDqxJVlbOQ1DtGmZWs/Qau0hIlk+WQ=
 github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
 github.com/prometheus/procfs v0.0.0-20190117184657-bf6a532e95b1 h1:/K3IL0Z1quvmJ7X0A1AwNEK7CRkVK3YwfOU/QAL4WGg=
 github.com/prometheus/procfs v0.0.0-20190117184657-bf6a532e95b1/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
@@ -259,6 +289,7 @@
 github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc=
 github.com/smartystreets/assertions v0.0.0-20190116191733-b6c0e53d7304/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc=
 github.com/smartystreets/goconvey v0.0.0-20190330032615-68dc04aab96a/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA=
+github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA=
 github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk=
 github.com/spf13/cast v1.2.0 h1:HHl1DSRbEQN2i8tJmtS6ViPyHx35+p51amrdsiTCrkg=
 github.com/spf13/cast v1.2.0/go.mod h1:r2rcYCSwa1IExKTDiTfzaxqT2FNHs8hODu4LnUfgKEg=
@@ -274,6 +305,7 @@
 github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk=
 github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
 github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk=
+github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc=
 github.com/urfave/cli v1.20.0 h1:fDqGv3UG/4jbVl/QkFwEdddtEDjh/5Ov6X+0B/3bPaw=
 github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA=
 github.com/xdg/scram v0.0.0-20180814205039-7eeb5667e42c h1:u40Z8hqBAAQyv+vATcGgV0YCnDjqSL7/q/JyPhhJSPk=
@@ -288,6 +320,8 @@
 go.mongodb.org/mongo-driver v1.3.0 h1:ew6uUIeJOo+qdUUv7LxFCUhtWmVv7ZV/Xuy4FAUsw2E=
 go.mongodb.org/mongo-driver v1.3.0/go.mod h1:MSWZXKOynuguX+JSvwP8i+58jYCXxbia8HS3gZBapIE=
 go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU=
+go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ=
+go.uber.org/ratelimit v0.1.0/go.mod h1:2X8KaoNd1J0lZV+PxJk/5+DGbO/tpwLR1m++a7FnB/Y=
 golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
 golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
 golang.org/x/crypto v0.0.0-20190211182817-74369b46fc67/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
@@ -300,6 +334,7 @@
 golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
 golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
 golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
+golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
 golang.org/x/net v0.0.0-20170114055629-f2499483f923/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
@@ -311,6 +346,8 @@
 golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
 golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
+golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
+golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 golang.org/x/net v0.0.0-20191004110552-13f9640d40b9 h1:rjwSpXsdiK0dV8/Naq3kAw9ymfAeJIyd0upUIElB+lI=
 golang.org/x/net v0.0.0-20191004110552-13f9640d40b9/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
@@ -333,11 +370,13 @@
 golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20190209173611-3b5209105503/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20190403152447-81d4e9dc473e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20190419153524-e8e3143a4f4a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20190531175056-4c3a928424d2/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456 h1:ng0gs1AKnRRuEMZoTLLlbOd+C17zUDepwGQBb/n+JVg=
 golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20191018095205-727590c5006e h1:ZtoklVMHQy6BFRHkbG6JzK+S6rX82//Yeok1vMlizfQ=
 golang.org/x/sys v0.0.0-20191018095205-727590c5006e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
@@ -354,12 +393,15 @@
 golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
 golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
 golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
+golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
 golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
 golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
 golang.org/x/tools v0.0.0-20190329151228-23e29df326fe/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
 golang.org/x/tools v0.0.0-20190416151739-9c9e1878f421/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
 golang.org/x/tools v0.0.0-20190420181800-aa740d480789/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
 golang.org/x/tools v0.0.0-20190531172133-b3315ee88b7d/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
+golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
+golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE=
 google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
 google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
@@ -375,6 +417,8 @@
 gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
 gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4=
 gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
+gopkg.in/go-playground/assert.v1 v1.2.1/go.mod h1:9RXL0bg/zibRAgZUYszZSwO/z8Y/a8bDuhia5mkpMnE=
+gopkg.in/go-playground/validator.v8 v8.18.2/go.mod h1:RX2a/7Ha8BgOhfk7j780h4/u/RRjR0eouCJSH80/M2Y=
 gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw=
 gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ=
 gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
@@ -394,6 +438,7 @@
 k8s.io/klog v0.3.0/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk=
 k8s.io/klog v1.0.0/go.mod h1:4Bi6QPql/J/LkTDqv7R/cd3hPo4k2DG6Ptcz060Ez5I=
 k8s.io/kube-openapi v0.0.0-20191107075043-30be4d16710a/go.mod h1:1TqjTSzOxsLGIKfj0lK8EeCP7K1iUG65v09OM0/WG5E=
+k8s.io/utils v0.0.0-20191114184206-e782cd3c129f h1:GiPwtSzdP43eI1hpPCbROQCCIgCuiMMNF8YUVLF3vJo=
 k8s.io/utils v0.0.0-20191114184206-e782cd3c129f/go.mod h1:sZAwmy6armz5eXlNoLmJcl4F1QuKu7sr+mFQ0byX7Ew=
 k8s.io/utils v0.0.0-20191114200735-6ca3b61696b6 h1:p0Ai3qVtkbCG/Af26dBmU0E1W58NID3hSSh7cMyylpM=
 k8s.io/utils v0.0.0-20191114200735-6ca3b61696b6/go.mod h1:sZAwmy6armz5eXlNoLmJcl4F1QuKu7sr+mFQ0byX7Ew=
diff --git a/pkg/common/common.go b/pkg/common/common.go
index 4f2f34a..18cfc14 100644
--- a/pkg/common/common.go
+++ b/pkg/common/common.go
@@ -21,14 +21,15 @@
 
 //match mode
 const (
-	QueryParamQ      = "q"
-	QueryByLabelsCon = "&"
-	QueryParamWait   = "wait"
-	QueryParamRev    = "revision"
-	QueryParamMatch  = "match"
-	QueryParamKeyID  = "kv_id"
-	QueryLimit       = "limit"
-	QueryOffset      = "offset"
+	QueryParamQ        = "q"
+	QueryByLabelsCon   = "&"
+	QueryParamWait     = "wait"
+	QueryParamRev      = "revision"
+	QueryParamMatch    = "match"
+	QueryParamKeyID    = "kv_id"
+	QueryParamStatus   = "status"
+	QueryParamPageNum  = "pageNum"
+	QueryParamPageSize = "pageSize"
 )
 
 //http headers
diff --git a/pkg/model/kv.go b/pkg/model/kv.go
index d898329..42b1359 100644
--- a/pkg/model/kv.go
+++ b/pkg/model/kv.go
@@ -66,3 +66,23 @@
 	ResponseHeader map[string][]string    `json:"response_header,omitempty" yaml:"response_header,omitempty"`
 	ResponseCode   int                    `json:"response_code,omitempty" yaml:"response_code,omitempty"`
 }
+
+//DocResponseSingleKey is response doc
+type DocResponseSingleKey struct {
+	CreateRevision int64             `json:"create_revision"`
+	CreateTime     string            `json:"create_time"`
+	ID             string            `json:"id"`
+	Key            string            `json:"key"`
+	LabelID        string            `json:"label_id"`
+	Labels         map[string]string `json:"labels"`
+	UpdateRevision int64             `json:"update_revision"`
+	UpdateTime     string            `json:"update_time"`
+	Value          string            `json:"value"`
+	ValueType      string            `json:"value_type"`
+}
+
+//DocResponseGetKey is response doc
+type DocResponseGetKey struct {
+	Data  []*DocResponseSingleKey `json:"data"`
+	Total int64                   `json:"total"`
+}
diff --git a/server/resource/v1/common.go b/server/resource/v1/common.go
index 2a5678c..d85aef4 100644
--- a/server/resource/v1/common.go
+++ b/server/resource/v1/common.go
@@ -38,15 +38,12 @@
 
 //const of server
 const (
-	HeaderUserAgent        = "User-Agent"
-	HeaderSessionID        = "sessionID"
-	QueryParameterStatus   = "status"
-	QueryParameterPageNum  = "pageNum"
-	QueryParameterPageSize = "pageSize"
-	PathParameterProject   = "project"
-	PathParameterKey       = "key"
-	AttributeDomainKey     = "domain"
-	MsgLabelsNotFound      = "can not find by labels"
+	HeaderUserAgent      = "User-Agent"
+	HeaderSessionID      = "sessionID"
+	PathParameterProject = "project"
+	PathParameterKey     = "key"
+	AttributeDomainKey   = "domain"
+	MsgLabelsNotFound    = "can not find by labels"
 )
 
 //err
diff --git a/server/resource/v1/doc_struct.go b/server/resource/v1/doc_struct.go
index b8de013..6780fc2 100644
--- a/server/resource/v1/doc_struct.go
+++ b/server/resource/v1/doc_struct.go
@@ -32,11 +32,11 @@
 		ParamType: goRestful.HeaderParameterKind,
 		Desc:      "integer, default is 1, if you set match policy, you can set,depth to decide label number",
 	}
-	DocHeaderRevision = &restful.Parameters{
-		DataType:  "string",
-		Name:      common.HeaderRevision,
-		ParamType: goRestful.HeaderParameterKind,
-		Desc:      "integer, current revision of kie",
+	DocHeaderRevision = goRestful.Header{
+		Items: &goRestful.Items{
+			Type: "integer",
+		},
+		Description: "cluster latest revision number, if key value is changed, it will increase.",
 	}
 )
 
@@ -91,15 +91,15 @@
 	}
 	DocQueryLimitParameters = &restful.Parameters{
 		DataType:  "string",
-		Name:      common.QueryLimit,
+		Name:      common.QueryParamPageSize,
 		ParamType: goRestful.QueryParameterKind,
-		Desc:      "limit,for example &limit=10",
+		Desc:      "pagination",
 	}
 	DocQueryOffsetParameters = &restful.Parameters{
 		DataType:  "string",
-		Name:      common.QueryOffset,
+		Name:      common.QueryParamPageNum,
 		ParamType: goRestful.QueryParameterKind,
-		Desc:      "offset,for example &offset=10",
+		Desc:      "pagination",
 	}
 )
 
diff --git a/server/resource/v1/history_resource.go b/server/resource/v1/history_resource.go
index 73ea442..6530165 100644
--- a/server/resource/v1/history_resource.go
+++ b/server/resource/v1/history_resource.go
@@ -18,10 +18,10 @@
 package v1
 
 import (
+	"github.com/apache/servicecomb-kie/pkg/model"
 	"net/http"
 
 	"github.com/apache/servicecomb-kie/pkg/common"
-	"github.com/apache/servicecomb-kie/pkg/model"
 	"github.com/apache/servicecomb-kie/server/service"
 
 	goRestful "github.com/emicklei/go-restful"
@@ -37,8 +37,8 @@
 func (r *HistoryResource) GetRevisions(context *restful.Context) {
 	var err error
 	keyID := context.ReadPathParameter("key_id")
-	pageNumStr := context.ReadQueryParameter("pageNum")
-	pageSizeStr := context.ReadQueryParameter("pageSize")
+	pageNumStr := context.ReadQueryParameter(common.QueryParamPageNum)
+	pageSizeStr := context.ReadQueryParameter(common.QueryParamPageSize)
 	pageNum, pageSize, err := checkPagination(pageNumStr, pageSizeStr)
 	if err != nil {
 		WriteErrResponse(context, http.StatusBadRequest, err.Error(), common.ContentTypeText)
@@ -85,9 +85,8 @@
 			},
 			Returns: []*restful.Returns{
 				{
-					Code:    http.StatusOK,
-					Message: "true",
-					Model:   []model.KVDoc{},
+					Code:  http.StatusOK,
+					Model: []model.DocResponseSingleKey{},
 				},
 			},
 			Consumes: []string{goRestful.MIME_JSON, common.ContentTypeYaml},
diff --git a/server/resource/v1/kv_resource.go b/server/resource/v1/kv_resource.go
index 2c36103..113e97c 100644
--- a/server/resource/v1/kv_resource.go
+++ b/server/resource/v1/kv_resource.go
@@ -105,15 +105,15 @@
 		WriteErrResponse(rctx, http.StatusInternalServerError, common.MsgDomainMustNotBeEmpty, common.ContentTypeText)
 		return
 	}
-	pageNumStr := rctx.ReadQueryParameter(QueryParameterPageNum)
-	pageSizeStr := rctx.ReadQueryParameter(QueryParameterPageSize)
+	pageNumStr := rctx.ReadQueryParameter(common.QueryParamPageNum)
+	pageSizeStr := rctx.ReadQueryParameter(common.QueryParamPageSize)
 	pageNum, pageSize, err := checkPagination(pageNumStr, pageSizeStr)
 	if err != nil {
 		WriteErrResponse(rctx, http.StatusBadRequest, err.Error(), common.ContentTypeText)
 		return
 	}
 	insID := rctx.ReadHeader(HeaderSessionID)
-	statusStr := rctx.ReadQueryParameter(QueryParameterStatus)
+	statusStr := rctx.ReadQueryParameter(common.QueryParamStatus)
 	status, err := checkStatus(statusStr)
 	if err != nil {
 		WriteErrResponse(rctx, http.StatusBadRequest, err.Error(), common.ContentTypeText)
@@ -136,15 +136,15 @@
 		WriteErrResponse(rctx, http.StatusBadRequest, err.Error(), common.ContentTypeText)
 		return
 	}
-	pageNumStr := rctx.ReadQueryParameter(QueryParameterPageNum)
-	pageSizeStr := rctx.ReadQueryParameter(QueryParameterPageSize)
+	pageNumStr := rctx.ReadQueryParameter(common.QueryParamPageNum)
+	pageSizeStr := rctx.ReadQueryParameter(common.QueryParamPageSize)
 	pageNum, pageSize, err := checkPagination(pageNumStr, pageSizeStr)
 	if err != nil {
 		WriteErrResponse(rctx, http.StatusBadRequest, err.Error(), common.ContentTypeText)
 		return
 	}
 	sessionID := rctx.ReadHeader(HeaderSessionID)
-	statusStr := rctx.ReadQueryParameter(QueryParameterStatus)
+	statusStr := rctx.ReadQueryParameter(common.QueryParamStatus)
 	status, err := checkStatus(statusStr)
 	if err != nil {
 		WriteErrResponse(rctx, http.StatusBadRequest, err.Error(), common.ContentTypeText)
@@ -244,75 +244,6 @@
 	}
 }
 
-//Search search key only by label
-func (r *KVResource) Search(context *restful.Context) {
-	var err error
-	labelCombinations, err := ReadLabelCombinations(context.ReadRestfulRequest())
-	if err != nil {
-		WriteErrResponse(context, http.StatusBadRequest, err.Error(), common.ContentTypeText)
-		return
-	}
-	project := context.ReadPathParameter(PathParameterProject)
-	domain := ReadDomain(context)
-	if domain == nil {
-		WriteErrResponse(context, http.StatusInternalServerError, common.MsgDomainMustNotBeEmpty, common.ContentTypeText)
-		return
-	}
-	var kvs []*model.KVResponse
-	pageNumStr := context.ReadQueryParameter(QueryParameterPageNum)
-	pageSizeStr := context.ReadQueryParameter(QueryParameterPageSize)
-	pageNum, pageSize, err := checkPagination(pageNumStr, pageSizeStr)
-	if err != nil {
-		WriteErrResponse(context, http.StatusBadRequest, err.Error(), common.ContentTypeText)
-		return
-	}
-	if labelCombinations == nil {
-		result, err := service.KVService.FindKV(context.Ctx, domain.(string), project,
-			service.WithPageNum(pageNum),
-			service.WithPageSize(pageSize))
-		if err != nil {
-			openlogging.Error(MsgLabelsNotFound, openlogging.WithTags(openlogging.Tags{
-				"err": err.Error(),
-			}))
-			WriteErrResponse(context, http.StatusInternalServerError, err.Error(), common.ContentTypeText)
-			return
-		}
-		kvs = append(kvs, result...)
-	}
-	for _, labels := range labelCombinations {
-		openlogging.Debug("find by combination", openlogging.WithTags(openlogging.Tags{
-			"q": labels,
-		}))
-		result, err := service.KVService.FindKV(context.Ctx, domain.(string), project,
-			service.WithLabels(labels),
-			service.WithPageNum(pageNum),
-			service.WithPageSize(pageSize))
-		if err != nil {
-			if err == service.ErrKeyNotExists {
-				continue
-			} else {
-				openlogging.Error(MsgLabelsNotFound, openlogging.WithTags(openlogging.Tags{
-					"err": err.Error(),
-				}))
-				WriteErrResponse(context, http.StatusInternalServerError, err.Error(), common.ContentTypeText)
-				return
-			}
-		}
-		kvs = append(kvs, result...)
-
-	}
-	if len(kvs) == 0 {
-		WriteErrResponse(context, http.StatusNotFound, "no kv found", common.ContentTypeText)
-		return
-	}
-
-	err = writeResponse(context, kvs)
-	if err != nil {
-		openlogging.Error(err.Error())
-	}
-
-}
-
 //Delete deletes key by ids
 func (r *KVResource) Delete(context *restful.Context) {
 	project := context.ReadPathParameter(PathParameterProject)
@@ -373,7 +304,7 @@
 			Returns: []*restful.Returns{
 				{
 					Code:  http.StatusOK,
-					Model: KVBody{},
+					Model: model.DocResponseSingleKey{},
 				},
 			},
 			Consumes: []string{goRestful.MIME_JSON, common.ContentTypeYaml},
@@ -385,12 +316,22 @@
 			FuncDesc:     "get key values by key and labels",
 			Parameters: []*restful.Parameters{
 				DocPathProject, DocPathKey, DocQueryLabelParameters, DocQueryWait, DocQueryMatch, DocQueryRev,
+				DocQueryLimitParameters, DocQueryOffsetParameters,
 			},
 			Returns: []*restful.Returns{
 				{
 					Code:    http.StatusOK,
 					Message: "get key value success",
-					Model:   []model.KVResponse{},
+					Model:   model.DocResponseGetKey{},
+					Headers: map[string]goRestful.Header{
+						common.HeaderRevision: DocHeaderRevision,
+					},
+				},
+				{
+					Code: http.StatusNotFound,
+					Headers: map[string]goRestful.Header{
+						common.HeaderRevision: DocHeaderRevision,
+					},
 				},
 				{
 					Code:    http.StatusNotModified,
@@ -400,32 +341,25 @@
 			Produces: []string{goRestful.MIME_JSON, common.ContentTypeYaml},
 		}, {
 			Method:       http.MethodGet,
-			Path:         "/v1/{project}/kie/summary",
-			ResourceFunc: r.Search,
-			FuncDesc:     "search key values by labels combination, it returns multiple labels group",
-			Parameters: []*restful.Parameters{
-				DocPathProject, DocQueryCombination,
-			},
-			Returns: []*restful.Returns{
-				{
-					Code:    http.StatusOK,
-					Message: "get key value success",
-					Model:   []model.KVResponse{},
-				},
-			},
-			Produces: []string{goRestful.MIME_JSON, common.ContentTypeYaml},
-		}, {
-			Method:       http.MethodGet,
 			Path:         "/v1/{project}/kie/kv",
 			ResourceFunc: r.List,
 			FuncDesc:     "list key values by labels and key",
 			Parameters: []*restful.Parameters{
 				DocPathProject, DocQueryLabelParameters, DocQueryWait, DocQueryMatch, DocQueryRev,
+				DocQueryLimitParameters, DocQueryOffsetParameters,
 			},
 			Returns: []*restful.Returns{
 				{
 					Code:  http.StatusOK,
-					Model: model.KVResponse{},
+					Model: model.DocResponseGetKey{},
+					Headers: map[string]goRestful.Header{
+						common.HeaderRevision: DocHeaderRevision,
+					},
+				}, {
+					Code: http.StatusNotFound,
+					Headers: map[string]goRestful.Header{
+						common.HeaderRevision: DocHeaderRevision,
+					},
 				}, {
 					Code:    http.StatusNotModified,
 					Message: "empty body",
@@ -447,10 +381,6 @@
 					Message: "Delete success",
 				},
 				{
-					Code:    http.StatusBadRequest,
-					Message: "Failed,check url",
-				},
-				{
 					Code:    http.StatusInternalServerError,
 					Message: "Server error",
 				},