code: func (s *HTTPServer) KVSGetKeys(resp http.ResponseWriter, req *http.Request, args *structs.KeyRequest) (interface{}, error) {
  	// Check for a separator, due to historic spelling error,
  	// we now are forced to check for both spellings
  	var sep string
  	params := req.URL.Query()
  	if _, ok := params["seperator"]; ok {
  		sep = params.Get("seperator")
  	}
  	if _, ok := params["separator"]; ok {
  		sep = params.Get("separator")
  	}
  
  	// Construct the args
  	listArgs := structs.KeyListRequest{
  		Datacenter:   args.Datacenter,
  		Prefix:       args.Key,
  		Seperator:    sep,
  		QueryOptions: args.QueryOptions,
  	}
  
  	// Make the RPC
  	var out structs.IndexedKeyList
  	if err := s.agent.RPC("KVS.ListKeys", &listArgs, &out); err != nil {
  		return nil, err
  	}
  	setMeta(resp, &out.QueryMeta)
  
  	// Check if we get a not found. We do not generate
  	// not found for the root, but just provide the empty list
  	if len(out.Keys) == 0 && listArgs.Prefix != "" {
  		resp.WriteHeader(http.StatusNotFound)
  		return nil, nil
  	}
  
  	// Use empty list instead of null
  	if out.Keys == nil {
  		out.Keys = []string{}
  	}
  	return out.Keys, nil
  }
docs: // KVSGetKeys handles a GET request for keys