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.

programmatore seduto alla scrivania

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.