class ParseRESTCommand extends ParseRequest<JSONObject> {

  public String getCacheKey() {
    String json;
    if (jsonParameters != null) {
      try {
        json = toDeterministicString(jsonParameters);
      } catch (JSONException e) {
        throw new RuntimeException(e.getMessage());
      }
    } else {
      json = "";
    }

    // Include the session token in the cache in order to avoid mixing permissions.
    if (sessionToken != null) {
      json += sessionToken;
    }

    return String.format(
        "ParseRESTCommand.%s.%s.%s",
        method.toString(),
        ParseDigestUtils.md5(httpPath),
        ParseDigestUtils.md5(json)
    );
  }

  public  ParseRESTCommand(
      String httpPath,
      ParseHttpRequest.Method httpMethod,
      Map<String, ?> parameters,
      String sessionToken);
  public  ParseRESTCommand(
      String httpPath,
      ParseHttpRequest.Method httpMethod,
      JSONObject jsonParameters,
      String sessionToken);
  private  ParseRESTCommand(
      String httpPath,
      ParseHttpRequest.Method httpMethod,
      JSONObject jsonParameters,
      String localId, String sessionToken);
    ParseRESTCommand(Init<?> builder);

}