API REST
OBJETIVOS DE APRENDIZAJE
• Conocer las características generales de API REST
• Integrar los patrones de diseño relacionados con API REST
• Crear API REST con Spring Boot
• Diseñar una aplicación completa con Spring Boot
• Diseñar API REST con RAML
• Exponer API REST con Swagger
• Organizar una API REST con Spring Boot
• Integrar métodos HTTP en API REST (GET, POST, PUT, DELETE,
PATCH)
• Gestionar peticiones a la API REST
• Conocer las características generales de BBVA APX Online y APX Batch
• Conocer las características generales de BBVA API Catalog
Tabla de contenidos
1. API REST + RESTful
2. Spring Boot
3. BBVA API Designing
4. BBVA APX Online + BBVA APX Batch
5. BBVA Global API Catalog
01
API REST + RESTful
Características generales
de API REST
REST
• REST
o Representational State Transfer
o “REST está dirigido a obtener una imagen de cómo de bien diseñada está una
aplicación Web: una red de páginas web (una máquina de estados virtual) donde
el usuario navega a lo largo de una aplicación seleccionando enlaces
(transiciones de estado) apareciendo en la siguiente página (siguiente estado)
transfiriendo al usuario y mostrando el contenido para su uso.” – Roy Fielding
o Arquitectura simple sin estado
REST
Componentes arquitectónicos
Elementos de
Conectores Componentes
Datos
Metadata Cliente Servidor de Origen
Recurso
ID
Servidor
Gateway
Metadata
Representación Caché
Proxy
Resolver
Control
Túnel User Agent
REST
API Endpoint
[Link]
Recurso Recurso Recurso Recurso Recurso Recurso
Planets Spaceships Vehicles People Films Species
[Link]
REST
GET
Representa
[Link]
Identifica
Referencia Referencia
Listado de
planetas
REST
Representa
GET
[Link]
Identifica
Ref
Ref
Listado
de Referencia
películas
Referencia
Referencia
Principios de diseño REST
Identificación Unicidad Categorización Lectura
Identificar todas las Crear una URL para Categorizar los Por defecto todos los
entidades que cada recurso recursos con las recursos se pueden
queremos exponer opciones disponibles leer, salvo
(leer, modificar, añadir, restricciones en los
eliminar) permisos
Vínculos Diseño gradual Formato Documentación
Establecer vínculos a Diseñar los servicios Especificar el formato Informar a los clientes
los recursos de manera gradual de respuesta (JSON,
XML, PDF, …)
RESTful
RESTful
– Servicios que implementan la
arquitectura REST
– Típicamente ofrecen todas las
Recurso / GET POST PUT DELETE
Estado operaciones CRUD (Create, Read,
/pedidos
Update,
de pedidosDelete)
Devuelve la lista Crea un pedido Modifica
pedidos
Elimina los
pedidos
– Operaciones
/pedidos/432 Devuelve los
detalles del pedido alineadas
ERROR
con métodos
Modifica el
pedido 432
Borra el pedido
432
HTTP432
¿Cuándo podemos utilizar REST?
Conexión entre Clientes ligeros Rich Internet Apps
plataformas
Interactuar con API Envío de
Exponer datos de públicas o privadas peticiones a la
una fuente interfaz REST
Casi el 70% de API con JavaScript
Consumirlo desde públicas tienen
cualquier interfaz REST Respuestas XML
plataforma o JSON
Características REST
Clientes y Sistema de Interfaz
proveedores capas uniforme
desacoplado
s
Características REST
Clientes y
proveedores
desacoplados
Características REST
Sistema de
capas
Características REST
Identificación
Recursos
Interfaz Manipulación
uniforme Recursos
Mensajes
Autodescriptivos
Motor
Hipermedia
Características REST
• HTTP/1.1 – RFC 2616 (1999) [Link]
• HTTP/2.0 – RFC 7540 (2015) [Link]
o Seguro – Sin efectos laterales – No modifica el recurso
o Idempotente – Efectos laterales similares con una o n peticiones
POST GET
Interfaz Crea un nuevo Obtiene un
uniforme recurso recurso
PUT DELETE
Actualiza o crea Elimina un
un recurso recurso
Crear una API REST
2. Definir la
1. Definir los recursos representación de los
recursos
3. Consideraciones
del protocolo HTTP
Códigos de estado 4. Seguridad
Cacheado
Codificación
Restricciones de REST
Cliente – Servidor Servidor sin Cacheado
estado
Envío de datos
Sesión en el lado Datos cacheados
Latencia cliente
Datos no
Compatibilidad localStorage cacheados (#
sessionStorage peticiones)
Consideraciones de cacheado
Procesado de caché Cacheado
Topología de
cacheado Especificado en las
cabeceras HTTP
Cachés de navegador
1.1/Cache-Control
Cachés de proxy
1.0/Expires
Datos cacheados
Content-Encoding Datos no cacheados
Transfer-Encoding (# peticiones)
Codificado por:
Compresión – GZIP Particionado (chunked)
Cifrado – PGP
Consideraciones de seguridad
Autentificación Autentificación
Seguridad
básica Digest
HTTPS + cifrado de Comprobación MD5
información de información
confidencial confidencial
HMAC Protección
Hash de clave para mensaje
el mensaje
Hash de algunos Protección
elementos transporte
RESTful API – Best Practices
Nombres GET Cabeceras HATEOAS
Utilizar Nombres en Método GET + Utilizar cabeceras Utilizar HATEOAS =
plural en lugar de parámetros no HTTP para definir los Hypermedia as the
Verbos modificarán el estado / formatos de envío Engine of Application
recurso (serialization) State
Operaciones Versionado Errores Métodos
Ofrecer filtrado, Utilizar versionado de Manejar errores con Permitir sobrescribir
ordenación, selección la API códigos de estado métodos HTTP
de campos y paginación HTTP
RESTful API
• Nombres en vez de verbos
Recurso / GET – Leer POST – Crear PUT - Actualiza DELETE
Estado
/pedidos Devuelve la lista Crea un pedido Modifica Elimina los
de pedidos pedidos pedidos
/pedidos/432 Devuelve los Método no Modifica el Elimina el
detalles del pedido permitido pedido 432 pedido 432
432 (HTTP 405)
/getPedidos /eliminarPedidosEnviados /crearNuevoPedido
• GET + Parámetros No habrá modificaciones
o GET /pedidos/37?activar sustituir por PUT /pedidos/37 + datos
o GET /pedidos/37/activar sustituir por PUT /pedidos/37 + datos
RESTful API
• Nombres en plural
o /pedidos en vez de /pedido
o /usuarios en vez de /usuario
o /productos en vez de /producto
• Utilizar sub-recursos para relaciones
o GET /pedidos/27/clientes Devuelve los clientes del pedido 27
o GET /pedidos/27/productos Devuelve los productos del pedido 27
• Utilizar HATEOAS
RESTful API
• Ofrecer filtrado, ordenación, selección de campos y paginación
o Filtrado
• GET /pedidos?pagado=SI ➔ Devuelve los pedidos pagados
• GET /pedidos?importe>50 ➔ Devuelve los pedidos de más de 50 €
o Ordenación
• GET /pedidos?sort=-fecha,+importe ➔ Pedidos ordenados por fecha (desc) e importe
(asc)
o Selección de campos
• GET /pedidos?fields=id,fecha,importe
o Paginación
• GET /pedidos?offset=10&limit=5
[Link]
RESTful API
• Versionar nuestra API
o /pedidos/api/v1 /pedidos/api/v2 /pedidos/api/v3.01
• Manejar errores con códigos de estado HTTP
Código Mensaje Resultado
200 OK Todo funciona bien
201 Created Recurso creado
202 Accepted Petición aceptada pero sin procesar
204 OK Recurso eliminado
304 Not Modified Se puede usar datos de caché
400 Bad Request Petición no válida
401 Unauthorized Requiere autenticación de usuario
403 Forbidden Servidor entendió pero rechazó petición
404 Not Found No hay recurso en la URI
405 Method Not Allowed Método HTTP no permitido
422 Unprocessable Entity No se puede procesar la entidad
429 Too Many Requests Posible ataque DoS detectado
500 Internal Server Error No se registra la petición
Diseño de una API con
RAML
Documentar una API
• Beneficios
o Evitar problemas por falta de planificación y diseño previo del componente / API
o Evitar inconsistencia entre los objetos y métodos
o Evitar agujeros de seguridad
o Uso de herramientas que tienen en cuenta la usabilidad y necesidades de los
consumidores/aplicaciones que van a utilizar los servicios
o Realizar mocks testables
o Posibilitar el versionado
o Crear de forma conjunta al desarrollo de la documentación
o Herramientas para la creación y diseño de API
RAML
• RESTful API Modeling Language
o Lenguaje estándar de definición de API
o Lenguaje de modelado para definir API REST de sintaxis sencilla y fácilmente
comprensibles para seres humanos y software
o Especificación no propietaria e independiente basada en YAML y JSON
o Permite definir versión, recursos, métodos, parámetros de URL, seguridad
respuestas, tipos de medios y otros componentes HTTP básicos
o Genera la documentación de la API, casos de prueba, implementa un mock para
acelerar el desarrollo y genera el esqueleto de nuestra aplicación
o Permite definir las respuestas y ejemplos escritos en la especificación como
documentación
RAML
02
Spring Boot
Visión general de Spring
Framework
Spring Framework - Características
Framework Open Source MVC
Más popular y Licenciado bajo Arquitectura Modelo-
utilizado en Java Apache License 2.0 Vista-Controlador
AOP Java EE
Anotaciones
Permite Programación Apps empresariales
Uso de anotaciones Orientada a Aspectos
(AspectJ)
Transacciones
REST API Testing
Gestión
Útil para desarrollar Módulos de testing
programática de
servicios REST Unitario / Integración
transacciones
Spring Framework
2002 2003 2006 2009 2013 2017
1.0 3.0 5.0
0.9 2.0 4.0
Java 8
Principios de Spring
DI AOP Templates
Inyección de Programación Plantillas de
Dependencias Orientada a Aspectos aplicaciones
Alta Cohesión Bajo Acoplamiento Beans
SOLID SOLID Objetos de los que se
Componentes Componentes encarga Spring dentro
integrados comunicados del contenedor
Spring Framework - Beneficios
Simplicidad Flexibilidad Ligereza
Simplifica apps JEE Integración con otras Framework ligero no
POJO – Java Bean herramientas intrusivo
Rapidez Configuraciones Reciclaje
Reduce tiempos y Fácil configuración y Reduce código
costes de desarrollo herencia repetitivo
Sencillez Automatización
Reduce la Facilita la
complejidad del automatización de
desarrollo procesos
Spring Framework – Proyectos
Actualmente existen un total de 24 proyectos alrededor de Spring
Spring Framework - Proyectos
Actualmente existen un total de 24 proyectos alrededor de Spring
Visión general de Spring
Boot
Spring Boot - Características
Microservicios Convención Simplicidad
Solución creada por Principio convención Menos complejidad
Pivotal Software sobre configuración en proyectos
Configuración
Servidores POM
Configuración
Incorporación directa Project Object
automática de Spring
de servidores Models
Métricas
Características no
funcionales
Spring Boot
2014 2016 2017 2020
1.0 1.3 2.0 2.3
Caching
Spring Boot
Spring Spring Servidores Configuración
incrustado o
Boot Framework
@Configuration
s
Spring Boot
Spring Initializr - Características
Servicio Web
Interfaz Web
Permite establecer la
Fácil de usar que
configuración de
simplifica la creación
Spring Boot y
de los JAR
descargar la plantilla
Generación Requisitos
Spring Initializr
[Link]
Spring Initializr – Inicializar un proyecto
• Ir a [Link]
• Elegir opciones de configuración del proyecto
• Generar el proyecto con CTRL + ENTER
• Descargamos el proyecto generado
• Descomprimimos el ZIP
Spring Initializr – Estructura JAR
Spring Initializr – Estructura WAR
Spring Initializr – Ejemplo clase principal
Módulo SpringBootApplication
@Component @ComponentScan
Indica al compilador que la Indica al compilador qué
clase será un componente paquetes vamos a utilizar
en la siguiente clase
@EnableAutoConfiguration @SpringBootApplication
Auto carga los módulos Sustituye a
principales de Spring Boot @Configuration,
@ComponentScan y
@EnableAutoConfiguration
Spring Initializr – Ejemplo [Link]
Spring Initializr desde IntelliJ IDEA*
[Link]
* La versión Community no incluye integración con Spring Initializer por defecto. Con este plugin la tenemos
Ejercicio APIEX01
15 min
Ejercicio
OBJETIVO:
Hola API REST con Spring Boot
INSTRUCCIONES:
1. Acceder al enlace del Codelab
Primeros pasos con
Spring Boot
Spring Boot
Microservicio Standalone Auto
Funcionalidad única Spring Apps Configuración
automática
Embedded JAR Features
Servlet Container Empaquetado JAR vs Production-Ready
WAR
Spring Boot – [Link]
• Archivo de configuración de los detalles de una aplicación Spring Boot
• Permite guardar y configurar propiedades del entorno de la aplicación
• Ubicación:
o src/main/resources
Spring Boot – [Link]
Configuración de una Spring Boot Application | Port Number
o Cambiar puerto HTTP 80 predeterminado
o Basado en configuración YAML
o Programáticamente:
Spring Boot – [Link]
Configuración de una Spring Boot Application | Context Path
o Cambiar la ruta “/” por defecto
o Basado en configuración YAML
o Programáticamente:
Spring Boot – Shut Down
Configuración de una Spring Boot Application | Shut Down
Spring Boot – Registrar nuevo Servlet
Configuración de una Spring Boot Application | Registrar Servlet
Spring Boot – Jetty
Configuración de una Spring Boot Application | Jetty
Spring Boot establece
Tomcat como servidor
predeterminado.
Spring Boot – Logging Levels
Configuración de una Spring Boot Application | Logging Levels
o Ajuste del nivel de registro de eventos
03
BBVA API Designing
Guía de creación de API
en BBVA
Primeros pasos
Primeros pasos
Guía de referencia
Basics
Analysis Refinement
JIRA y BitBucket
DFT Estilo
Git
Plantillas Decálogo
RAML
Execution Review
Endpoints
Validate RAML
Data / Common types
Union
Pull Request
Consideraciones de API externa
General HTTP
JSON
RAML vs OpenAPI POST, PUT, PATCH
Atributo genérico Id
External API = Devuelven los
Prefijo con recurso
Swagger 2.0 nuevos atributos
Error de cliente
URI
Ignorar si no añade
Paginación
valor
Center of Excellence
Tareas Ventajas Equipo
Técnicas Investigación CoP vs CoE
CoP Formación Equipos de
trabajo
Gobierno Calidad
Center of Excellence
Identificar Capturar
Tareas Compartir
técnicas técnicas
técnicas
Prácticas, Técnicas viables
Ayudar a
estrategias, Memoria
practitioners
principios organizativa
Técnicas Soporte a equipos Mejorar el
Organizar CoP
gobierno
Soporte
CoP Organizar
individual Recopilar
colaboración
Aprendizaje métricas
Gobierno entre equipos
equipo Mejora continua
Center of Excellence
Ventajas
Investigación Formación
Guía
Experimentación Formación a
Acompañamiento
y soporte equipos
Investigación Uso de Calidad Costes
recursos
Incrementar la Reducción de
Formación Eficiencia en la calidad de costes mediante
reserva de productos y nuevas
Calidad recursos servicios tecnologías
Center of Excellence
Equipo Casos de
Creación
implementación
Empleados y
Casos de negocio
personas externas
Nuevas prácticas
CoP Equipos de
CoP vs CoE trabajo
Grupo que
Equipos de trabajo comparte interés Responsable de
en una tecnología tareas y
o skill. Voluntario actividades
04
BBVA APX Online + Batch
Características BBVA
Visión general APX
¿Qué es APX?
La Arquitectura APX o Arquitectura de Back-End Java Extendida fue creada con el
propósito de ser una extensión de la Arquitectura de Back-End ofreciendo las
mismas capacidades en el modo distribuido
Open Source Transaccional Mainframe
Construida sobre Alternativa fiable y Ayuda a reducir el
tecnologías Open desacoplada para uso del Mainframe
Source desarrollo de TX
Crítica Disponible
Operaciones críticas 1º runtime disponible
se ejecutan en APX en Plataforma
Arquitectura de APX
Capacidades de APX
Ecosistema de APX
Características BBVA
APX Online
Flujo de ejecución de APX Online
Vista del runtime de APX
Interoperabilidad de Back-Ends
Características BBVA
APX Batch
Procesado de Batch
Componentes de Batch
• Un trabajo está compuesto de varios pasos
• Cada paso tiene:
o Un itemReader
o Un itemProcessor
o Un itemWriter
• Los trabajos los lanza
• el jobLauncher
• Toda la información se Los pasos pueden ser de dos tipos:
• almacena en el jobRepository
TX TX
Chunk Task
05
BBVA Global API Catalog
Características del
catálogo Global API
Global API Catalog
Global API Catalog
Detalle API
¿Cómo contribuir?
Acceso Fork Publicar
Acceso al Copia del Publicar en una
repositorio de repositorio (Fork) nueva rama
BitBucket
Crear una Pull
Request
Feedback
¡MUCHAS GRACIAS!