Este documento provee una breve comparación de herramientas para construir APIs RESTful como Dropwizard, Ratpack y Spring Boot. Explica que Dropwizard se enfoca en ser ligero y provee soporte para configuración, métricas y herramientas operativas usando bibliotecas maduras. Ratpack busca ser rápido, escalable y eficiente en recursos usando programación no bloqueante. Mientras que Spring Boot es un framework completo que soporta un amplio rango de tecnologías incluyendo persistencia, websockets y la especificación JEE.
3. Lo que no es REST
• No es un estándar
• No es un protocolo
• No es un framework
• No es una tecnología
4. ¿Que es REST?
• Es un estilo de arquitectura.
• Un patrón de diseño validado para construir
aplicaciones escalables y con bajo acoplamiento.
• Una manera de dividir un sistema en partes más
pequeñas, de tal manera que el sistema completo
funcione mejor en entornos distribuidos.
• Especifica un conjunto de restricciones
arquitecturales.
5. Estilo de arquitectura
• Es un conjunto coordinado de restricciones
arquitecturales que restringen los roles y
características de los elementos arquitecturales
y las relaciones permitidas entre esos elementos
• Un estilo puede ser aplicado a muchas arquitectura
• Una arquitectura puede consistir de muchos estilos
6. Fundamentos de REST
• Recursos
• Representaciones
• Operaciones
• Hypertexto
• Statelessness (La habilidad/estado de no
almacenar estado)
7. Recursos
• Sustantivos, no verbos.
• Abstracción de información: una cosa, entidad o un
evento. Cualquier cosa que pueda ser nombrada.
• Granularidad amplia (coarse grained), no
granularidad fina (fine grained).
• Un recurso puede ser una colección de entidades.
• Se identifica por URIs
10. Representaciones
• Información recuperada de los recursos.
• Información de los recursos más metadata con
datos de control sobre el formato del recurso.
• Formatos: HTML, XML, JSON, Atom, etc.
• Además puede contener información sobre las
operaciones/acciones disponibles para el recurso
(links a otras URIs). Se conocen también como
transiciones de la representación actual.
11. Restricciones de REST
• Estilo de arquitectura cliente/servidor
• Servidor sin estado (statelessness)
• El cliente es responsable de guardar el estado (sesión, credenciales)
• Cacheable
• Los datos se deben de etiquetar como cacheables y no-cacheables
• Sistema en capas
• Intermediarios para mejorar la escalabilidad del sistema.
• Balanceo de cargas
12. Restricciones de REST
• Interfaces uniformes
• Identificación de recursos
• Manipulación de recursos a través de representaciones
• Mensajes descriptivos: metadata y datos de control.
• Hypermedia como el motor del estado de la aplicación.
• Hypermedia As The Engine of Application State (HATEOAS)
• Enlaces en los datos para navegar la aplicación.
• hypermedia-driven system.
13. RESTful APIs (WebServices)
• Deben hacer 2 cosas:
• Usar HTTP correctamente.
• Servir respuestas hypermedia
• Por lo tanto, en lugar de llamarse RESTful APIs
se deberían de llamar “Hypermedia APIs”
http://blog.steveklabnik.com/posts/2012-02-23-rest-is-over
18. Dropwizard
• Dropwizard reúne, bibliotecas maduras y
estables en un paquete sencillo y ligero.
• Dropwizard cuenta con soporte para
configuración, métricas de la aplicación,
bitácora y herramientas operativas
19. Bibliotecas
• Jetty (HTTP)
• Jersey (REST)
• Jackson (JSON)
• Metrics (Métricas)
• Google Guava
• Logback
• Hibernate Validator
• Apache HTTPClient
• JDBI (JDBC)
• Liquibase
• FreeMarker
• Joda Time
22. Empaquetado
• Dropwizard genera un ‘jar’ GORDO.
• No requiere servidor de aplicaciones
• El jar generado es auto ejecutable
• Ideal para despliegues en:
• La nube
• Contenedores (Docker)
28. Ratpack
• Conjunto de bibliotecas para construir
aplicaciones HTTP modernas. (non-blocking,
reactive)
• Construido en Java 8, con Netty y principios de
Reactive Programming.
• Despliegue basado en FAT jars
29. Objetivos de Ratpack
• Ser rápido, scalable y con manejo eficiente de
recursos
• Usar programación non-blocking
• Ser flexible para integrarse con otras
herramientas y bibliotecas
30. Que no busca Ratpack
• Ser una solución “full stack”
• Proveer una arquitectura o framework para
“business logic”
32. Enfoque de desarrollo
• Similar a Dropwizard, Ratpack desea ser una
herramienta simple.
• Sus APIs no dependen en nada de ninguna
especificación Java (Servlet, JEE)
• Adopta paradigmas muy novedosos para
resolver problemas
34. Spring Boot
• Basado en Spring Framework y todo su
ecosistema
• API REST
• Soporte para JAX-RS (Jersey)
• Spring MVC
• Hateoas (Hypermedia)
35. Spring Boot
• A diferencia de los anteriores. Spring Boot es un
framework completo.
• Provee soporte para un amplio rango de tecnologías:
• Persistencia. JDBC, JPA, NoSQL
• Redis, ElasticSearch, MongoDB
• WebSockets
• JMS, AMQP
36. Spring Boot
• Soporta toda la especificación JEE
• Spring cloud
• Netflix OSS
• El despliegue puede ser en un contenedor
tradicional (Tomcat, WAS, JBoss)
• Puede ejecutarse como un FAT jar.