Nel mondo dello sviluppo backend Java, il consumo di API REST è all’ordine del giorno.
Spesso ci si affida a strumenti noti come RestTemplate o WebClient, ma esistono alternative altrettanto valide, più leggere e a basso livello che garantiscono maggiore controllo: tra queste, Apache HttpClient con Fluent API si distingue per chiarezza e potenza. In questa guida vedremo come usarlo in modo pratico e moderno, con esempi concreti e una panoramica sulle sue migliori configurazioni.
Perché usare Apache HttpClient con Fluent API?
Apache HttpClient è una libreria consolidata e potente per gestire comunicazioni HTTP in Java. L’introduzione della Fluent API ha semplificato drasticamente la sintassi, rendendo il codice più leggibile e intuitivo, specialmente per operazioni comuni come richieste GET e POST.
Rispetto a RestTemplate e WebClient:
- Non ha bisogno di dipendenze Spring.
- Offre controllo granulare su configurazioni e timeout.
- Ottimo per microservizi o client REST standalone.
Configurare un client REST robusto
Ecco un esempio base di configurazione con gestione di timeout e pool di connessioni:
RequestConfig requestConfig = RequestConfig.custom()
.setConnectTimeout(5000)
.setConnectionRequestTimeout(5000)
.setSocketTimeout(5000)
.build();
CloseableHttpClient client = HttpClients.custom()
.setDefaultRequestConfig(requestConfig)
.setMaxConnTotal(100) .setMaxConnPerRoute(20)
.build();
Questa configurazione garantisce prestazioni stabili e una buona resistenza a timeout di rete.
Esempi pratici: GET e POST con JSON
Richiesta GET semplice
String response = Request.Get("https://api.example.com/data")
.connectTimeout(3000)
.socketTimeout(3000)
.execute()
.returnContent()
.asString();
Richiesta POST con payload JSON
String jsonPayload = "{\"name\":\"Alessandro\",\"age\":30}";
String response = Request.Post("https://api.example.com/users")
.bodyString(jsonPayload, ContentType.APPLICATION_JSON)
.execute()
.returnContent()
.asString();
L’approccio è pulito, diretto e adatto per microservizi, script automatici o backend modulari.
Gestione degli errori e dei timeout
Uno dei punti di forza di HttpClient è la possibilità di intercettare con precisione gli errori:
try {
String response = Request.Get("https://api.example.com/unreliable")
.connectTimeout(2000)
.socketTimeout(2000)
.execute()
.returnContent()
.asString();
} catch (HttpResponseException e) {
System.err.println("Errore HTTP: " + e.getStatusCode());
} catch (IOException e) {
System.err.println("Problema di rete: " + e.getMessage());
}
Qui distinguiamo gli errori HTTP (es. 404, 500) da quelli di connessione o di timeout. Una buona gestione degli errori è fondamentale per garantire resilienza nei servizi distribuiti.
Quando preferire Fluent API a RestTemplate o WebClient?
- Applicazioni non Spring: dove RestTemplate non è disponibile o eccessivo.
- Client REST lightweight: quando si vuole un approccio minimale senza dipendere dall’intero ecosistema Spring.
- Contesti di testing o scripting: dove servono chiamate HTTP veloci e indipendenti.
Pur non offrendo reactive programming come WebClient, Fluent API con Apache HttpClient è più che sufficiente per la maggior parte delle esigenze REST sincrone.
Apache HttpClient con Fluent API: un grande “sì”!
Apache HttpClient con Fluent API è una soluzione elegante, efficiente e sorprendentemente moderna per interagire con API REST in Java. Offre il giusto bilanciamento tra semplicità e potenza, senza sacrificare leggibilità o controllo.
Se sei alla ricerca di un’alternativa a basso livello ma raffinata a RestTemplate, vale assolutamente la pena provarlo!
Per sviluppare un progetto o assistenza contattaci.