DefaultApiClient.java
package com.guinetik.rr.api;
import com.guinetik.rr.RocketRestConfig;
import com.guinetik.rr.http.RocketClient;
import com.guinetik.rr.http.RocketClientFactory;
/**
* Default synchronous API client implementation.
*
* <p>This client executes HTTP requests synchronously, blocking the calling thread
* until the response is received. It's the simplest way to interact with REST APIs
* when you don't need asynchronous processing.
*
* <h2>Basic Usage</h2>
* <pre class="language-java"><code>
* RocketRestConfig config = RocketRestConfig.builder("https://api.example.com")
* .authStrategy(AuthStrategyFactory.createBearerToken("token"))
* .build();
*
* DefaultApiClient client = new DefaultApiClient("https://api.example.com", config);
*
* // Execute a GET request (blocks until response)
* RequestSpec<Void, User> request = RequestBuilder.get("/users/1")
* .responseType(User.class)
* .build();
*
* User user = client.execute(request);
* </code></pre>
*
* <h2>With Custom HTTP Client</h2>
* <pre class="language-java"><code>
* // Create client with circuit breaker
* RocketClient httpClient = RocketClientFactory.fromConfig(config)
* .withCircuitBreaker(5, 30000)
* .build();
*
* DefaultApiClient client = new DefaultApiClient(baseUrl, config, httpClient);
* </code></pre>
*
* @author guinetik <guinetik@gmail.com>
* @see AbstractApiClient
* @see AsyncApiClient
* @see FluentApiClient
* @since 1.0.0
*/
public class DefaultApiClient extends AbstractApiClient {
/**
* Creates a new DefaultApiClient with the specified base URL and configuration.
*
* @param baseUrl The base URL for API requests
* @param config The RocketRest configuration
*/
public DefaultApiClient(String baseUrl, RocketRestConfig config) {
super(baseUrl, config, createHttpClient(baseUrl, config));
}
/**
* Creates a new DefaultApiClient with the specified base URL, configuration and a custom client.
*
* @param baseUrl The base URL for API requests
* @param config The RocketRest configuration
* @param client A custom RocketClient implementation
*/
public DefaultApiClient(String baseUrl, RocketRestConfig config, RocketClient client) {
super(baseUrl, config, client);
}
/**
* Creates an HTTP client with the appropriate options.
*
* @param baseUrl The base URL for API requests
* @param config The RocketRest configuration
* @return A new RocketClient
*/
private static RocketClient createHttpClient(String baseUrl, RocketRestConfig config) {
return RocketClientFactory.fromConfig(config)
.build();
}
}