Páginas modulares con Swift Vapor 4

Web modulares con Swift Vapor 4 y Leaf

Swift Vapor es un framework de servidor web escrito en Swift. Proporciona una forma fácil de crear aplicaciones web y servicios web utilizando el lenguaje de programación Swift. Es un framework altamente expresivo y utiliza el modelo de programación asíncrona con async/await desde su versión 4.0. En versiones anteriores se utilizaban los conocidos como «Future» y «Promise» similares a lo que podemos ver en otros lenguajes web como JavaScript. Si a Swift Vapor unimos Leaf, tenemos una herramienta que no sólo nos permite gestionar tareas más orientadas al back-end, si no que podremos generar también contenidos front-end, de una forma muy intuitiva.

Vapor incluye una serie de herramientas y librerías, que permiten realizar tareas comunes en desarrollo web, como el manejo de solicitudes HTTP, gestión de bases de datos y la creación de plantillas HTML.

Creando una web con Swift Vapor y Leaf

Para crear una página anidada en Swift Vapor, primero debemos crear una plantilla que represente la página anidada. Esto implica definir la estructura HTML de la página y, opcionalmente, utilizar etiquetas de plantilla Leaf para insertar datos dinámicos en la página.

Una vez que tenga la plantilla de la página anidada creada, crearemos una ruta en Vapor para manejar solicitudes a la página. Esto se puede hacer creando una instancia de Route y proporcionando una closure (o bloque) que se ejecutará cuando se reciba una solicitud a esa ruta.Dentro de la closure, vamos a utilizar Leaf para renderizar la plantilla de la página anidada y devolver el resultado como una respuesta a la solicitud.

Por ejemplo, supongamos que queremos crear una página anidada que se muestre en la ruta /users/:id, donde :id es un parámetro de ruta que representa el identificador del usuario a mostrar en la página.

La plantilla de la página en Leaf tendría una estructura como esta:

#extend("base") // donde base es otra plantilla html creada con Leaf
    #export("body")
      <h1>User #(id)</h1>
      <p>Name: #(name)</p>
      <p>Email: #(email)</p>
    #endexport
#endextend

A continuación, creamos una ruta en la aplicación para manejar solicitudes a la página anidada:

app.get("users", ":id") { req -> EventLoopFuture<View> in
  let id = req.parameters.get("id")!
  let user = try User.find(id)

  return req.view.render("user", ["id": user.id, "name": user.name, "email": user.email])
}

En este ejemplo, se crea una ruta GET que maneja solicitudes a la ruta /users/:id.

Cuando se recibe una solicitud, se recupera el identificador del usuario de los parámetros de ruta y se recupera la información del usuario.

Finalmente, utilizamos Leaf para renderizar la plantilla user y se devuelve el resultado como una respuesta a la solicitud.

Swift Vapor y Leaf forman una genial combinación, permiten crear contenidos legibles, mantenible y mantenibles de forma muy sencilla.

De la misma forma que depuramos nuestro código Swift en apps, podemos hacerlo en Swift Vapor utilizando lldb, si quieres conocer más acerca de cómo funciona este depurador de código, visita esta publicación acerca de lldb.