Saltar a contenido

Solicitud (Request)

El objeto Request (solicitud) se pasa a cada controlador de ruta.

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

Es la ventana principal al resto de la funcionalidad de Vapor. Contiene APIs para el cuerpo de la solicitud, parámetros de consulta, logger, cliente HTTP, Autenticador y más. Accediendo a esta funcionalidad a través de la solicitud, se mantiene el cálculo en el bucle de eventos correcto y permite simularla para realizar pruebas. Incluso puedes añadir tus propios servicios a la Request con extensiones.

La documentación completa de la API para Request se puede encontrar aquí.

Aplicación

La propiedad Request.application contiene una referencia a Application. Este objeto contiene toda la configuración y la funcionalidad central de la aplicación. La mayor parte solo se debe configurar en configure.swift, antes de que la aplicación se inicie por completo, y muchas de las APIs de bajo nivel no serán necesarias en la mayoría de las aplicaciones. Una de las propiedades más útiles es Application.eventLoopGroup, que se puede utilizar para obtener un EventLoop para los procesos que necesitan uno nuevo a través del método any(). También contiene Environment.

Body

Si quieres acceder directamente al cuerpo de la solicitud como un ByteBuffer, puedes utilizar Request.body.data. Esto puede utilizarse para transmitir datos desde el cuerpo de la solicitud a un archivo (aunque para esto deberías utilizar la propiedad fileio en la solicitud) o a otro cliente HTTP.

Cookies

Aunque la aplicación más útil de las cookies es a través de las sesiones integradas, también puedes acceder a las cookies directamente a través de 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
}

Cabeceras

Se puede acceder a un objeto HTTPHeaders en Request.headers. Contiene todas las cabeceras (headers) enviadas con la solicitud. Se puede utilizar para acceder a la cabecera Content-Type, por ejemplo.

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

Consulta más documentación sobre HTTPHeaders aquí. Vapor también añade varias extensiones a HTTPHeaders para facilitar el trabajo con las cabeceras más utilizadas; la lista está disponible aquí

Dirección IP

Puedes acceder a la SocketAddress que representa al cliente a través de Request.remoteAddress, que puede ser útil para el registro o la limitación de velocidad utilizando la representación de la cadena Request.remoteAddress.ipAddress. Puede que no represente con exactitud la dirección IP del cliente si la aplicación está detrás de un reverse proxy.

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

Consulta más documentación sobre SocketAddress aquí.