Client¶
L'API client di Vapor ti permette di fare chiamate HTTP a risorse esterne. Si basa su async-http-client e si integra con l'API content.
Panoramica¶
Puoi accedere al client di default attraverso Application
o in un handler di route attraverso Request
.
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
.
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 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
.
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:
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
:
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.
// 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.