mirror of https://github.com/vapor/docs.git
77 lines
2.4 KiB
Markdown
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.
|
|
|
|
|