Estándares a los que se hace referencia en reglas y pautas definidas por la ADA.
Definición de servicios y eventos
OpenAPI
Open API es un estándar para la descripción de las API. La especificación OpenAPI permite definir contratos agnósticos a la tecnología e independiente de los fabricantes para los servicios de API. En particular, OpenAPI combinado con Swagger puede utilizarse para describir, desarrollar, probar y documentar las API compatibles con REST.
Ámbito y beneficios
Se recomienda el uso de OpenAPI siempre que haya que se vaya a definir un servicio REST para definir el contrato antes de hacer la implementación.
Los beneficios de usar OpenAPI son:
- Documentación Clara y Concisa: OpenAPI proporciona una documentación automática y detallada la API facilitando su comprensión y uso.
- Interoperabilidad: Al usar un estándar abierto, las APIs creadas con OpenAPI pueden consumirse por cualquier tecnología y lenguaje de programación compatible con REST.
- Validación y Pruebas Automáticas: La especificación OpenAPI no solo describe la API, sino que también puede utilizarse para validar las solicitudes y respuestas, permitiendo una implementación más segura y confiable.
- Generación de Código Cliente y Servidor: Utilizando la especificación OpenAPI, se pueden generar automáticamente bibliotecas cliente y stubs de servidores en varios lenguajes de programación, lo que acelera el desarrollo y reduce errores.
- Mejora de la Colaboración: La documentación generada por OpenAPI facilita la colaboración entre equipos de desarrollo, ya que todos tienen una referencia clara y estandarizada de cómo funciona la API.
Casos de uso
- Publicación de una API pública: Si un proyecto necesita publicar una API y el contrato OpenAPI de este servicio se publica en el API Manager, se garantiza que dicho servicio pueda ser invocado por cualquier entidad o aplicación (por ejemplo, el servicio de datos abiertos).
- Publicación de servicio que será consumido por el FrontEnd: Si el contrato está definido, los equipos de BackEnd y FrontEnd pueden trabajar de forma independiente. Mientras el equipo BackEnd se enfoca en implementar el servicio, el equipo FrontEnd puede enfocarse en implementar la integración con dicho servicio ayudándose de implementaciones Mock o Stub.
Async API
AsyncAPI es una iniciativa de código abierto que proporciona una especificación para describir y documentar eventos asíncronas usando un lenguaje fácil de interpretar tanto por máquinas como humanos.
Ámbito y beneficios
Se recomienda el uso de Async API siempre que haya que definirse un evento. Dentro del contexto de JdA este eventos habitualmente será procesado por Kafka.
Los beneficios de usar Async API son:
Estandarización: AsyncAPI proporciona una especificación estandarizada para definir eventos, lo que facilita la interoperabilidad entre diferentes sistemas y tecnologías.
Protocolo Agnóstico: La especificación es independiente del protocolo, lo que permite su uso con una variedad de tecnologías de mensajería como MQTT, Kafka, WebSockets, entre otras.
Mejora del Rendimiento y Escalabilidad: Al permitir operaciones no secuenciales, AsyncAPI ayuda a mejorar el rendimiento y la escalabilidad de las aplicaciones, ya que los componentes de bajo rendimiento no bloquean a sus consumidores.
Generación Automática de Documentación: AsyncAPI ofrece herramientas para generar documentación automáticamente, lo que facilita la comunicación y el mantenimiento de los eventos.
Generación de Código: Proporciona generadores de código para varios lenguajes de programación, simplificando el desarrollo y la integración de servicios.
Facilidad de Uso: AsyncAPI busca hacer que trabajar con arquitecturas orientadas a eventos sea tan sencillo como trabajar con APIs RESTful, permitiendo a los desarrolladores crear APIs rápidamente y sin necesidad de conocimientos previos profundos.
Casos de uso
- Envío de correos electrónicos: El envío de correos electrónicos es un caso de uno habitual en la generación de eventos. Con un contrato definido en Async API se simplifica la integración de las diferentes aplicaciones con el servidor de correos ya que todas las aplicaciones tendrán disponibles el contrato que debe cumplir el evento para recibir y procesar correctamente el correo electrónico.
- Notificaciones de cambios de estado: Otro caso de uso habitual que implica la generación de eventos es el envío de notificaciones. Al igual que el correo electrónico, con un contrato Async API pueden generarse eventos que permitan notificar cambios de estado entre sistemas BackEnd.
WSDL
WSDL (Web Services Description Language) es una especificación estándar para describir servicios basados en XML de red. El protocolo más habitual con el que está vinculado es SOAP. Esta especificación proporciona a los proveedores de servicios un modo sencillo de describir el formato básico de las peticiones a sus sistemas independientemente de la implementación del motor de ejecución subyacente.
WSDL define un formato XML para describir servicios de red como un conjunto de puntos finales que operan en mensajes que contienen información orientada a documentos u orientada a procedimientos. Primero se describen las operaciones y mensajes de forma abstracta y luego se enlazan a un protocolo de red y formato de mensaje concreto para definir un punto final. Los puntos finales relacionados se combinan en puntos finales abstractos (servicios). WSDL es independientemente de los formatos de mensaje o los protocolos de red que se utilicen para comunicarse. Esto significa que se definen las interfaces de forma abstracta con el esquema XML y luego se enlazan a representaciones concretas que son adecuadas para el protocolo.
Ámbito y beneficios
La creación de servicios usando la especificación WSDL en nuevos desarrollos no se encuentra recomendado por ser un protocolo obsoleto y de bajo rendimiento si se compara con REST y otros protocolos de comunicación más modernos. Sin embargo, el uso de contratos WSDL ya existentes para crear clientes es un caso de uso habitual cuando es necesario comunicarse con sistemas legacy que aún ofrecen sus servicios bajo uno de los protocolos de comunicación vinculados a esta especificación.
Si es está en ese caso de uso, los beneficios que se obtienen creando los clientes a partir de la especificación del contrato en este protocolo son los siguientes:
Interoperabilidad: Un contrato WSDL permite que el servicio sea consumido por aplicaciones escritas en cualquier lenguaje de programación que soporte SOAP y XML. Esto facilita la integración con sistemas de terceros y mejora la interoperabilidad.
Automatización del desarrollo: Con un WSDL, los desarrolladores pueden generar automáticamente el código necesario para interactuar con el servicio. Esto reduce el tiempo de desarrollo y minimiza los errores humanos al evitar la necesidad de escribir manualmente las llamadas al servicio.
Documentación clara y precisa: El WSDL actúa como una documentación formal del servicio, describiendo las operaciones disponibles, los parámetros requeridos y los tipos de datos utilizados. Esto facilita la comprensión del servicio tanto para los desarrolladores actuales como para los futuros.
Facilita el mantenimiento: Tener un contrato WSDL bien definido ayuda a mantener el servicio a lo largo del tiempo. Cualquier cambio en el servicio puede ser reflejado en el WSDL, asegurando que los clientes siempre tengan una referencia actualizada.
Casos de uso
- Comunicación con servicios legacy: Como ya se ha indicado, el caso de uso más habitual será la creación de clientes interoperables que permitan realizar peticiones a servicios legacy implementados usando el protocolo SOAP.
Avro
El estándar de definición de esquemas Avro proporciona una especificación formal para la descripción de la estructura y semántica de los datos en el formato Avro. Avro es un sistema de serialización de datos desarrollado dentro del proyecto Apache Hadoop, diseñado para ser rápido, eficiente en términos de espacio y compatible con una variedad de lenguajes de programación.
La definición de esquemas Avro sigue un formato basado en JSON que permite especificar tipos de datos simples y complejos, como cadenas de caracteres, números, registros y enumeraciones, así como relaciones entre ellos. Este estándar define una serie de reglas y convenciones para la representación precisa de la estructura de datos, lo que facilita la interoperabilidad entre diferentes sistemas y aplicaciones.
Entre los aspectos clave del estándar de definición de esquemas Avro se incluyen:
- Declaración de Tipos de Datos: Permite la declaración de una amplia gama de tipos de datos, incluyendo primitivos como cadenas de caracteres y números, así como tipos complejos como registros y arrays.
- Soporte para Enumeraciones: Permite la definición de enumeraciones para representar conjuntos predefinidos de valores.
- Definición de Registros Anidados: Permite la creación de registros anidados que contienen una combinación de campos simples y complejos.
- Especificación de Nombres y Espacios de Nombres: Facilita la organización y gestión de esquemas mediante la especificación de nombres descriptivos y la agrupación en espacios de nombres lógicos.
- Control de la Evolución de Esquemas: Proporciona mecanismos para la evolución controlada de los esquemas a lo largo del tiempo, permitiendo cambios como la adición o eliminación de campos sin romper la compatibilidad con versiones anteriores.
Ámbito y beneficios
Se recomienda el uso de Avro cuando sea necesario compartir información entre varios organismos y sea necesario establecer una definición del esquema que estructure la información.
Los beneficios de usar Avro son:
- Compacto y eficiente: Avro utiliza un formato binario compacto, reduciendo el tamaño de los datos en comparación con formatos como CSV y JSON. Esta reducción ahorra espacio de almacenamiento y mejora el rendimiento en el procesamiento de datos.
- Esquema integrado: El esquema que describe la estructura de los datos permite leer los archivos sin necesidad de conocer la estructura de antemano, facilitando la interoperabilidad entre diferentes sistemas.
- Evolución de esquemas: Al permitir evolucionar los esquemas, se puede modificar la estructura de los datos sin romper la compatibilidad con los datos existentes facilitando la retro compatibilidad en sistemas cambiantes.
- Rendimiento: Gracias a su formato orientado a filas, mejora la eficiencia de escritura.
- Interoperabilidad: Al permitir leer y escribir datos desde y hacia diferentes lenguajes de programación se facilita la integración en entornos heterogéneos.
Casos de uso
- Envío de información estructurada entre diferentes organismos: Cuando sea necesario intercambiar información entre varios organismos Avro permitir definir un estructura de datos que facilita su intercambio.
- Validación de eventos: Una buena práctica asociada al envío de mensajes y eventos es validar la estructura de la información que se envía o recibe. Esta validación suele estar basada en esquemas Avro.
JSON Schema
JSON Schema es un estándar que define la estructura, el formato y las restricciones de los datos JSON. Puede ser utilizado junto con Avro para validar los mensajes JSON producidos o consumidos por los eventos de Kafka.
Algunas consideraciones adicionales incluyen:
- Validación de Esquemas JSON: JSON Schema proporciona una forma de definir la estructura esperada de los datos JSON, así como las restricciones sobre los valores de los campos. Esto puede ser útil para garantizar que los mensajes JSON producidos y consumidos por Kafka cumplan con ciertos requisitos de formato y contenido.
- Generación Automática de Esquemas: Herramientas como avro-tools proporcionan funcionalidades para generar automáticamente esquemas Avro a partir de JSON Schema y viceversa. Esto facilita la interoperabilidad entre sistemas que utilizan diferentes formatos de datos y simplifica el proceso de integración con Kafka.
- Validación de Mensajes en Tiempo Real: La validación de esquemas JSON puede ser realizada en tiempo real por los productores y consumidores de eventos de Kafka. Esto asegura que los mensajes que entran y salen del sistema cumplan con las expectativas de estructura y contenido definidas en el JSON Schema correspondiente.
Ámbito y beneficios
Se recomienda el uso de JSONS schema para definir los datos de entrada y salida de las APIs, en la definición de datos que se almacenarán en bases de datos no relaciones y para validar formularios.
Los beneficios de usar JSON son:
- Validación de Datos: JSON Schema permite definir reglas para validar la estructura y el contenido de los datos JSON asegurando que los datos recibidos o almacenados cumplan con los requisitos esperados.
- Documentación: Al definir un esquema, también se creando una documentación clara y precisa sobre la estructura de los datos facilitando la comprensión y el uso de los datos por parte de otros desarrolladores.
- Interoperabilidad: JSON Schema ayuda a garantizar que los datos sean compatibles entre diferentes sistemas y aplicaciones, facilitando la integración y el intercambio de información.
- Automatización: Con JSON Schema puede automatizarse la validación de datos, lo que permite reducir errores y mejorar la eficiencia en el procesamiento de datos.
- Facilidad de Mantenimiento: Al tener un esquema definido, es más fácil realizar cambios y mantener la consistencia de los datos a lo largo del tiempo.
Casos de uso
- Definición de datos en las APIs: Cuando se define una API además de definir las operaciones es necesario definir la información que se intercambia en la entrada y salida de dichas operaciones. Dentro de Swagger se contempla la posibilidad de definir el JSON Schema para los datos de entrada y salida.
- Definición de datos en base de datos no relacionales: Cuando se define un documento en una base de datos no relacional para garantizar la coherencia de los datos almacenados se recomienda definir un JSON Schema.
XML Schema
XSD (XML Schema Definition) es un lenguaje de esquema utilizado para describir la estructura y las restricciones de los contenidos de los documentos XML de una forma muy precisa, más allá de las normas sintácticas impuestas por el propio lenguaje XML. Con XML Schema se consigue una percepción del tipo de documento con un nivel alto de abstracción. Fue desarrollado por el World Wide Web Consortium (W3C) y alcanzó el nivel de recomendación en mayo de 2001.
Ámbito y beneficios
Al igual que WSDL, la definición de esquemas de datos usando documentos XML bajo XSD empieza a estar desaconsejado frente a la definición de esquemas de datos usando JSON. Sin embargo, aún existen algunos casos de uso, por lo que un diseñador podría decidir seguir utilizando este lenguaje de especificación:
- Validación de datos complejos: XML Schema permite definir reglas de validación muy detalladas y complejas, como tipos de datos específicos, restricciones de longitud, patrones y relaciones entre elementos. Esto es útil en aplicaciones donde la integridad y la precisión de los datos son críticas.
- Interoperabilidad con sistemas heredados: Muchos sistemas antiguos y aplicaciones empresariales utilizan XML y XML Schema. Si necesitas integrarte con estos sistemas, es más práctico y eficiente utilizar XML para asegurar la compatibilidad.
- Soporte para namespaces: XML soporta namespaces, lo que permite evitar conflictos de nombres cuando se combinan datos de diferentes fuentes. Esta característica permite integrar múltiples servicios o fuentes de datos.
Casos de uso
- Comunicación con servicios legacy: Al igual que ocurre con WSDL, el caso de uso más habitual será la creación estructuras de datos complejas en clientes interoperables que permitan realizar peticiones a servicios legacy implementados usando un protocolo basado en XML.
Web Components
Web Components es un conjunto de estándares del W3C que permite crear elementos personalizados, reutilizables y encapsulados para la web, combinando HTML, CSS y JavaScript. Su objetivo es facilitar el desarrollo de interfaces modulares y coherentes, donde cada componente tiene su propio comportamiento, estilo y estructura independiente.
Para obtener más información acceder al siguiente enlace.
Ámbito y beneficios
Se utiliza principalmente en el desarrollo frontend moderno para construir interfaces escalables y mantenibles. Los beneficios incluyen la reducción de la duplicidad de código, una mayor coherencia visual entre aplicaciones y la posibilidad de reutilizar los mismos componentes en diferentes proyectos o entornos sin depender de un framework específico.
Casos de uso
- Desarrollo de bibliotecas de componentes UI reutilizables: Crear conjuntos de elementos visuales (botones, menús, tarjetas, formularios, etc.) que pueden emplearse en múltiples proyectos sin modificar su código interno para mantener coherencia visual y acelerar el desarrollo en distintos equipos o aplicaciones.
- Creación de widgets o elementos interactivos que puedan integrarse en diferentes plataformas: Permite diseñar componentes autónomos, como calendarios, reproductores multimedia o paneles de notificaciones, que pueden insertarse fácilmente en distintos sitios o frameworks gracias a su encapsulación y compatibilidad nativa con HTML.
- Diseño de sistemas visuales unificados para aplicaciones empresariales o portales web complejos: Facilita la implementación de un lenguaje visual común dentro de una organización, asegurando que todas las aplicaciones compartan la misma apariencia y comportamiento. Esto mejora la experiencia del usuario y refuerza la identidad corporativa en entornos con múltiples equipos o productos digitales.
Custom Events (W3C)
Los Custom Events son una especificación del W3C que permite definir y despachar eventos personalizados dentro del DOM, ampliando el sistema de eventos nativo de los navegadores. Gracias a ellos, los desarrolladores pueden crear interacciones y flujos de comunicación adaptados a las necesidades específicas de sus aplicaciones.
Para obtener más información acceder al siguiente enlace.
Ámbito y beneficios
Se aplican en el desarrollo de aplicaciones interactivas y modulares, donde los distintos componentes necesitan comunicarse entre sí sin depender directamente unos de otros. Los beneficios incluyen una mayor flexibilidad, la mejora de la separación de responsabilidades y una arquitectura más limpia y mantenible.
Casos de uso
- Comunicación entre componentes en aplicaciones basadas en Web Components o frameworks SPA: Permite que distintos componentes se comuniquen entre sí mediante eventos personalizados, sin necesidad de depender directamente unos de otros. Esto favorece una arquitectura más modular y facilita el mantenimiento y la escalabilidad de aplicaciones complejas.
- Activación de comportamientos personalizados al producirse ciertas condiciones: Los Custom Events pueden disparar acciones específicas en respuesta a eventos definidos por el desarrollador (por ejemplo, validar un formulario, actualizar un panel o mostrar una notificación). De esta forma, se amplía el sistema de eventos nativo del navegador para adaptarlo a las necesidades de la aplicación.
- Sincronización de estados o datos entre diferentes módulos de una aplicación sin acoplamiento directo: Facilitan la coordinación entre distintas partes de una aplicación —como componentes visuales y controladores de datos— sin crear dependencias rígidas. Por ejemplo, un componente puede emitir un evento cuando cambia su estado y otros módulos pueden reaccionar a ello sin conocer su implementación interna.
Web Messaging (W3C)
Web Messaging, también conocido como la API postMessage, es un estándar del W3C que define un mecanismo seguro para el intercambio de mensajes entre documentos o contextos de ejecución, incluso si provienen de distintos orígenes o dominios.
Para obtener más información acceder al siguiente enlace.
Ámbito y beneficios
Se utiliza en escenarios donde diferentes partes de una aplicación (como iframes, pestañas o ventanas) deben comunicarse sin vulnerar las políticas de seguridad del navegador. Los principales beneficios son el refuerzo de la seguridad en las comunicaciones entre orígenes distintos, la interoperabilidad entre sistemas independientes y la facilidad para integrar aplicaciones externas.
Casos de uso
- Comunicación entre un portal principal y un iframe que contiene una aplicación embebida: Permite que una página web principal envíe y reciba mensajes de un contenido embebido (por ejemplo, un iframe con un formulario, un chat o una pasarela de pago) de forma segura. Esto facilita la integración de aplicaciones externas sin exponer datos sensibles ni violar las políticas de mismo origen (same-origin policy).
- Intercambio de información entre una pestaña y una ventana emergente del mismo sitio: A través de la API postMessage, una aplicación puede mantener comunicación activa con ventanas secundarias abiertas por el usuario (como asistentes de configuración o formularios emergentes). De este modo, se logra compartir información o actualizaciones en tiempo real entre interfaces relacionadas sin recargar la página.
- Sincronización de datos entre diferentes aplicaciones web que funcionan en contextos de navegador separados: Permite que distintas instancias de una aplicación, abiertas en diferentes pestañas o dominios, compartan estado o eventos (por ejemplo, el inicio de sesión, el progreso de una acción o la actualización de un carrito de compras). Esto mejora la coherencia y la experiencia del usuario al mantener los datos sincronizados en todo momento.
Comunicaciones
Rest
Es un protocolo de comunicación basado en HTTP que permite a los clientes acceder y manipular recursos a través de una interfaz uniforme y predefinida. Utiliza los métodos estándar de HTTP como GET, POST, PUT y DELETE, para realizar operaciones CRUD (Crear, Leer, Actualizar y Eliminar) en los recursos. Las respuestas se devuelven generalmente en formatos como JSON o XML.
Ámbito y beneficios
El protocolo REST en estos momentos es el más utilizado en el desarrollo de servicios web. Las principales características que han posicionado a REST como uno de los protocolos más utilizados son:
- Simplicidad y facilidad de uso: REST utiliza métodos HTTP estándar (GET, POST, PUT, DELETE) que son fáciles de entender y aplicar reduciendo la curva de aprendizaje para los desarrolladores.
- Escalabilidad: REST es un protocolo sin estado, lo que significa que cada solicitud del cliente contiene toda la información necesaria para procesarla facilitando la escalabilidad horizontal de los servicios.
- Flexibilidad y libertad de formato: Aunque JSON es el formato más comúnmente utilizado con REST, también puede trabajar con XML, HTML y otros formatos proporcionando flexibilidad en las comunicaciones.
- Interoperabilidad: REST es compatible con cualquier cliente que pueda enviar solicitudes HTTP, lo que lo hace altamente interoperable y adecuado para aplicaciones web y móviles.
- Eficiencia en el uso de ancho de banda: Las APIs RESTful suelen ser menos verbosas que las basadas en SOAP, lo que reduce el uso de ancho de banda y mejora el rendimiento.
- Facilidad de integración: REST se integra fácilmente con servicios y aplicaciones modernas, incluyendo microservicios y arquitecturas basadas en la nube.
El protocolo REST unido a generación de API públicas permitirá a la JdA la creación de servicios públicos que puedan ser invocados fácilmente por entidades y ciudadanos.
Casos de uso
- Publicación de servicios para operar con datos: Una práctica habitual que actualmente está desaconsejada es compartir una base de datos entre varias aplicaciones mediante DB Link. Se puede evitar esta práctica si la aplicación responsable de la base de datos publica servicios REST con las operaciones que pueden utilizarse para interactuar con la base de datos. De esta forma se mantiene la comunicación virtualmente y se centralizan todas las peticiones en una única aplicación que será la responsable de interactuar con la base de datos.
- Publicación de una API Pública: Dado que HTTP es el canal de comunicación más habitual, REST el protocolo recomendado para la creación de APIs que pueda ser invocada por cualquier entidad, organismo o ciudadano.
- Servicios interoperables: Al ser el protocolo que se usa como estándar en las comunicaciones, es el más recomendado a la hora de implementar servicios que deban ser interoperable y comunicarse con otros Sistemas de Información o con aplicaciones externas a JdA.
Graphql
Es un lenguaje de consulta para APIs desarrollado por Facebook. Utiliza un único punto de entrada para todas las solicitudes y permite a los clientes especificar la estructura de los datos que desean recibir. GraphQL se basa en un esquema de tipos definido por el servidor, lo que proporciona una descripción completa de los datos disponibles y las operaciones que se pueden realizar. Esto facilita la evolución de la API con el tiempo y permite una mayor flexibilidad en el desarrollo de aplicaciones cliente. GraphQL se utiliza ampliamente en aplicaciones modernas para optimizar las consultas de datos, reducir el tráfico de red y mejorar la experiencia del usuario.
Ámbito y beneficios
El uso de GraphQL está muy relacionado con la gestión de comunicaciones donde intervienen elementos del FrontEnd. Especialmente se utiliza en aplicaciones móviles y aquellas aplicaciones que tienen que ahorrar en almacenamiento interno y ancho de banda.
Los beneficios que aporta es este ámbito el uso de servicios GraphQL son:
- Consultas de datos complejas: Cuando una aplicación FrontEnd necesita obtener información de múltiples fuentes y a la vez no consumir excesivamente los recursos del dispositivo sobre el que está corriendo, GraphQL permite a los clientes solicitar exactamente los datos que necesitan, reduciendo la sobrecarga de datos innecesarios.
- Optimización de rendimiento: En aplicaciones móviles o de baja conectividad, GraphQL puede reducir el número de peticiones al servidor al permitir que los clientes obtengan todos los datos necesarios en una sola solicitud.
- Evolución de la API sin interrupciones: GraphQL permite agregar nuevos campos y tipos a la API sin afectar a los clientes existentes. Esto facilita la evolución y el mantenimiento de la API a lo largo del tiempo.
- Flexibilidad para los desarrolladores de FrontEnd: GraphQL proporciona a los desarrolladores de FrontEnd más control sobre los datos que reciben, permitiéndoles construir interfaces de usuario más eficientes y personalizadas.
- Tipado fuerte y validación: GraphQL utiliza un sistema de tipos fuerte que permite validar las consultas antes de ejecutarlas, reduciendo errores y mejorando la seguridad.
Casos de uso
- Consulta de expedientes en aplicación móvil: Las aplicaciones móviles que permiten a los ciudadanos consultar sus expedientes, como Carpeta Ciudadana, pueden optimizar mucho su servicio utilizando el protocolo GraphQL. Estas aplicaciones consultan de múltiples fuentes y lo habitual es que, de toda la información recibida, compongan como resultado el expediente de un ciudadano donde solo un mínimo de información de la obtenida es relevante para él. Usando GraphQL se puede gestionar más fácilmente que con REST qué información se devuelve, optimizando los recursos del dispositivo móvil y el ancho de banda sobre todo cuando se usan datos móviles.
gRPC
Es un protocolo de comunicación de código abierto desarrollado por Google, diseñado para permitir la comunicación eficiente y confiable entre servicios distribuidos. Se basa en HTTP/2 para la comunicación de datos y utiliza el Protocolo de Buffers de Google (protobuf) como su mecanismo de serialización. Este protocolo ofrece características avanzadas como llamadas de procedimiento remoto (RPC) de bajo costo, streaming de datos bidireccional y soporte integrado para autenticación y autorización. Es ampliamente utilizado en aplicaciones distribuidas y sistemas de microservicios debido a su eficiencia, escalabilidad y facilidad de uso.
Ámbito y beneficios
Aunque gRPC utiliza también HTTP y es mucho más óptimo que REST, lamentablemente es un protocolo que no logra imponerse a REST en el mercado. Por lo tanto, es un protocolo que no se recomienda utilizar en servicios que deban ser interoperables o estar publicados en Internet. Sin embargo, gRPC es un protocolo que puede utilizarse para optimizar una arquitectura de microservicios y reducir el tiempo de espera que se produce cuando varios microservicios tienen que interactuar en una misma petición. Por lo tanto, es recomendable sobre todo en comunicaciones internas dentro del mismo sistema de información, en microservicios que se diseñan para interactuar estrechamente entre sí y donde el equipo de desarrollo pueda implementar la opción de comunicación más óptima sin que intervengan elementos del exterior.
Los beneficios que aporta gRPC en el contexto que se ha indicado son:
- Alto rendimiento y baja latencia: gRPC utiliza HTTP/2 lo que permite la multiplexación de múltiples solicitudes en una sola conexión, reduciendo la latencia y mejorando el rendimiento general.
- Protocolo binario eficiente: A diferencia de REST, que generalmente utiliza JSON, gRPC utiliza Protocol Buffers (Protobuf) para la serialización de datos produciendo mensajes más pequeños y rápidos de procesar.
- Comunicación bidireccional: gRPC soporta streaming bidireccional, lo que permite que tanto el cliente como el servidor envíen múltiples mensajes en ambas direcciones utilizando una única conexión.
- Definición de servicios y contratos: gRPC permite definir servicios y métodos de manera clara y precisa utilizando archivos .proto facilitando la generación automática de código cliente y servidor en múltiples lenguajes de programación.
- Seguridad y autenticación: gRPC soporta TLS (Transport Layer Security) de manera nativa, proporcionando una capa adicional de seguridad en la comunicación entre microservicios.
- Manejo de errores y control de flujo: gRPC proporciona mecanismos robustos para el manejo de errores y el control de flujo, lo que mejora la resiliencia y la estabilidad de la comunicación entre microservicios.
Casos de uso
- Comunicación interna entre microservicios: Como ya se ha indicado, el caso de uso más recomendado es implementar este tipo de comunicación para comunicar todos los microservicios que interaccionan entre sí en un Sistema de Información. También es posible utilizar este protocolo para comunicarse con microservicios externos al Sistema de Información, aunque en este caso, al no ser el protocolo habitual, deberán coordinarse los equipos responsables de cada Sistema de Información para que la integración se realice con éxito y de la forma más óptima posible.
WebSockets
Es un protocolo de comunicación bidireccional y full-duplex que se ejecuta sobre TCP. Este protocolo está diseñado para habilitar una comunicación en tiempo real entre un cliente y un servidor a través de una única conexión persistente. Permite que los datos se transmitan de forma eficiente en ambas direcciones.
Ámbito y beneficios
WebSocket es un protocolo muy relacionado con los componentes FrontEnd y suele utilizarse cuando es necesario establecer una comunicación eficiente y que consuma pocos recursos en tiempo real entre el cliente y el servidor.
Los beneficios de WebSocket son:
- Comunicación bidireccional: WebSockets permite una comunicación en tiempo real entre el cliente y el servidor, lo que facilita el intercambio de datos en ambas direcciones sin necesidad de múltiples solicitudes HTTP.
- Baja latencia: Debido a que WebSockets mantienen una conexión abierta, la latencia es significativamente menor en comparación con protocolos que requieren establecer una nueva conexión para cada solicitud.
- Eficiencia en el uso de recursos: WebSockets utiliza menos ancho de banda y recursos del servidor ya que no necesitan enviar encabezados HTTP completos con cada mensaje permitiendo una comunicación más eficiente.
- Actualizaciones en tiempo real: WebSockets el ideal para aplicaciones que requieran actualizaciones instantáneas como notificaciones, mensajes de chat, y datos en tiempo real.
- Escalabilidad: WebSockets puede manejar múltiples conexiones simultáneas de manera eficiente, lo que los hace adecuado para aplicaciones que necesitan interactuar con muchos usuarios al mismo tiempo.
- Compatibilidad con múltiples plataformas: WebSockets es compatible con la mayoría de los navegadores modernos y pueden ser utilizados en aplicaciones web, móviles y de escritorio.
Casos de uso
- Aplicaciones de chat y mensajería: WebSockets es el protocolo más indicado para implementar aplicaciones que ofrezcan un servicio de chat ya sea con un operador o una IA al permitir una comunicación en tiempo real entre el cliente y el servidor.
- Actualizaciones en tiempo real: WebSocket está especialmente recomendado en aplicaciones que necesitan mostrar datos en tiempo real como cuadros de mandos, sistemas de monitoreo o aplicaciones de seguimiento de vehículos, ya que permite que los datos se actualicen sin necesidad de refrescar la página.
Server-Sent Events (SSE)
Es un protocolo basado en HTTP que permite a un servidor enviar eventos de forma asíncrona al cliente a través de una conexión HTTP persistente. SSE es unidireccional (del servidor al cliente) y está orientado principalmente a la transmisión de datos desde el servidor al cliente en tiempo real, como actualizaciones de estado, notificaciones o feeds de noticias. SSE utiliza el formato de texto plano y se integra bien con la infraestructura web existente, lo que lo hace fácil de implementar y compatible con una amplia gama de tecnologías cliente.
Ámbito y beneficios
La principal diferencia entre SSE y WebSocket es que SSE establece una comunicación unidireccional y WebSocket bidireccional. Se recomienda usar SSR cuando comunicación va a ser unidireccional y el servidor no espera respuesta del cliente.
Los principales beneficios asociados a SSE son:
- Actualizaciones unidireccionales en tiempo real: Cuando solo es encesario enviar datos desde el servidor al cliente, como en aplicaciones de noticias, resultados deportivos, o actualizaciones de redes sociales1.
- Simplicidad y eficiencia: SSE utiliza el protocolo HTTP estándar lo que facilita su implementación y compatibilidad con la mayoría de los navegadores modernos.
- Menor carga en el servidor: SSE es más eficiente en términos de recursos del servidor, especialmente en aplicaciones donde solo se necesita enviar datos desde el servidor al cliente.
- Reconexión automática: SSE maneja automáticamente la reconexión en caso de pérdida de conexión simplificando la gestión de la conexión.
Casos de uso
- Notificaciones móviles: Quizás el caso de uso donde más se utiliza el protocolo SSE en el mercado ahora mismo sea para la generación de notificaciones móviles.
- Feed de noticias: Aunque cada vez menos habitual, el protocolo SSE tradicionalmente ha estado vinculado a la generación de feed de noticias y notificación de actualizaciones.
Seguridad
SSOWEB(SAML 2.0)
SAML 2.0 (Security Assertion Markup Language) es un estándar abierto creado para proporcionar el inicio de sesión único (SSO) entre dominios. En otras palabras, permite que un usuario se autentique en un sistema y acceda a otro proporcionando una prueba de su autenticación.
Ámbito y beneficios
El principal ámbito de actuación de SAML es permitir, de forma segura, la autenticación de ciudadanos en sistemas de administración digital. Este protocolo permite al ciudadano autenticarse de forma segura, sin necesidad generación de contraseñas, en estos sistemas. Este protocolo de seguridad permite utilizar una autenticación de doble factor y obtener un token que, añadido a sus peticiones, le permitirá acceder de forma controlada a su información privada.
Casos de uso
- Autenticación de ventanilla electrónica: Quizás el caso de uso más paradigmático para utilizar este protocolo de seguridad es la autenticación de ciudadanos en una ventanilla electrónica. Esta autenticación, que suele hacerse mediante certificado digital y otro tipo de método similar, permite autenticarse a los ciudadanos en la Ventanilla Electrónica sin necesidad de completar un formulario de registro tradicional.
HTTPS/SSL
HTTPS permite la autenticación del cliente y del servidor mediante certificados.
SSL es un protocolo que transmite las comunicaciones por Internet en formato cifrado. De esta manera se garantiza que la información se envíe sin cambios al servidor deseado. Es posible aplicar servicios web HTTPS a todos los tipos de clientes, incluidos los clientes Java EE y los clientes Java independientes.
En la actualidad, HTTPS con certificados del servidor constituye la configuración más habitual de la Web. En esta configuración, el servidor debe presentar su certificado al cliente para determinar la identidad del servidor. El cliente no necesita presentar su certificado al servidor para que este determine la identidad de aquel. En otras palabras, el cliente puede autenticar al servidor, pero el servidor no puede autenticar al cliente. Sin embargo, también es posible usar HTTPS junto con la autenticación básica, que permite al servidor autenticar al cliente o establecer un mecanismo de autenticación Mutual SSL donde hay un intercambio de certificados entre servidor y cliente.
Ámbito y beneficios
SSL puede utilizarse en conjunto con otros protocolos como SAML y Oauth2 y debe utilizarse cada vez que sea necesario establecer una comunicación segura entre dos o más componentes software. La comunicación al estar cifrada usando certificados solo podrá ser procesada por el sistema que posea la clave pública del certificado que cifró la comunicación, evitando ataques informáticos que se basen en suplir la identidad del remitente. Los beneficios de usar SSL son:
- Cifrado de datos: SSL asegura que los datos transmitidos entre el servidor y el cliente estén cifrados, protegiéndolos de interceptaciones y accesos no autorizados protegiendo la información sensible de una petición como credenciales de inicio de sesión, datos de pago e información personal.
- Autenticación: SSL verifica la identidad del servidor, asegurando que los usuarios se conecten al sitio web correcto minimizando el riesgo a caer en una estafa de phishing.
- Integridad de los datos: SSL garantiza que los datos no sean alterados durante la transmisión. Esto asegura que la información recibida por el cliente es la misma que fue enviada por el servidor.
- Confianza y credibilidad: Los sitios web que utilizan SSL muestran indicadores visuales de seguridad, como el candado en la barra de direcciones y el prefijo HTTPS. Estos indicadores generan confianza en los usuarios, quienes se sienten más seguros al interactuar con el sitio.
- Mejora del SEO: Los motores de búsqueda, como Google, favorecen los sitios web que utilizan SSL en sus rankings. Esto puede mejorar la visibilidad y el posicionamiento de tu sitio web.
Casos de uso
- Comunicación entre componentes software: Siguiendo las normas de desarrollo seguro establecidas en la definición de la Arquitectura de Referencia en Seguridad, toda comunicación entre componentes software dentro y fuera de JdA debe hacerse utilizando este protocolo.
OAuth2
OAuth2 es un protocolo de autorización que permite a terceros (clientes) acceder a contenidos propiedad de un usuario (alojados en aplicaciones de confianza, servidor de recursos) sin que éstos tengan que manejar ni conocer las credenciales del usuario. Es decir, aplicaciones de terceros pueden acceder a contenidos propiedad del usuario, pero estas aplicaciones no conocen las credenciales de autenticación. Por tanto, en OAuth podemos identificar tres entidades:
- Propietario de recursos: Es una entidad capaz de dar acceso a recursos protegidos. Cuando es una persona nos referiremos a él como usuario final.
- Cliente: Es la aplicación hace peticiones a recursos protegidos en nombre de un propietario de recursos con la autorización de este.
- Proveedor:
- Servidor de recursos: Es la entidad que tiene los recursos protegidos. Es capaz de aceptar y responder peticiones usando un access token que debe venir en el cuerpo de la petición.
- Servidor de autorización: En muchos casos el servidor de autenticación es el mismo que el Servidor de Recursos. En el caso de que se separen, el servidor de autenticación es el responsable de generar tokens de acceso y validar usuarios y credenciales.
Ámbito y beneficios
OAuth2 debe utilizarse en conjunto con SSL para garantizar que la comunicación entre los componentes software cumplan los requisitos de seguridad referentes a autorización (Oauth2) y comunicación (SSL). De manera general, y tal y como se establece en la normativa de desarrollo seguro, todas las comunicaciones deben estar securizadas utilizando un token JWT generado mediante el protocolo OAuth2 y que haya sido previamente validado por una entidad autorizada ya sea de la JdA o de otro organismo externo.
Los beneficios asociados a OAtuh2 son:
- Seguridad mejorada: OAuth2 permite a las aplicaciones acceder a los recursos de un usuario sin necesidad de compartir sus credenciales de inicio de sesión reduciendo el riesgo de exposición de contraseñas y otros datos sensibles.
- Autorización granular: OAuth2 permite definir permisos específicos para cada aplicación lo que proporciona un control detallado sobre qué datos y recursos pueden ser accesibles.
- Interoperabilidad: OAuth2 es un estándar abierto y ampliamente adoptado lo que facilita la integración entre diferentes aplicaciones y servicios.
- Escalabilidad: OAuth2 es adecuado para aplicaciones que necesitan gestionar un gran número de usuarios y permisos proporcionando una solución robusta y escalable.
- Reducción de riesgos: Al eliminar la necesidad de compartir contraseñas, OAuth reduce el riesgo de robo de credenciales y otros ataques de seguridad.
Casos de uso
- Autorización entre componentes software: Siguiendo las normas de desarrollo seguro establecidas en la definición de la Arquitectura de Referencia en Seguridad, toda petición debe venir acompañada de un token JWT generado bajo el protocolo OAuth2 para verificar la identidad de la persona o aplicación que realiza la petición.
Content Security Policy (CSP)
Content Security Policy (CSP) es una especificación del W3C que permite a los desarrolladores controlar qué recursos puede cargar o ejecutar una aplicación web, con el objetivo de prevenir ataques de inyección de código, como el Cross-Site Scripting (XSS).
Para obtener más información acceder al siguiente enlace.
Ámbito y beneficios
Se aplica en el ámbito de la seguridad web, proporcionando una capa de defensa adicional del lado del cliente. Permite definir políticas estrictas sobre el origen de los scripts, hojas de estilo, imágenes o iframes, reduciendo significativamente el riesgo de explotación de vulnerabilidades. Los beneficios principales son la prevención de ataques, el refuerzo de la integridad del contenido y el cumplimiento de estándares de seguridad corporativos.
Casos de uso
- Implementación de políticas que bloquean la ejecución de scripts en línea o no autorizados: Permite definir reglas que impiden la ejecución de código JavaScript incrustado directamente en el HTML o cargado desde orígenes no confiables. Esto protege frente a ataques de Cross-Site Scripting (XSS) y reduce el riesgo de que código malicioso se ejecute en el navegador del usuario.
- Control de carga de recursos externos en aplicaciones web críticas: CSP permite especificar de qué dominios se pueden cargar recursos como imágenes, hojas de estilo, fuentes o scripts. En aplicaciones sensibles —como plataformas bancarias o de administración pública— esta práctica garantiza que solo se usen recursos verificados, evitando la manipulación o inyección de contenido desde fuentes externas.
- Monitorización de intentos de violación de políticas de seguridad a través de informes automáticos al servidor: Además de bloquear comportamientos no permitidos, CSP puede configurarse para enviar informes al servidor cuando se detectan intentos de incumplir las políticas definidas. Esto permite a los equipos de seguridad identificar patrones de ataque, depurar configuraciones y reforzar la protección de manera proactiva.
Observabilidad
Open Telemetry
OpenTelemetry es un protocolo y conjunto de herramientas de código abierto diseñado para recolectar, procesar y exportar datos de observabilidad, como métricas, trazas y logs, de aplicaciones distribuidas. Su objetivo es proporcionar una forma unificada y estándar de instrumentar sistemas para monitorear su rendimiento y comportamiento, facilitando el análisis y diagnóstico de problemas en entornos complejos de microservicios o nube.
Puede consultarse la especificación del estándar en el siguiente enlace.
Ámbito y beneficios
Se utiliza principalmente para gestionar la observabilidad de sistemas distribuidos, permitiendo recopilar y analizar datos de rendimiento de aplicaciones, servicios en la nube y microservicios. Sus principales beneficios incluyen la estandarización de la instrumentación, la compatibilidad con múltiples lenguajes y plataformas, y la capacidad de integrarse con diversas herramientas de monitoreo ayudando a las organizaciones a obtener una visión completa del comportamiento de sus sistemas, detectar problemas más rápido y optimizar el rendimiento de sus aplicaciones.
Casos de uso
- Trazabilidad de peticiones en arquitecturas de microservicios: Permite seguir el recorrido completo de una solicitud a través de múltiples servicios, identificando cuellos de botella y errores en la cadena.
- Monitoreo de aplicaciones en la nube (Cloud-native): Facilita la recolección de métricas y logs en entornos dinámicos como Kubernetes, ayudando a entender el comportamiento de pods y contenedores.
- Optimización del rendimiento de APIs: Ayuda a medir latencias, tasas de error y tiempos de respuesta, lo que permite mejorar la experiencia del usuario y la eficiencia del backend.
- Integración con plataformas APM (Application Performance Monitoring): OpenTelemetry actúa como una capa de observabilidad estándar que alimenta herramientas como Grafana, Prometheus, Datadog o New Relic.
- Depuración en entornos de desarrollo y pruebas: Permite analizar el impacto de cambios en el código o la infraestructura antes de desplegar en producción.
Diseño y accesibilidad
Web Content Accessibility Guidelines (WCAG)
Las Web Content Accessibility Guidelines (WCAG) son un conjunto de pautas publicadas por el W3C que establecen los principios y buenas prácticas para garantizar que los contenidos web sean accesibles para personas con diferentes tipos de discapacidad (visual, auditiva, motriz o cognitiva).
Puede consultarse la especificación del estándar en el siguiente enlace.
Ámbito y beneficios
Estas directrices se aplican en el diseño, desarrollo y mantenimiento de sitios y aplicaciones web, con el objetivo de asegurar la inclusión digital y mejorar la usabilidad para todos los usuarios. Los beneficios incluyen el cumplimiento de normativas legales, la mejora de la experiencia de usuario y el incremento del alcance del contenido a un público más amplio.
Casos de uso
- Adaptación de páginas web para ser compatibles con lectores de pantalla: Consiste en estructurar correctamente el contenido mediante etiquetas semánticas (como encabezados, listas o roles ARIA) para que los lectores de pantalla puedan interpretar y narrar la información de manera comprensible. Esto permite que personas con discapacidad visual naveguen y comprendan el contenido sin barreras.
- Implementación de combinaciones de colores con contraste adecuado: Asegura que los textos, botones y elementos interactivos mantengan un contraste suficiente respecto al fondo, facilitando la lectura a usuarios con baja visión o daltonismo. Esta práctica mejora tanto la accesibilidad como la legibilidad general del sitio web.
- Incorporación de descripciones alternativas en imágenes: Implica añadir textos alternativos (alt text) a las imágenes para que los usuarios con discapacidad visual puedan entender el contenido visual mediante lectores de pantalla. También mejora el SEO y la comprensión del contenido cuando las imágenes no se pueden cargar.
- Diseño de estructuras de navegación accesibles mediante teclado: Garantiza que todos los elementos interactivos —como menús, formularios o botones— puedan ser utilizados sin necesidad del ratón, únicamente con el teclado. Esto es esencial para usuarios con movilidad reducida y mejora la usabilidad general de la interfaz.
Diseño responsivo
El diseño responsivo es una práctica recomendada por el W3C que busca adaptar la estructura, el contenido y la presentación de un sitio web al tamaño y las características del dispositivo del usuario. Se basa en el uso de técnicas como media queries, rejillas flexibles (flexbox, grid) y unidades relativas en CSS para garantizar que una misma interfaz se vea y funcione correctamente en ordenadores, tabletas y dispositivos móviles, sin necesidad de mantener versiones separadas del sitio.
Puede consultarse la especificación del estándar en el siguiente enlace.
Ámbito y beneficios
Se aplica en el desarrollo de interfaces web modernas que deben ofrecer una experiencia de usuario coherente y accesible en una amplia gama de dispositivos y resoluciones de pantalla. Entre sus principales beneficios destacan la mejora de la usabilidad, la reducción de costes de mantenimiento (al centralizar el desarrollo en un único código adaptable), el aumento del rendimiento en móviles y el cumplimiento de buenas prácticas de accesibilidad y experiencia de usuario. Además, contribuye a un posicionamiento SEO más favorable, ya que los motores de búsqueda priorizan sitios con diseño adaptable.
Casos de uso
- Creación de sitios web que ajustan su contenido y navegación según el tamaño de pantalla: Permite reorganizar o redimensionar elementos como menús, columnas o imágenes para optimizar la visualización en cada dispositivo. Por ejemplo, un menú horizontal puede transformarse en un menú desplegable en pantallas pequeñas, mejorando la navegación móvil.
- Desarrollo de aplicaciones web móviles sin necesidad de versiones separadas: Facilita la creación de aplicaciones que funcionan fluidamente tanto en escritorio como en móvil, evitando la duplicación de código y el mantenimiento de distintas versiones. Esto es especialmente útil en entornos empresariales o portales donde los usuarios acceden desde diversos dispositivos.
- Optimización de interfaces para garantizar legibilidad, usabilidad y eficiencia en diferentes resoluciones: Asegura que los textos sean legibles, los botones fácilmente seleccionables y las imágenes adecuadas al tamaño y densidad de la pantalla. De esta forma, se mejora la experiencia del usuario, reduciendo la frustración y el abandono del sitio.