Jose Hernández

Vert.x Web II

Anteriormente, en la entrada Vert.x Web I vimos como podemos comenzar a desarrollar una aplicación web con Vert.x y las facilidades que nos da para ello. En esta entrada completaremos algunas de las características que vimos en la primera para ver todas las caracteristicas básicas con las que poder desarrollar una aplicación completa.

Manejo de cookies

Vert.x proporciona una forma sencilla para manejar las cookies. Al igual que se hace para para los datos en el cuerpo de la petición, para poder acceder a las cookies tenemos que activar un handler. Este handler se llama CookieHandler y lo activaremos de la siguiente forma:

1
router.route().handler(CookieHandler.create());

Una vez activado, podemos obtener una cookie por su nombre con getCookie u obtener todas ellas con cookies. El RoutingContext nos proporciona dos métodos, uno para añadir una cookie nueva addCookie y otro para eliminarlas removeCookie

1
2
3
4
5
6
7
8
9
10
11
12
router.route().handler(CookieHandler.create());

router
    .post("/comment")
    .handler(routingContext -> {
        Cookie cookie = routingContext.getCookie("userInfo");
        String name = cookie.getValue();

        ...

        routingContext.addCookie(Cookie.cookie("userInfo", name));
    });

Leer más

Vert.x Web I

Como vimos en la entrada sobre Vert.x, este toolkit nos permite crear aplicaciones reactivas de una forma muy sencilla. En esta ocasión vamos a hablar de Vert.x Web que es un componente que nos proporciona un conjunto de funcionalidad para crear aplicaciones web.

En esta serie de entradas sobre Vert.x Web veremos todo el amplio abanico de opciones que nos ofrece este toolkit para crear una aplicación web. Comenzaremos por lo más básico para luego ir añadiendo características más avanzadas.

Primeros pasos

Vert.x Web nos permite crear cualquier tipo de aplicación web que queramos, aplicaciones clásicas en el lado servidor, aplicaciones RESTfull e incluso aplicaciones en tiempo real (con server push). No importa que es lo que queramos crear, Vert.x nos proporciona las herramientas para que desarrollemos cualquier aplicación web que tengamos en mente.

Para crear un proyecto con Vert.x Web hay que añadir su dependencia. Si usamos Gradle añadiremos en el fichero build.gradle la siguiente dependencia:

dependencies {
  compile 'io.vertx:vertx-web:3.4.1'
}

Si usamos Maven añadiremos en el fichero pom.xml la dependencia:

...
  <dependency>
    <groupId>io.vertx</groupId>
    <artifactId>vertx-web</artifactId>
    <version>3.4.1</version>
  </dependency>
...

Leer más

Vert.x

Vert.x es un toolkit para desarrollar aplicaciones reactivas en la JVM. Como sus propios creadores lo definen, Vert.x no es ni un servidor de aplicaciones, ni un framework, son simplemente componentes que pueden añadirse a una aplicación sin la necesidad de modificar la estructura de la misma.

Una aplicación reactiva es aquella que cumple con el manifiesto reactivo. El manifiesto reactivo indica que una aplicación reactiva debe cumplir los siguientes 4 puntos:

  • Responsive: tiene que responder a peticiones en un tiempo razonable.
  • Resilient: tiene que seguir funcionando en caso de errores, es decir, la aplicación tiene que estar diseñada para tratar con errores y seguir funcionando correctamente aunque ocurran.
  • Elastic: el sistema tiene que seguir siendo responsive aunque esté soportando altas carga, lo que implica que tiene que estar preparado para poder escalar.
  • Message driven: los componentes de un sistema reactivo tienen que interactuar mediante mensajes asíncronos, tanto entre ellos como entre componentes de terceros.

Vert.x está dirigido por eventos y es no bloqueante. Los eventos se gestionan mediante el Event Loop el cual se encarga de que cada uno de ellos llegue a su manejador correspondiente. Una regla de oro en Vert.x es que el Event Loop nunca tiene que ser bloqueado, ya que en ese caso no se enviarian eventos y la aplicación dejará de responder.

Otra característica importante de Vert.x es que se pueden usar una gran variedad de lenguajes para programar con él, Java, Groovy, Ceylon, Ruby e incluso JavaScript. Lo cual permite tener diversos equipos trabajando en distintos lenguajes pero con una base común.

Finalmente no podemos dejar de mencionar el Event Bus, un mecanismo ligero con el cual podemos enviar y recibir mensajes.

Leer más

Entorno PHP, Nginx y MySql con Docker

En la última entrada comenté como empezar a adentrarse en el mundo de Docker, creando contenedores, parándolos y personalizándolos para nuestras necesidades. Como se pudo ver, trabajar con Docker es bastante sencillo. Por ello ahora vamos a ver como podemos crear un entorno de trabajo para proyectos PHP usando Docker.

Docker recomienda que cada contenedor contenga un proceso, en este caso utilizaré tres contenedores uno por cada una de las herramientas que se va a utilizar: PHP, Nginx y MySql. Pero antes de empezar hay que preparar en el sistema local los directorios que utilizaremos para que todo funcione correctamente.

Configuración inicial

Lo primero será crear una estructura de directorios donde se pondrá tanto el código fuente, como los ficheros de configuración que se usarán. La ruta base que usaré será /Users/Jose/development y a partir de ella se crearán los siguiente directorios:

  • code/myapp: Dentro del directorio code estarán las aplicaciones, cada una en un subdirectorio. Para este ejemplo se creará el subdirectorio llamado myapp
  • config/nginx: Configuración de Nginx
  • config/php: Configuración de PHP
  • logs: Directorio de logs
  • mysql/data: Directorio donde se almacenarán los datos de MySql
  • docker: Directorio donde pondremos la configuración de las imágenes de docker

El último paso para terminar la configuración es añadir una entrada en el fichero hosts. En los sistemas Linux y OsX lo podemos encontrar en la ruta /etc/hosts y en sistemas Windows en c:\Windows\System32\drivers\etc\hosts. Hay que añadir al final la siguiente línea:

127.0.0.1 myapp.dev

Leer más

Docker

Docker es una herramienta con la cual podemos crear contenedores con todo lo necesario para que nuestra aplicación se ejecute en cualquier entorno. Se puede decir que un contenedor es como una pequeña máquina virtual que contiene un sistema operativo, nuestra aplicación y el software que necesitamos para que funcione. Todo ello junto lo podemos desplegar en cualquier entorno gracias a docker.

Una de las ventajas que tiene esto, es que podemos tener en nuestra máquina de desarrollo contenedores exactamente iguales a los que se ejecutan en producción, por lo tanto podemos desarrollar sobre la misma plataforma en la que más tarde se ejecutará, evitando así los tipicos errores que no ocurren cuando estamo desarrollando, pero aparecen en producción.

Instalar Docker

Para instalar Docker tanto en OSX como en Windows instalaremos DockerToolbox. La instalación de DockerToolbox es mediante un asistente así que no tendría que haber ningún problema, pero por si acaso, aquí está la documentación para la instalación en OSX y la instalación en Windows.

Por su parte la instalación en Linux es también muy sencilla gracias a los gestores de paquetes con los que cuentan cada una de las distintas distribuciones, pero es posible que haya que realizar algunas configuraciones previas. Por ellos aquí dejo la instalación en Ubuntu, Red Hat, CentOS, Fedora y Debian. Si tú distribución no está entre estas, accede a la documentación de Docker y mira si está en la sección de instalación

Leer más

Bower

Bower es un gestor de paquetes para componentes que contienen código HTML, CSS, Javascript, fuentes e imágenes. Es decir, nos permite gestionar los paquetes cuando trabajamos en frontend. Viene a ser el equivalente de Maven o Gradle para Java o Composer para PHP. Bower mantiene un seguimiento de las versiones y paquetes que usas en tu proyecto en un fichero llamado bower.json. Gracias a él todo tu equipo de desarrollo puede mantener un seguimiento con las versiones de cada proyecto que estais usando actualmente.

Instalar Bower

La instalación de Bower es muy sencilla, simplemente necesitamos tener instalado en nuestro equipo node y git. Cumpliendo estos requisitos, ahora abrimos un terminal y escribimos:

> npm install -g bower

Leer más