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.

Modifica questa pagina