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.