Saltar a contenido

Cliente

La API cliente de Vapor te permite hacer llamadas HTTP a recursos externos. Está hecha en async-http-client y se integra con la API content.

Descripción

Puedes acceder al cliente por defecto mediante Application, o en un controlador de rutas mediante Request.

app.client // Cliente

app.get("test") { req in
    req.client // Cliente
}

El cliente de la aplicación es útil para realizar peticiones HTTP durante la configuración. Si realizas las peticiones HTTP en un controlador de rutas, usa siempre el cliente de la petición (request).

Métodos

Para realizar una petición GET, proporciona la URL deseada al método de conveniencia get.

let response = try await req.client.get("https://httpbin.org/status/200")

Existen métodos para cada acción HTTP, como get, post, y delete. La respuesta del cliente es devuelta como un futuro y contiene el estado (status) HTTP, las cabeceras y el cuerpo de la petición.

Content

La API content de Vapor está disponible para el manejo de datos en las peticiones y respuestas del cliente. Para codificar contenido, parámetros de petición o añadir cabeceras a la petición, usa el closure beforeSend.

let response = try await req.client.post("https://httpbin.org/status/200") { req in
    // Codifica la cadena de consulta (query) a la petición URL.
    try req.query.encode(["q": "test"])

    // Codifica un JSON en el cuerpo de la petición.
    try req.content.encode(["hello": "world"])

    // Añade una cabecera de autenticación a la petición.
    let auth = BasicAuthorization(username: "something", password: "somethingelse")
    req.headers.basicAuthorization = auth
}
// Controla la respuesta.

También puedes decodificar el cuerpo de la respuesta usando Content de manera similar:

let response = try await req.client.get("https://httpbin.org/json")
let json = try response.content.decode(MyJSONResponse.self)

Si estás utilizando futuros, puedes usar flatMapThrowing:

return req.client.get("https://httpbin.org/json").flatMapThrowing { res in
    try res.content.decode(MyJSONResponse.self)
}.flatMap { json in
    // Usa JSON aquí
}

Configuración

Puedes configurar el cliente HTTP subyacente mediante la aplicación.

// Desactiva el seguimiento de redireccionado automático.
app.http.client.configuration.redirectConfiguration = .disallow

Ten en cuenta que debes configurar el cliente por defecto antes de usarlo por primera vez.