# Client L'API client di Vapor ti permette di fare chiamate HTTP a risorse esterne. Si basa su [async-http-client](https://github.com/swift-server/async-http-client) e si integra con l'API [content](content.md). ## Panoramica Puoi accedere al client di default attraverso `Application` o in un handler di route attraverso `Request`. ```swift app.client // Client app.get("test") { req in req.client // Client } ``` Il client dell'applicazione è utile per fare richieste HTTP durante la configurazione. Se fai richieste HTTP in un handler di route, usa sempre il client della richiesta. ### Metodi Per fare una richiesta `GET`, passa l'URL desiderato al comodo metodo `get`. ```swift let response = try await req.client.get("https://httpbin.org/status/200") ``` Ci sono metodi per ogni verbo HTTP come `get`, `post`, e `delete`. La risposta del client viene ritornata come future e contiene lo stato, l'header, e il corpo HTTP. ### Contenuto L'API [content](content.md) di Vapor è disponibile per gestire i dati nelle richieste e nelle risposte del client. Per codificare il contenuto, parametri della query o aggiungere header alla richiesta, usa la closure `beforeSend`. ```swift let response = try await req.client.post("https://httpbin.org/status/200") { req in // Codifica la stringa di query all'URL della richiesta. try req.query.encode(["q": "test"]) // Codifica il JSON per il corpo della richiesta. try req.content.encode(["hello": "world"]) // Aggiungi l'header di autenticazione alla richiesta let auth = BasicAuthorization(username: "something", password: "somethingelse") req.headers.basicAuthorization = auth } // Gestisci la risposta. ``` Puoi anche decodificare il corpo della risposta usando `Content` in modo simile: ```swift let response = try await req.client.get("https://httpbin.org/json") let json = try response.content.decode(MyJSONResponse.self) ``` Se usi i future puoi usare `flatMapThrowing`: ```swift return req.client.get("https://httpbin.org/json").flatMapThrowing { res in try res.content.decode(MyJSONResponse.self) }.flatMap { json in // Usa il JSON qui } ``` ## Configurazione Puoi configurare il client HTTP sottostante tramite l'applicazione. ```swift // Disabilita il redirect automatico seguente. app.http.client.configuration.redirectConfiguration = .disallow ``` Nota che devi configurare il client di default _prima_ di usarlo per la prima volta.