code: private <T> CompletionStage<T> request(URI uri, Map<String, String> headers, String data, JsonParser<T> parser) {
          return executeRequest(httpClient, prepareRequest(uri, headers, data), parser);
      }
docs: Perform HTTP request and parse the result into a given result type.
  
  @param data the data to send with the request
  @return CompletionStage holding object of type T