<T, R extends ApiResponse<T>> PendingResult<T> post(
      ApiConfig config,
      Class<? extends R> clazz,
      Map<String, String> headers,
      Map<String, List<String>> params) {
    checkContext(config.supportsClientId);

    StringBuilder url = new StringBuilder(config.path);
    if (config.supportsClientId && clientId != null) {
      url.append("?client=").append(clientId);
    } else {
      url.append("?key=").append(apiKey);
    }

    if (config.supportsClientId && urlSigner != null) {
      String signature = urlSigner.getSignature(url.toString());
      url.append("&signature=").append(signature);
    }

    String hostName = config.hostName;
    if (baseUrlOverride != null) {
      hostName = baseUrlOverride;
    }

    final Map<String, String> allHeaders = addDefaultHeaders(headers);

    return requestHandler.handlePost(
        hostName,
        url.toString(),
        params.get("_payload").get(0),
        allHeaders,
        clazz,
        config.fieldNamingPolicy,
        errorTimeout,
        maxRetries,
        exceptionsAllowedToRetry,
        requestMetricsReporter.newRequest(config.path));
  }
Shut down this GeoApiContext instance, reclaiming resources. After shutdown() has been called,
no further queries may be done against this instance.
src/main/java/com/google/maps/GeoApiContext.java