vapor-docs/docs/basics/client.it.md

77 lines
2.4 KiB
Markdown

# 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.