Client¶
Met Vapor's client API kunt u HTTP-oproepen doen naar externe bronnen. Het is gebouwd op async-http-client en integreert met de content API.
Overzicht¶
Je kunt toegang krijgen tot de standaard client via Application
of in een route handler via Request
.
app.client // Client
app.get("test") { req in
req.client // Client
}
De client van de applicatie is handig voor het maken van HTTP verzoeken tijdens configuratietijd. Als je HTTP verzoeken doet in een route handler, gebruik dan altijd de client van het verzoek.
Methodes¶
Om een GET
verzoek te doen, geef de gewenste URL door aan de get
convenience methode.
let response = try await req.client.get("https://httpbin.org/status/200")
Er zijn methoden voor elk van de HTTP methodes zoals get
, post
, en delete
. Het antwoord van de client wordt teruggestuurd als een future en bevat de HTTP status, headers, en body.
Content¶
Vapor's content API is beschikbaar voor het verwerken van gegevens in client verzoeken en antwoorden. Om inhoud of query parameters te coderen of headers toe te voegen aan het verzoek, gebruik de beforeSend
closure.
let response = try await req.client.post("https://httpbin.org/status/200") { req in
// Encodeer de querystring naar de URL van het verzoek.
try req.query.encode(["q": "test"])
// Encodeer JSON naar de request body.
try req.content.encode(["hello": "world"])
// Voeg de auth header toe aan het verzoek.
let auth = BasicAuthorization(username: "something", password: "somethingelse")
req.headers.basicAuthorization = auth
}
// Behandel het antwoord.
Je kunt ook de response body decoderen met Content
op een vergelijkbare manier:
let response = try await req.client.get("https://httpbin.org/json")
let json = try response.content.decode(MyJSONResponse.self)
Als je futures gebruikt, kun je flatMapThrowing
gebruiken:
return req.client.get("https://httpbin.org/json").flatMapThrowing { res in
try res.content.decode(MyJSONResponse.self)
}.flatMap { json in
// Gebruik JSON hier
}
Configuratie¶
U kunt de onderliggende HTTP-client configureren via de applicatie.
// Automatische doorverwijzing uitschakelen.
app.http.client.configuration.redirectConfiguration = .disallow
Merk op dat je de standaardclient moet configureren voordat je hem voor het eerst gebruikt.