Przejdź do treści

Request#

Obiekt Request jest przekazywany do każdego route handlera.

app.get("hello", ":name") { req -> String in
    let name = req.parameters.get("name")!
    return "Hello, \(name)!"
}

Jest to główne okno do reszty funkcjonalności Vapora. Zawiera API dla ciała żądania, parametrów zapytania, loggera, klienta HTTP, Authenticatora i wielu innych. Dostęp do tej funkcjonalności poprzez request utrzymuje obliczenia na odpowiednim event loopie i pozwala na jej mockowanie na potrzeby testów. Możesz nawet dodać własne serwisy do Request za pomocą rozszerzeń.

Pełną dokumentację API dla Request znajdziesz tutaj.

Application#

Właściwość Request.application przechowuje referencję do Application. Obiekt ten zawiera całą konfigurację i podstawową funkcjonalność aplikacji. Większość z nich powinna być ustawiana tylko w configure.swift, zanim aplikacja w pełni się uruchomi, a wiele niskopoziomowych API nie będzie potrzebnych w większości aplikacji. Jedną z najbardziej przydatnych właściwości jest Application.eventLoopGroup, której można użyć do pobrania EventLoop dla procesów potrzebujących nowego poprzez metodę any(). Zawiera ona również Environment.

Body#

Jeśli chcesz mieć bezpośredni dostęp do ciała żądania jako ByteBuffer, możesz użyć Request.body.data. Może to być wykorzystane do strumieniowania danych z ciała żądania do pliku (chociaż powinieneś zamiast tego użyć w tym celu właściwości fileio na request) lub do innego klienta HTTP.

Cookies#

Chociaż najbardziej przydatnym zastosowaniem cookies są wbudowane sesje, możesz również uzyskać bezpośredni dostęp do cookies poprzez Request.cookies.

app.get("my-cookie") { req -> String in
    guard let cookie = req.cookies["my-cookie"] else {
        throw Abort(.badRequest)
    }
    if let expiration = cookie.expires, expiration < Date() {
        throw Abort(.badRequest)
    }
    return cookie.string
}

Headers#

Obiekt HTTPHeaders jest dostępny pod Request.headers. Zawiera on wszystkie nagłówki wysłane wraz z żądaniem. Może być użyty na przykład do uzyskania dostępu do nagłówka Content-Type.

app.get("json") { req -> String in
    guard let contentType = req.headers.contentType, contentType == .json else {
        throw Abort(.badRequest)
    }
    return "JSON"
}

Dalszą dokumentację dla HTTPHeaders znajdziesz tutaj. Vapor dodaje również kilka rozszerzeń do HTTPHeaders, aby ułatwić pracę z najczęściej używanymi nagłówkami; lista jest dostępna tutaj

Adres IP#

Obiekt SocketAddress reprezentujący klienta jest dostępny poprzez Request.remoteAddress, co może być przydatne do logowania lub ograniczania liczby żądań przy użyciu reprezentacji tekstowej Request.remoteAddress.ipAddress. Może on niedokładnie reprezentować adres IP klienta, jeśli aplikacja znajduje się za reverse proxy.

app.get("ip") { req -> String in
    return req.remoteAddress.ipAddress
}

Dalszą dokumentację dla SocketAddress znajdziesz tutaj.

Edytuj tę stronę