Presentación enfocada a mostrar las funcionalidades más importante de los micro framework Spark y Ratpack. Dando una inducción a los conceptos básicos en su utilización del protocolo HTTP y los servicios REST.
Impartida en la segunda edición en el Barcamp 2014, Pontificia Universidad Católica Madre y Maestra (PUCMM), Santiago de los Caballeros, República Dominicana.
1. Web Frameworks Ligeros y Micros
Sobre Java
Ing. Carlos Camacho
Santiago, República Dominicana, 29/11/2014
Barcamp.org.do
2. Presentación (un poco personal)
● Carlos Camacho.
– Profesor por vocación.
– Pertenezco al lado oscuro de la fuerza (Dark Side).
– Aldea de la Hoja (Konoha).
– Evangelista de Java.
– Apasionado de Linux.
– Nacido en la era Nintendo. Amante de los RPG
(Chrono Trigger).
– Rock, Merengue, Bachata, Balada, Típico, Salsa,
Son, Dembow, Reggaeton. (Pirata)
3. Presentación (un poco más serio)
● Carlos Camacho.
– Ingeniero Telemático.
– Magíster Tecnología Educativa.
– Profesor Departamento de Sistema, PUCMM.
– Más de 7 años de experiencia desarrollo de sistemas
en tecnología Java (JSE y JEE).
– 4 años de implementación en sistemas basados en
Groovy y Grails.
– Coordinador de Sistemas, Reefer Services, S.A.S.
– Fundación Código Libre Santiago - Miembro Fundador.
– Presidente AvatharTech.
4. Objetivos
● Inducción protocolo HTTP.
● Inducción REST.
● Utilización micro framework web en la JVM.
7. HyperText Transfer Protocol
● Protocolo utilizado en cada transacción de
World Wide Web.
● Orientado a transacción
● Características técnicas:
o TCP
o IP
o Puertos: 80 y 443 (SSL)
● Sin estado
● Transacción sobre recursos (URL)
● Escalable
● Controlado por la W3C.
8. Uniform Resource Locator (URL)
● Mecanismo para encontrar recursos.
● La dirección es única.
● Trabaja de la mano con el servicio de DNS
(Domain Name Services)
● El formato Utilizado es:
o protocolo://dirección:puerto/contexto/ruta_recurso
9. Peticiones HTTP
● Donde SP, representa Espacio en Blanco.
● CRLF, cambio de línea y retorno de carro.
● Métodos: Get, Post, Header, Put, Delete, Trace,
Options, Connect y Patch.
● Las Cabeceras o Headers, información necesaria o
complementaria para procesar la petición.
● Valores entre paréntesis son opcionales y *, pueden
repetirse.
10. Ejemplo Petición Http
● En el navegador Chrome, abrir la
herramienta de desarrollador.
● Visitar a http://www.pucmm.edu.do/
11. Respuesta HTTP
● Código de estado, indica si la transacción fue ejecutada
de manera correcta.
● El cuerpo del mensaje, corresponde al valor retornado
por el servidor.
12. Códigos de Estado
● 1xx: Mensajes.
● 2xx: Operación realizada con éxito.
o 200: Ok.
● 3xx: Redirección.
o 304: No modificado.
● 4xx: Error por el cliente.
o 404: No encontrado.
● 5xx: Error por el servidor.
o 500: Error Interno.
13. Ejemplo Respuesta Http
● En el navegador Chrome, abrir la
herramienta de desarrollador.
● Visitar a http://www.pucmm.edu.do/
15. ¿Sin Estado?
● Stateless Protocol
● No guarda información entre transacción,
cada petición sigue el mismo proceso.
● Una vez entregada la información la
conexión se cierra.
● Permite escalar con mucha facilidad.
17. ¿Qué es REST?
● REST, REpresentational State Transfer, Es un
estilo de arquitectura de software distribuido.
● Definición simple, permitiendo una fácil integración
entre servidor y cliente.
● Presentado por Roy Fielding en el 2000, en su tesis
doctoral.
Piensa en REST como:
“Cuando un navegador obtiene y visualiza un
elemento de una página html, está obteniendo la
representación del estado actual de un recurso.”
18. Diseño API REST
● Se basan en cuatro principios:
o Utiliza los métodos HTTP de manera explícita.
o No mantiene estado. (Como el protocolo
HTTP).
o Expone las URI (Uniform Resource Identifier)
como directorios.
o Transfiere formato definidos por el
programador, XML, JSON, entre otros.
19. Métodos HTTP Explícita
● Se utiliza los métodos del protocolo HTTP, como
asociación uno a uno con las operaciones de
crear, leer, actualizar y borrar.
20. Métodos Http Explícita - 1
● Si tenemos un servicio para la gestión de los
estudiantes, corriendo en la siguiente dirección:
http://localhost/rest/estudiante?
buscar=”Carlos%”
Método Http Acción
POST Error
GET Retorna todos los estudiantes
con el criterio de búsqueda.
PUT Error
DELETE Borra todos los estudiantes con
el criterio de búsqueda.
21. Métodos Http Explícita - 2
● Si tenemos un servicio para la gestión de los
estudiantes, corriendo en la siguiente dirección:
http://localhost/rest/estudiante?matricula=valor1&nombre=valor2&.
Método Http Acción
PUT Crear un estudiante
GET Retorna todos los
estudiantes con el criterio
de búsqueda.
POST Actualiza un estudiante
DELETE Borra todos los
estudiantes con el criterio
de búsqueda.
22. URI en forma de directorios
● Las URI utilizadas en un servicios REST debe
ser intuitiva, Auto-documentadas y fácil de
implementar. Ejemplos:
o http://localhos/rest/estudiante/{matricula}
o http://localhos/rest/estudiante/isc/2001/1136
o http://localhos/rest/estudiante/resgistro/{año}/{mes}/{}
23. Transfiere formatos
● Indica los datos que estaremos recibiendo y
transfiriendo entre servidor y cliente.
● Indicando el MIME-TYPE se controla y se valida
las peticiones.
o application/json
o application/xml
o application/html
o plain/text
25. ¿Framework?
● “Un conjunto estandarizado de conceptos,
prácticas y criterios para enfocar un tipo de
problemática particular que sirve como
referencia, para enfrentar y resolver nuevos
problemas de índole similar.” Wikipedia, 2014
● Puntos importantes:
– Estandarización de conceptos.
– Referencia para resolver problemas en concreto.
– Disminución de la curva de aprendizaje.
– Agilizar el tiempo de desarrollo.
26. ¿Framework Web?
● Es un conjunto de componente orientado al
desarrollo de aplicaciones Web, interactuando
con el protocolo HTTP.
Listado de Frameworks Web por Lenguaje de Programación
Lenguaje Cantidad
ASP.NET 6
C++ 4
Haskell 3
Java 34
JavaScritp 9
Scala 3
Perl 5
PHP 26
Python 16
Ruby 7
http://en.wikipedia.org/wiki/Comparison_of_web_application_frameworks
27. ¿Framework Pesados, Ligeros y Micros?
● Es una categoría de los framework en
función:
– A sus dependencias de clases o librerías.
– Escalabilidad.
– Manejo de carga.
– Bajo o alto acople.
– Visión para resolver un problema en contexto.
● La categoría de un framework puede variar en
el tiempo.
http://en.wikipedia.org/wiki/Comparison_of_web_application_frameworks
28. Framework Pesados
● Son diseñados para abarcar la solución de problemas
de un amplio espectro:
– Programación distribuida.
– Clúster de servidores de aplicaciones
– Manejo de transacciones
– Varios API | Módulos | JSR trabajando entre si.
– Proporcional al uso de recursos que demandan.
– Curva de aprendiza más pronunciada.
● En Java:
– JEE 7
– Frameworks Full Stack.
29. Framework Ligero
● Diseñados para trabajar problemas
específicos**.
● Baja dependencias en librerías externas.
● Curva de aprendizaje menos pronunciada.
● Utiliza menos recursos.
● Pueden utilizar o no contenedores (Servidores
de aplicaciones).
30. Framework Micro
● Diseñados para un problema en concreto.
(DSL)
● No están atados a patrones de arquitectura,
como es el MVC (Model – View - Controller).
● En el contexto Web:
– Implementan protocolo HTTP.
– Orientado a servicios REST.
– Pueden implementar manejo de plantillas.
– Poca dependencia en librerías.
31.
32. Spark
● Inspirado en Sinatra (Ruby).
● Permite trabajar con el protocolo HTTP en
minutos.
● Enfocado resolver problemas de integración y
aplicaciones web para un problema en
concreto.
● API rediseñada para trabajar en Java 8 con
los lambdas.
● Basado en Servlets.
33. Características
● Disponible en repositorio Maven.
● Motor de rutas.
● Cookies.
● Sesiones.
● Filtros.
● Excepciones.
● Templates.
34. Hola Mundo Spark
● Incluir la dependencia bajo Gradle:
compile 'com.sparkjava:spark-core:2.0.0'
● Crear clase con el siguiente código:
35. Manejo de Rutas
● Se definen por tres simples elementos:
– Método HTTP → get, post, put, delete, options.
– Ruta → /barcamp /barcamp/2014
– Función callback → (request, response) → {}
37. Trazabilidad de Peticiones
● Cookies: Pequeña información (4KB) enviada
por un sitio web y almacenada en el
navegador del cliente. Cada vez que se
realiza una petición la información es enviada
nuevamente al sitio web.
● Sesiones: Crea un identificar único en el
servidor para la primera petición de un
usuario, enviado dicho ID mediante una
Cookie al cliente. En el servidor es creado un
ambito de variable que tiene vigencia mientras
la sesión este disponible.
39. Filtros
● Son elementos que permites interceptar las
llamadas antes de alcanzar el recurso
solicitado y después de procesarlo.
● Son utilizados para controlar elementos
transversales de nuestra aplicación, como
son:
– Seguridad.
– Registro de log.
– Agregar o cambiar Header del protocolo HTTP.
41. Plantillas
● Implementa un patrón de arquitectura Modelo
– Vista, separando elementos de la vista con
el modelo de datos.
● Permite trabajar en paginas más vistosas
incluyendo CSS, JavaScritp e Imágenes.
● Spark implementa varios motores de plantilla:
– Freemarker.
– Velocity.
– Mustache.
45. Ratpack
● Inspirado en Sinatra (Ruby).
● Construido sobre Netty**.
● Escrito en Java.
● Optimizado para Groovy.
● Alto rendimiento.
● Integración Google Guice. (Opcional)
● Integración Gradle. (Opcional)
● No utiliza contenedor de Servlets.
● Utiliza pocos recursos.
46. Ratpack & Netty
● Netty es un framework NIO (Non-blocking I/O)
para aplicaciones que requieran el manejo de
protocolo de red, TCP, UDP, FTP, SMTP,
RSTP, HTTP, entre otros.
● Netty simplifica el desarrollo de aplicaciones
asincronas (Event-driven)
● Ratpack utiliza a Netty para simplificar el
desarrollo de aplicaciones bajo el protocolo
HTTP.
47. Hola Mundo Ratpack
● Incluir la dependencia bajo Gradle:
compile 'io.ratpack:ratpack-groovy:0.9.10'
● Crear Script Groovy con el siguiente código:
49. Spark o Ratpack
● Ambos están diseñados para trabajar con
Java 8.
● Spark es una envoltura a los funcionalidades
de los Servlet.
● Ratpack utiliza Netty, soporte de llamadas no
bloqueantes. Facilita el desarrollo de
aplicaciones utilizando HTTP.
● Spark mejor documentación.