Vai al contenuto

Request

L'oggetto Request è passato come parametro ad ogni route handler.

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

È la finestra principale per il resto delle funzionalità di Vapor. Contiene API per il corpo della richiesta, i parametri della query, il logger, il client HTTP, l'Authenticator e altro ancora. Accedere a questa funzionalità tramite la richiesta mantiene la computazione sul corretto event loop e consente di simulare il comportamento per i test. È anche possibile aggiungere i propri servizi alla Request con le estensioni.

La documentazione API completa per Request può essere trovata qui.

Application

La proprietà Request.application contiene un riferimento all'oggetto Application. Questo oggetto contiene tutta la configurazione e il funzionamento principale dell'applicazione. La maggior parte di essa dovrebbe essere impostata in configure.swift prima che l'applicazione parta completamente, e molte delle API a basso livello non saranno necessarie nella maggior parte delle applicazioni. Una delle proprietà più utili è Application.eventLoopGroup, che può essere utilizzata per ottenere un EventLoop per i processi che ne hanno bisogno tramite il metodo any(). Contiene anche l'Environment.

Body

Se si desidera accedere direttamente al corpo della richiesta come ByteBuffer, è possibile utilizzare Request.body.data. Esso può essere utilizzato per lo streaming dei dati dal corpo della richiesta a un file (anche se è meglio utilizzare la proprietà fileio della richiesta) o a un altro client HTTP.

Cookies

Anche se l'utilizzo più utile dei cookie è tramite le sessioni integrate, è anche possibile accedere ai cookie direttamente tramite 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

Tramite Request.headers si può accedere ad un oggetto HTTPHeaders: esso contiene tutti gli header che sono state inviate inviati con la richiesta. Può, per esempio, essere utilizzato per accedere all'intestazione Content-Type.

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

Si può vedere la documentazione completa per HTTPHeaders qui. Vapor implementa anche diverse estensioni a HTTPHeaders per semplificare il lavoro con gli header più comunemente utilizzati; un elenco è disponibile qui.

Indirizzo IP

Si può accedere al SocketAddress che rappresenta il client tramite Request.remoteAddress, che può essere utile per il logging o il rate limiting utilizzando la rappresentazione stringa Request.remoteAddress.ipAddress. Potrebbe non rappresentare accuratamente l'indirizzo IP del client se l'applicazione è dietro un proxy inverso.

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

Si può vedere la documentazione completa per SocketAddress qui.