soa latam workshop: comparison dropwizard, ratpack & spring boot

36
Herramientas para APIs Workshop. Una breve comparación Lima, Perú. Diciembre 2015

Upload: domingo-suarez-torres

Post on 15-Apr-2017

3.563 views

Category:

Software


0 download

TRANSCRIPT

Herramientas para APIsWorkshop. Una breve comparación

Lima, Perú. Diciembre 2015

RESTRepresentational State Transfer

Lo que no es REST

• No es un estándar

• No es un protocolo

• No es un framework

• No es una tecnología

¿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.

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

Fundamentos de REST• Recursos

• Representaciones

• Operaciones

• Hypertexto

• Statelessness (La habilidad/estado de no almacenar estado)

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

WebService SOAP/RPC

WebService REST

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.

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

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.

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

MicroFrameworksHerramientas con enfoques “ligeros”

Dropwizard

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

Bibliotecas• Jetty (HTTP)

• Jersey (REST)

• Jackson (JSON)

• Metrics (Métricas)

• Google Guava

• Logback

• Hibernate Validator

• Apache HTTPClient

• JDBI (JDBC)

• Liquibase

• FreeMarker

• Joda Time

Usarlo con Maven/Gradle

Componentes clave

• Configuration

• Application

• Representation Classes

• Resources

• HealthChecks

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)

01-quick-startInicio rápido con Dropwizard

01-quick-start• Revisar

• Configuración

• Aplicación

• Métricas

• Empaquetado

• Ejecución

02-api-rest

• Revisar

• Resource

• Registro en Dropwizard

• HealthCheck

• Registro

03-api-rest-jdbc

• Revisar

• Dao

• Mapper

• Resource

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

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

Que no busca Ratpack

• Ser una solución “full stack”

• Proveer una arquitectura o framework para “business logic”

Soporte de Bibliotecas• Hikari (Database Connection Pooling)

• Dropwizard Metrics

• Reactive Extensions (RxJava)

• Netflix Hystrix (Circuit Breaker)

• Jackson

• Netty

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

Spring Boot

Spring Boot• Basado en Spring Framework y todo su

ecosistema

• API REST

• Soporte para JAX-RS (Jersey)

• Spring MVC

• Hateoas (Hypermedia)

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

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.