Upload
domingo-suarez-torres
View
3.565
Download
0
Embed Size (px)
Citation preview
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
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
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
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)
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• 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