protected <JsonType extends JsonStructure, ValueType>
    ValueType invoke(String operation, int id, RequestClosure<JsonType> requestClosure, ResponseClosure<JsonType, ValueType> responseClosure) {
        return invoke(operation, Integer.toString(id), null, null, requestClosure, responseClosure);
    }
protected < JsonType extends JsonStructure , ValueType > ValueType invoke ( String operation , int id , RequestClosure < JsonType > requestClosure , ResponseClosure < JsonType , ValueType > responseClosure ) { return invoke ( operation , Integer . toString ( id ) , null , null , requestClosure , responseClosure ) ; }
Performs a REST API invocation. This is wrapper function for {@link #invoke(String, String, String,
ApiTokenClient.QueryClosure, ApiTokenClient.RequestClosure,
ApiTokenClient.ResponseClosure)}

@param operation       operation name, such as <code>tests</code>, <code>data-stores</code>, etc
@param id              resource ID (if fetching a specific resource)
@param requestClosure  closure to create the request, such as GET, POST, PUT, DELETE
@param responseClosure closure to convert the response JSON into a value-object
@param <JsonType>      JSON type, such as JsonObject, JsonArray
@param <ValueType>     value-type, such as {@link com.loadimpact.resource.Test}, {@link
com.loadimpact.resource.UserScenario}, etc
@return a single value-object or a list of it
@throws com.loadimpact.exception.ApiException if anything goes wrong, such as the server returns HTTP status not being 20x