[XAPID-1088] fix resource leak, address comments
diff --git a/api.go b/api.go
index 4da5b50..36c5058 100644
--- a/api.go
+++ b/api.go
@@ -16,7 +16,6 @@
 
 import (
 	"encoding/json"
-	"errors"
 	"io"
 	"io/ioutil"
 	"net/http"
@@ -51,19 +50,30 @@
 
 	var returnValue interface{}
 
-	if verifyApiKeyReq, err := validateRequest(r.Body, w); err == nil {
-		verifyApiKeyResponse, errorResponse := a.verifyAPIKey(verifyApiKeyReq)
-
-		if errorResponse != nil {
-			setResponseHeader(errorResponse, w)
-			returnValue = errorResponse
-		} else {
-			returnValue = verifyApiKeyResponse
+	verifyApiKeyReq, err := validateRequest(r.Body, w)
+	if err != nil {
+		errorResponse, jsonErr := json.Marshal(errorResponse("Bad_REQUEST", err.Error(), http.StatusBadRequest))
+		if jsonErr != nil {
+			w.WriteHeader(http.StatusInternalServerError)
+			w.Write([]byte(jsonErr.Error()))
 		}
-		b, _ := json.Marshal(returnValue)
-		log.Debugf("handleVerifyAPIKey result %s", b)
-		w.Write(b)
+		w.WriteHeader(http.StatusBadRequest)
+		w.Write(errorResponse)
+		return
 	}
+
+	verifyApiKeyResponse, errorResponse := a.verifyAPIKey(verifyApiKeyReq)
+
+	if errorResponse != nil {
+		setResponseHeader(errorResponse, w)
+		returnValue = errorResponse
+	} else {
+		returnValue = verifyApiKeyResponse
+	}
+	b, _ := json.Marshal(returnValue)
+	log.Debugf("handleVerifyAPIKey result %s", b)
+	w.Write(b)
+
 }
 
 func setResponseHeader(errorResponse *ErrorResponse, w http.ResponseWriter) {
@@ -75,30 +85,24 @@
 }
 
 func validateRequest(requestBody io.ReadCloser, w http.ResponseWriter) (VerifyApiKeyRequest, error) {
+	defer requestBody.Close()
 	// 1. read request boby
 	var verifyApiKeyReq VerifyApiKeyRequest
 	body, err := ioutil.ReadAll(requestBody)
 	if err != nil {
-		w.WriteHeader(http.StatusBadRequest)
-		w.Write([]byte(err.Error()))
-		return verifyApiKeyReq, errors.New("Bad_REQUEST")
+		return verifyApiKeyReq, err
 	}
-	log.Debug(string(body))
+	log.Debug("request body: ", string(body))
 	// 2. umarshall json to struct
 	err = json.Unmarshal(body, &verifyApiKeyReq)
 	if err != nil {
-		w.WriteHeader(http.StatusBadRequest)
-		w.Write([]byte(err.Error()))
-		return verifyApiKeyReq, errors.New("Bad_REQUEST")
+		return verifyApiKeyReq, err
 	}
 	log.Debug(verifyApiKeyReq)
 
 	// 2. verify params
 	if isValid, err := verifyApiKeyReq.validate(); !isValid {
-		errorResponse, _ := json.Marshal(errorResponse("Bad_REQUEST", err.Error(), http.StatusBadRequest))
-		w.WriteHeader(http.StatusBadRequest)
-		w.Write(errorResponse)
-		return verifyApiKeyReq, errors.New("Bad_REQUEST")
+		return verifyApiKeyReq, err
 	}
 	return verifyApiKeyReq, nil
 }
@@ -164,9 +168,7 @@
 
 func shortListApiProduct(details []ApiProductDetails, verifyApiKeyReq VerifyApiKeyRequest) ApiProductDetails {
 	var bestMathcedProduct ApiProductDetails
-	rankedProducts := make(map[int][]ApiProductDetails)
-	rankedProducts[2] = []ApiProductDetails{}
-	rankedProducts[3] = []ApiProductDetails{}
+	rankedProducts := make([][]ApiProductDetails, 2)
 
 	for _, apiProd := range details {
 		if len(apiProd.Resources) == 0 || validatePath(apiProd.Resources, verifyApiKeyReq.UriPath) {
@@ -177,19 +179,21 @@
 					// set rank 1 or just return
 				} else {
 					// set rank to 2
-					rankedProducts[2] = append(rankedProducts[2], apiProd)
+					rankedProducts[0] = append(rankedProducts[0], apiProd)
 				}
 			} else {
 				// set rank to 3,
-				rankedProducts[3] = append(rankedProducts[3], apiProd)
+				rankedProducts[1] = append(rankedProducts[1], apiProd)
 			}
 		}
 	}
 
-	if len(rankedProducts[2]) > 0 {
-		return rankedProducts[2][0]
-	} else if len(rankedProducts[3]) > 0 {
-		return rankedProducts[3][0]
+	if len(rankedProducts[0]) > 0 {
+		return rankedProducts[0][0]
+	}
+
+	if len(rankedProducts[1]) > 0 {
+		return rankedProducts[1][0]
 	}
 
 	return bestMathcedProduct
diff --git a/api_test.go b/api_test.go
index 8ba4ebc..10b5eca 100644
--- a/api_test.go
+++ b/api_test.go
@@ -61,7 +61,6 @@
 			dbMux: sync.RWMutex{},
 		}
 		dbMan.setDbVersion(dataTestTempDir)
-		dbMan.initDb()
 
 		apiMan := apiManager{
 			dbMan:             dbMan,
diff --git a/apidVerifyAPIKey-api.yaml b/apidVerifyAPIKey-api.yaml
index 7ad84ce..8742045 100644
--- a/apidVerifyAPIKey-api.yaml
+++ b/apidVerifyAPIKey-api.yaml
@@ -17,7 +17,6 @@
 info:
   version: "0.0.1"
   title: Swagger API
-host: playground.apistudio.io
 basePath: /try/35cd6835-f2ed-4582-a1ae-d10ed29d062b
 schemes:
   - http
@@ -138,8 +137,7 @@
     description: Error response returned
     properties:
       response_code:
-        type: integer
-        format: int32
+        type: string
       response_message:
         type: string
       kind:
diff --git a/data.go b/data.go
index 65583b7..1d02c56 100644
--- a/data.go
+++ b/data.go
@@ -46,21 +46,12 @@
 	return dbc.db
 }
 
-func (dbc *dbManager) initDb() error {
-	db := dbc.getDb()
-	if db == nil {
-		return errors.New("DB not initialized")
-	}
-	return nil
-}
-
 func (dbc *dbManager) getDbVersion() string {
 	return dbc.dbVersion
 }
 
 type dbManagerInterface interface {
 	setDbVersion(string)
-	initDb() error
 	getDb() apid.DB
 	getDbVersion() string
 	getKmsAttributes(tenantId string, entities ...string) map[string][]Attribute
@@ -70,12 +61,12 @@
 func (dbc *dbManager) getKmsAttributes(tenantId string, entities ...string) map[string][]Attribute {
 
 	db := dbc.db
-	var attName, attValue sql.NullString
-	var entity_id string
+	var attName, attValue, entity_id sql.NullString
 	// TODO : is there no other better way to do in caluse???
 	sql := sql_GET_KMS_ATTRIBUTES_FOR_TENANT + ` and entity_id in ('` + strings.Join(entities, `','`) + `')`
 	mapOfAttributes := make(map[string][]Attribute)
 	attributes, err := db.Query(sql, tenantId)
+	defer attributes.Close()
 	if err != nil {
 		log.Error("Error while fetching attributes for tenant id : %s and entityId : %s", tenantId, err)
 		return mapOfAttributes
@@ -88,10 +79,11 @@
 		)
 		if err != nil {
 			log.Error("error fetching attributes for entityid ", entities, err)
+			return nil
 		}
-		if attName.String != "" {
+		if attName.Valid && entity_id.Valid {
 			att := Attribute{Name: attName.String, Value: attValue.String}
-			mapOfAttributes[entity_id] = append(mapOfAttributes[entity_id], att)
+			mapOfAttributes[entity_id.String] = append(mapOfAttributes[entity_id.String], att)
 		}
 	}
 	log.Debug("attributes returned for query ", sql, " are ", mapOfAttributes)
@@ -157,7 +149,7 @@
 	var proxies, environments, resources string
 
 	rows, err := db.Query(sql_GET_API_PRODUCTS_FOR_KEY_SQL, key, tenantId)
-
+	defer rows.Close()
 	if err != nil {
 		log.Error("error fetching apiProduct details", err)
 		return allProducts
diff --git a/data_test.go b/data_test.go
index 4d4e8e9..6766e89 100644
--- a/data_test.go
+++ b/data_test.go
@@ -43,7 +43,6 @@
 				dbMux: sync.RWMutex{},
 			}
 			dbMan.setDbVersion(dataTestTempDir)
-			dbMan.initDb()
 
 		})
 
diff --git a/init.go b/init.go
index a60b40e..3b6d4bb 100644
--- a/init.go
+++ b/init.go
@@ -44,7 +44,6 @@
 		data:  services.Data(),
 		dbMux: sync.RWMutex{},
 	}
-	dbMan.initDb()
 	apiMan := apiManager{
 		dbMan:             dbMan,
 		verifiersEndpoint: apiPath,
diff --git a/listener_test.go b/listener_test.go
index 78ea736..7095e23 100644
--- a/listener_test.go
+++ b/listener_test.go
@@ -48,7 +48,6 @@
 			dbMux: sync.RWMutex{},
 			db:    db,
 		}
-		dbMan.initDb()
 
 		listnerTestSyncHandler = apigeeSyncHandler{
 			dbMan:  dbMan,