SlideShare una empresa de Scribd logo
1 de 36
Descargar para leer sin conexión
Herramientas para APIs
Workshop. Una breve comparación
Lima, Perú. Diciembre 2015
REST
Representational 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
MicroFrameworks
Herramientas 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-start
Inicio 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.

Más contenido relacionado

La actualidad más candente

Grails, opción real y escalable para sitios web de alta carga
Grails, opción real y escalable para sitios web de alta cargaGrails, opción real y escalable para sitios web de alta carga
Grails, opción real y escalable para sitios web de alta cargaDomingo Suarez Torres
 
Seminario web: Simplificando el uso de su base de datos con Atlas
Seminario web: Simplificando el uso de su base de datos con AtlasSeminario web: Simplificando el uso de su base de datos con Atlas
Seminario web: Simplificando el uso de su base de datos con AtlasMongoDB
 
Web Service and PHP, REST and SOAP
Web Service and PHP, REST and SOAPWeb Service and PHP, REST and SOAP
Web Service and PHP, REST and SOAPElwin Huaman
 
Desarrollo simple con Webmatrix
Desarrollo simple con WebmatrixDesarrollo simple con Webmatrix
Desarrollo simple con WebmatrixChristian Strevel
 
Cursos sistemas abiertos MySQL - Administración Apache HTTP Server. AHT-100
Cursos sistemas abiertos MySQL - Administración Apache HTTP Server. AHT-100Cursos sistemas abiertos MySQL - Administración Apache HTTP Server. AHT-100
Cursos sistemas abiertos MySQL - Administración Apache HTTP Server. AHT-100CLEFormación
 
Arquitectura de las nuevas aplicaciones web: Como lograr escalabilidad, alta ...
Arquitectura de las nuevas aplicaciones web: Como lograr escalabilidad, alta ...Arquitectura de las nuevas aplicaciones web: Como lograr escalabilidad, alta ...
Arquitectura de las nuevas aplicaciones web: Como lograr escalabilidad, alta ...Miguel Gallardo
 
Arquitectando la seguridad de punta a punta a nivel corporativo
Arquitectando la seguridad de punta a punta a nivel corporativoArquitectando la seguridad de punta a punta a nivel corporativo
Arquitectando la seguridad de punta a punta a nivel corporativoAmazon Web Services LATAM
 
BBVA Arquitectura - Demo DevOps
BBVA Arquitectura - Demo DevOpsBBVA Arquitectura - Demo DevOps
BBVA Arquitectura - Demo DevOpsErnesto Anaya
 
Creacion Apirest Back{4}app
Creacion Apirest Back{4}appCreacion Apirest Back{4}app
Creacion Apirest Back{4}appblackmatt
 
201406 presentación alfresco healthpoint
201406 presentación alfresco healthpoint201406 presentación alfresco healthpoint
201406 presentación alfresco healthpointAquilino García Martos
 
Orquestación de contenedores con Kubernetes
Orquestación de contenedores con KubernetesOrquestación de contenedores con Kubernetes
Orquestación de contenedores con KubernetesSoftware Guru
 

La actualidad más candente (20)

Grails, opción real y escalable para sitios web de alta carga
Grails, opción real y escalable para sitios web de alta cargaGrails, opción real y escalable para sitios web de alta carga
Grails, opción real y escalable para sitios web de alta carga
 
Seminario web: Simplificando el uso de su base de datos con Atlas
Seminario web: Simplificando el uso de su base de datos con AtlasSeminario web: Simplificando el uso de su base de datos con Atlas
Seminario web: Simplificando el uso de su base de datos con Atlas
 
Web Service and PHP, REST and SOAP
Web Service and PHP, REST and SOAPWeb Service and PHP, REST and SOAP
Web Service and PHP, REST and SOAP
 
Conceptos básicos de Asp.net mvc
Conceptos básicos de Asp.net mvcConceptos básicos de Asp.net mvc
Conceptos básicos de Asp.net mvc
 
Desarrollo simple con Webmatrix
Desarrollo simple con WebmatrixDesarrollo simple con Webmatrix
Desarrollo simple con Webmatrix
 
Html5 Java Script Apis
Html5 Java Script ApisHtml5 Java Script Apis
Html5 Java Script Apis
 
ASP.NET 5
ASP.NET 5ASP.NET 5
ASP.NET 5
 
Cursos sistemas abiertos MySQL - Administración Apache HTTP Server. AHT-100
Cursos sistemas abiertos MySQL - Administración Apache HTTP Server. AHT-100Cursos sistemas abiertos MySQL - Administración Apache HTTP Server. AHT-100
Cursos sistemas abiertos MySQL - Administración Apache HTTP Server. AHT-100
 
Arquitectura de las nuevas aplicaciones web: Como lograr escalabilidad, alta ...
Arquitectura de las nuevas aplicaciones web: Como lograr escalabilidad, alta ...Arquitectura de las nuevas aplicaciones web: Como lograr escalabilidad, alta ...
Arquitectura de las nuevas aplicaciones web: Como lograr escalabilidad, alta ...
 
Arquitectando la seguridad de punta a punta a nivel corporativo
Arquitectando la seguridad de punta a punta a nivel corporativoArquitectando la seguridad de punta a punta a nivel corporativo
Arquitectando la seguridad de punta a punta a nivel corporativo
 
Seminario IV: REST & Jersey
Seminario IV: REST & JerseySeminario IV: REST & Jersey
Seminario IV: REST & Jersey
 
BBVA Arquitectura - Demo DevOps
BBVA Arquitectura - Demo DevOpsBBVA Arquitectura - Demo DevOps
BBVA Arquitectura - Demo DevOps
 
Base de datos
Base de datosBase de datos
Base de datos
 
Creacion Apirest Back{4}app
Creacion Apirest Back{4}appCreacion Apirest Back{4}app
Creacion Apirest Back{4}app
 
Implementando una Arquitectura de Microservicios
Implementando una Arquitectura de MicroserviciosImplementando una Arquitectura de Microservicios
Implementando una Arquitectura de Microservicios
 
ASP.NET 5 & MVC 6 (RC1)
ASP.NET 5 & MVC 6 (RC1)ASP.NET 5 & MVC 6 (RC1)
ASP.NET 5 & MVC 6 (RC1)
 
201406 presentación alfresco healthpoint
201406 presentación alfresco healthpoint201406 presentación alfresco healthpoint
201406 presentación alfresco healthpoint
 
Introduccion a Node.js
Introduccion a Node.jsIntroduccion a Node.js
Introduccion a Node.js
 
Frameworks y administracion de contenidos
Frameworks y administracion de contenidosFrameworks y administracion de contenidos
Frameworks y administracion de contenidos
 
Orquestación de contenedores con Kubernetes
Orquestación de contenedores con KubernetesOrquestación de contenedores con Kubernetes
Orquestación de contenedores con Kubernetes
 

Destacado

Destacado (6)

Elasticsearch JVM-MX Meetup April 2016
Elasticsearch JVM-MX Meetup April 2016Elasticsearch JVM-MX Meetup April 2016
Elasticsearch JVM-MX Meetup April 2016
 
SGNext Elasticsearch
SGNext ElasticsearchSGNext Elasticsearch
SGNext Elasticsearch
 
JVM Reactive Programming
JVM Reactive ProgrammingJVM Reactive Programming
JVM Reactive Programming
 
Non blocking io with netty
Non blocking io with nettyNon blocking io with netty
Non blocking io with netty
 
Netty from the trenches
Netty from the trenchesNetty from the trenches
Netty from the trenches
 
Api web socket
Api web socketApi web socket
Api web socket
 

Similar a APIs RESTful: Dropwizard, Ratpack y Spring Boot

10-Unidad 3: Diseños de Vista-3.2 Usos Web Services
10-Unidad 3: Diseños de Vista-3.2 Usos Web Services10-Unidad 3: Diseños de Vista-3.2 Usos Web Services
10-Unidad 3: Diseños de Vista-3.2 Usos Web ServicesLuis Fernando Aguas Bucheli
 
Introducción a NoSQL
Introducción a NoSQLIntroducción a NoSQL
Introducción a NoSQLCycle-IT
 
Act4 base de_datos_canto_josé
Act4 base de_datos_canto_joséAct4 base de_datos_canto_josé
Act4 base de_datos_canto_joséCantSo
 
10- Unidad 3: Webservices - 3.2 Uso de Web services (Introducción, Caracterís...
10- Unidad 3: Webservices - 3.2 Uso de Web services (Introducción, Caracterís...10- Unidad 3: Webservices - 3.2 Uso de Web services (Introducción, Caracterís...
10- Unidad 3: Webservices - 3.2 Uso de Web services (Introducción, Caracterís...Luis Fernando Aguas Bucheli
 
Presentacion base de datos
Presentacion base de datosPresentacion base de datos
Presentacion base de datosana rosa ruiz
 
Rest clase 4 - curso front-end 2014 - open webinars
Rest   clase 4 - curso front-end 2014 - open webinarsRest   clase 4 - curso front-end 2014 - open webinars
Rest clase 4 - curso front-end 2014 - open webinarsOpenWebinars.net
 
El mundo Big Data y las APIs
El mundo Big Data y las APIsEl mundo Big Data y las APIs
El mundo Big Data y las APIsBig Data Spain
 
Meetup DigitalOcean Cloud Native architecture
Meetup DigitalOcean Cloud Native architectureMeetup DigitalOcean Cloud Native architecture
Meetup DigitalOcean Cloud Native architectureDomingo Suarez Torres
 
Actividad de aprendizaje 4: base de datos
Actividad de aprendizaje 4: base de datosActividad de aprendizaje 4: base de datos
Actividad de aprendizaje 4: base de datosefrain_bautista
 

Similar a APIs RESTful: Dropwizard, Ratpack y Spring Boot (20)

10-Unidad 3: Diseños de Vista-3.2 Usos Web Services
10-Unidad 3: Diseños de Vista-3.2 Usos Web Services10-Unidad 3: Diseños de Vista-3.2 Usos Web Services
10-Unidad 3: Diseños de Vista-3.2 Usos Web Services
 
S7-DAW-2022S1.pptx
S7-DAW-2022S1.pptxS7-DAW-2022S1.pptx
S7-DAW-2022S1.pptx
 
Introducción a NoSQL
Introducción a NoSQLIntroducción a NoSQL
Introducción a NoSQL
 
Principales bases de datos
Principales bases de datosPrincipales bases de datos
Principales bases de datos
 
Base de datos
Base de datosBase de datos
Base de datos
 
DOCENTE
DOCENTEDOCENTE
DOCENTE
 
Act4 base de_datos_canto_josé
Act4 base de_datos_canto_joséAct4 base de_datos_canto_josé
Act4 base de_datos_canto_josé
 
Semana 7 Servicios Web REST con MongoDB final
Semana 7   Servicios Web REST con MongoDB finalSemana 7   Servicios Web REST con MongoDB final
Semana 7 Servicios Web REST con MongoDB final
 
Base De Datos
Base De DatosBase De Datos
Base De Datos
 
10- Unidad 3: Webservices - 3.2 Uso de Web services (Introducción, Caracterís...
10- Unidad 3: Webservices - 3.2 Uso de Web services (Introducción, Caracterís...10- Unidad 3: Webservices - 3.2 Uso de Web services (Introducción, Caracterís...
10- Unidad 3: Webservices - 3.2 Uso de Web services (Introducción, Caracterís...
 
Presentacion base de datos
Presentacion base de datosPresentacion base de datos
Presentacion base de datos
 
Rest clase 4 - curso front-end 2014 - open webinars
Rest   clase 4 - curso front-end 2014 - open webinarsRest   clase 4 - curso front-end 2014 - open webinars
Rest clase 4 - curso front-end 2014 - open webinars
 
Api rest ful
Api rest fulApi rest ful
Api rest ful
 
04 presentacion acosta_claudio
04 presentacion acosta_claudio04 presentacion acosta_claudio
04 presentacion acosta_claudio
 
Principales bases de datos
Principales bases de datosPrincipales bases de datos
Principales bases de datos
 
Grupo BD
Grupo BDGrupo BD
Grupo BD
 
S4-PD2-2.2. REST
S4-PD2-2.2. RESTS4-PD2-2.2. REST
S4-PD2-2.2. REST
 
El mundo Big Data y las APIs
El mundo Big Data y las APIsEl mundo Big Data y las APIs
El mundo Big Data y las APIs
 
Meetup DigitalOcean Cloud Native architecture
Meetup DigitalOcean Cloud Native architectureMeetup DigitalOcean Cloud Native architecture
Meetup DigitalOcean Cloud Native architecture
 
Actividad de aprendizaje 4: base de datos
Actividad de aprendizaje 4: base de datosActividad de aprendizaje 4: base de datos
Actividad de aprendizaje 4: base de datos
 

Más de Domingo Suarez Torres

Cloud Native MX Meetup - Asegurando tu Cluster de Kubernetes
Cloud Native MX Meetup - Asegurando tu Cluster de KubernetesCloud Native MX Meetup - Asegurando tu Cluster de Kubernetes
Cloud Native MX Meetup - Asegurando tu Cluster de KubernetesDomingo Suarez Torres
 
Java Dev Day 2019 No kuberneteen por convivir
Java Dev Day 2019  No kuberneteen por convivirJava Dev Day 2019  No kuberneteen por convivir
Java Dev Day 2019 No kuberneteen por convivirDomingo Suarez Torres
 
Retos en la arquitectura de Microservicios
Retos en la arquitectura de MicroserviciosRetos en la arquitectura de Microservicios
Retos en la arquitectura de MicroserviciosDomingo Suarez Torres
 
DevFest Lima Corriendo cargas e trabajo seguras en GKE con Istio
DevFest Lima Corriendo cargas e trabajo seguras en GKE con IstioDevFest Lima Corriendo cargas e trabajo seguras en GKE con Istio
DevFest Lima Corriendo cargas e trabajo seguras en GKE con IstioDomingo Suarez Torres
 
Cloud Native Mexico - Introducción a Kubernetes
Cloud Native Mexico - Introducción a KubernetesCloud Native Mexico - Introducción a Kubernetes
Cloud Native Mexico - Introducción a KubernetesDomingo Suarez Torres
 
Cloud Native Mexico Meetup de Marzo 2018 Service Mesh con Istio y Envoy
Cloud Native Mexico Meetup de Marzo 2018 Service Mesh con Istio y EnvoyCloud Native Mexico Meetup de Marzo 2018 Service Mesh con Istio y Envoy
Cloud Native Mexico Meetup de Marzo 2018 Service Mesh con Istio y EnvoyDomingo Suarez Torres
 
Cloud Native Mexico Meetup enero 2018 Observability
Cloud Native Mexico Meetup enero 2018 ObservabilityCloud Native Mexico Meetup enero 2018 Observability
Cloud Native Mexico Meetup enero 2018 ObservabilityDomingo Suarez Torres
 
Orquestación de contenedores con Kubernetes SGNext
Orquestación de contenedores con Kubernetes SGNextOrquestación de contenedores con Kubernetes SGNext
Orquestación de contenedores con Kubernetes SGNextDomingo Suarez Torres
 
javerosmx-2015-marzo-groovy-java8-comparison
javerosmx-2015-marzo-groovy-java8-comparisonjaverosmx-2015-marzo-groovy-java8-comparison
javerosmx-2015-marzo-groovy-java8-comparisonDomingo Suarez Torres
 

Más de Domingo Suarez Torres (20)

Cloud Native MX Meetup - Asegurando tu Cluster de Kubernetes
Cloud Native MX Meetup - Asegurando tu Cluster de KubernetesCloud Native MX Meetup - Asegurando tu Cluster de Kubernetes
Cloud Native MX Meetup - Asegurando tu Cluster de Kubernetes
 
Java Dev Day 2019 No kuberneteen por convivir
Java Dev Day 2019  No kuberneteen por convivirJava Dev Day 2019  No kuberneteen por convivir
Java Dev Day 2019 No kuberneteen por convivir
 
Contenedores 101 Digital Ocean CDMX
Contenedores 101 Digital Ocean CDMXContenedores 101 Digital Ocean CDMX
Contenedores 101 Digital Ocean CDMX
 
Retos en la arquitectura de Microservicios
Retos en la arquitectura de MicroserviciosRetos en la arquitectura de Microservicios
Retos en la arquitectura de Microservicios
 
Java Cloud Native Hack Nights GDL
Java Cloud Native Hack Nights GDLJava Cloud Native Hack Nights GDL
Java Cloud Native Hack Nights GDL
 
meetup digital ocean kubernetes
meetup digital ocean kubernetesmeetup digital ocean kubernetes
meetup digital ocean kubernetes
 
Peru JUG Micronaut & GraalVM
Peru JUG Micronaut & GraalVMPeru JUG Micronaut & GraalVM
Peru JUG Micronaut & GraalVM
 
DevFest Lima Corriendo cargas e trabajo seguras en GKE con Istio
DevFest Lima Corriendo cargas e trabajo seguras en GKE con IstioDevFest Lima Corriendo cargas e trabajo seguras en GKE con Istio
DevFest Lima Corriendo cargas e trabajo seguras en GKE con Istio
 
Cloud Native Development in the JVM
Cloud Native Development in the JVMCloud Native Development in the JVM
Cloud Native Development in the JVM
 
Cloud Native Mexico - Introducción a Kubernetes
Cloud Native Mexico - Introducción a KubernetesCloud Native Mexico - Introducción a Kubernetes
Cloud Native Mexico - Introducción a Kubernetes
 
Cloud Native Mexico Meetup de Marzo 2018 Service Mesh con Istio y Envoy
Cloud Native Mexico Meetup de Marzo 2018 Service Mesh con Istio y EnvoyCloud Native Mexico Meetup de Marzo 2018 Service Mesh con Istio y Envoy
Cloud Native Mexico Meetup de Marzo 2018 Service Mesh con Istio y Envoy
 
Cloud Native Mexico Meetup enero 2018 Observability
Cloud Native Mexico Meetup enero 2018 ObservabilityCloud Native Mexico Meetup enero 2018 Observability
Cloud Native Mexico Meetup enero 2018 Observability
 
Cloud Native Mexico Presentacion
Cloud Native Mexico PresentacionCloud Native Mexico Presentacion
Cloud Native Mexico Presentacion
 
gRPC: Beyond REST
gRPC: Beyond RESTgRPC: Beyond REST
gRPC: Beyond REST
 
Devops Landscape
Devops LandscapeDevops Landscape
Devops Landscape
 
Orquestación de contenedores con Kubernetes SGNext
Orquestación de contenedores con Kubernetes SGNextOrquestación de contenedores con Kubernetes SGNext
Orquestación de contenedores con Kubernetes SGNext
 
Ratpack JVM_MX Meetup February 2016
Ratpack JVM_MX Meetup February 2016Ratpack JVM_MX Meetup February 2016
Ratpack JVM_MX Meetup February 2016
 
SOA Latam 2015
SOA Latam 2015SOA Latam 2015
SOA Latam 2015
 
SGCE 2015 REST APIs
SGCE 2015 REST APIsSGCE 2015 REST APIs
SGCE 2015 REST APIs
 
javerosmx-2015-marzo-groovy-java8-comparison
javerosmx-2015-marzo-groovy-java8-comparisonjaverosmx-2015-marzo-groovy-java8-comparison
javerosmx-2015-marzo-groovy-java8-comparison
 

APIs RESTful: Dropwizard, Ratpack y Spring Boot

  • 1. Herramientas para APIs Workshop. Una breve comparación Lima, Perú. Diciembre 2015
  • 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
  • 14.
  • 15.
  • 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
  • 21. Componentes clave • Configuration • Application • Representation Classes • Resources • HealthChecks
  • 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)
  • 24. 01-quick-start • Revisar • Configuración • Aplicación • Métricas • Empaquetado • Ejecución
  • 25. 02-api-rest • Revisar • Resource • Registro en Dropwizard • HealthCheck • Registro
  • 27.
  • 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”
  • 31. Soporte de Bibliotecas • Hikari (Database Connection Pooling) • Dropwizard Metrics • Reactive Extensions (RxJava) • Netflix Hystrix (Circuit Breaker) • Jackson • Netty
  • 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.