Przejdź do treści

Klient#

API klienta Vapora pozwala na wykonywanie żądań HTTP do zewnętrznych zasobów. Jest zbudowane na bazie async-http-client i integruje się z API content.

Przegląd#

Dostęp do domyślnego klienta możesz uzyskać poprzez Application lub w route handlerze poprzez Request.

app.client // Client

app.get("test") { req in
    req.client // Client
}

Klient aplikacji jest przydatny do wykonywania żądań HTTP podczas konfiguracji. Jeśli wykonujesz żądania HTTP w route handlerze, zawsze używaj klienta requestu.

Metody#

Aby wykonać żądanie GET, przekaż żądany URL do metody pomocniczej get.

let response = try await req.client.get("https://httpbin.org/status/200")

Istnieją metody dla każdego z czasowników HTTP, takich jak get, post i delete. Odpowiedź klienta jest zwracana jako future i zawiera status HTTP, nagłówki oraz ciało.

Content#

API content Vapora jest dostępne do obsługi danych w żądaniach i odpowiedziach klienta. Aby zakodować content, parametry zapytania lub dodać nagłówki do żądania, użyj closure beforeSend.

let response = try await req.client.post("https://httpbin.org/status/200") { req in
    // Zakoduj query string do URL żądania.
    try req.query.encode(["q": "test"])

    // Zakoduj JSON do ciała żądania.
    try req.content.encode(["hello": "world"])
    
    // Dodaj nagłówek auth do żądania
    let auth = BasicAuthorization(username: "something", password: "somethingelse")
    req.headers.basicAuthorization = auth
}
// Obsłuż odpowiedź.

W podobny sposób możesz również zdekodować ciało odpowiedzi, używając Content:

let response = try await req.client.get("https://httpbin.org/json")
let json = try response.content.decode(MyJSONResponse.self)

Jeśli używasz futures, możesz skorzystać z flatMapThrowing:

return req.client.get("https://httpbin.org/json").flatMapThrowing { res in
    try res.content.decode(MyJSONResponse.self)
}.flatMap { json in
    // Użyj JSON tutaj
}

Konfiguracja#

Możesz skonfigurować bazowy klient HTTP poprzez aplikację.

// Wyłącz automatyczne podążanie za przekierowaniami.
app.http.client.configuration.redirectConfiguration = .disallow

Zwróć uwagę, że musisz skonfigurować domyślnego klienta przed jego pierwszym użyciem.

Edytuj tę stronę