Web framework ligeros y micros en java barcamp 2014
-
Upload
carlos-camacho -
Category
Software
-
view
307 -
download
0
description
Transcript of Web framework ligeros y micros en java barcamp 2014
Web Frameworks Ligeros y Micros Sobre Java
Ing. Carlos Camacho
Santiago, República Dominicana, 29/11/2014Barcamp.org.do
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)
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.
Objetivos
● Inducción protocolo HTTP.● Inducción REST.● Utilización micro framework web en la JVM.
Agenda
● Protocolo HTTP.● Servicios REST.● Diferencia framework web pesados, ligeros y
Micros.● Framework Ligeros:
– Spark → Java
– Ratpack → Groovy
Protocolo HTTP
HyperText Transfer Protocol
● Protocolo utilizado en cada transacción de World Wide Web.
● Orientado a transacción● Características técnicas:
o TCPo IPo Puertos: 80 y 443 (SSL)
● Sin estado● Transacción sobre recursos (URL)● Escalable● Controlado por la W3C.
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
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.
Ejemplo Petición Http
● En el navegador Chrome, abrir la herramienta de desarrollador.
● Visitar a http://www.pucmm.edu.do/
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.
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.
Ejemplo Respuesta Http
● En el navegador Chrome, abrir la herramienta de desarrollador.
● Visitar a http://www.pucmm.edu.do/
Conversación HTTP
¿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.
Servicios REST
¿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.”
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.
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.
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.
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.
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/1136o http://localhos/rest/estudiante/resgistro/{año}/{mes}/{nombre
}
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/jsono application/xmlo application/htmlo plain/text
Frameworks
¿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.
¿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
¿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
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.
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).
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.
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.
Características
● Disponible en repositorio Maven.● Motor de rutas.● Cookies.● Sesiones.● Filtros.● Excepciones.● Templates.
Hola Mundo Spark
● Incluir la dependencia bajo Gradle:
compile 'com.sparkjava:spark-core:2.0.0'
● Crear clase con el siguiente código:
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) → {}
Ejemplo de Rutas
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.
Ejemplo de Cookies y Sesiones
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.
Ejemplo de Filtros
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.
Ejemplo de Plantilla
Presentación Proyecto SparkBarcamp
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.
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.
Hola Mundo Ratpack
● Incluir la dependencia bajo Gradle:
compile 'io.ratpack:ratpack-groovy:0.9.10'
● Crear Script Groovy con el siguiente código:
Presentación Proyecto RatPackBarcamp
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.
¿Preguntas?
Contacto
Email: [email protected] / [email protected]
Twitter: ccamachogGithub: vacaxLinkedIn: ccamachog
Muchas Gracias