{"id":1696,"date":"2024-09-03T13:42:31","date_gmt":"2024-09-03T13:42:31","guid":{"rendered":"http:\/\/idelogix.com\/?p=1696"},"modified":"2024-09-03T14:13:10","modified_gmt":"2024-09-03T14:13:10","slug":"monolitos-modulares","status":"publish","type":"post","link":"https:\/\/idelogix.com\/?p=1696","title":{"rendered":"Monolitos modulares: M\u00e1s all\u00e1 de lo b\u00e1sico"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-post\" data-elementor-id=\"1696\" class=\"elementor elementor-1696\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-0256c32 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"0256c32\" data-element_type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-3f88276\" data-id=\"3f88276\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-9c29324 elementor-widget elementor-widget-text-editor\" data-id=\"9c29324\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>En una \u00e9poca enfocada en microservicios y metodolog\u00edas \u00e1giles en el desarrollo de software, creo que es importante revisitar y entender bien lo que son los <strong style=\"font-size: 16px; background-color: var( --e-global-color-astglobalcolor4 ); color: #393a56; font-family: 'Open Sans', sans-serif;\">monolitos modulares<\/strong><span style=\"font-size: 16px; background-color: var( --e-global-color-astglobalcolor4 ); color: #393a56; font-family: 'Open Sans', sans-serif;\">. Aunque los microservicios ofrecen claros beneficios en t\u00e9rminos de escalabilidad y modularidad, tambi\u00e9n introducen una complejidad significativa y problemas m\u00faltiples en t\u00e9rminos de despliegue, gesti\u00f3n y comunicaci\u00f3n.<\/span><\/p>\n<p>Debido a esta complejidad y los problemas asociados, est\u00e1 surgiendo un renovado inter\u00e9s en los monolitos modulares, especialmente con el reciente lanzamiento de <strong>Spring Moduliths<\/strong>. Hace unos d\u00edas vi una excelente presentaci\u00f3n y explicaci\u00f3n sobre este tema, que les recomiendo encarecidamente: <a href=\"https:\/\/youtu.be\/MYEx0kO2-8A\" target=\"_blank\" rel=\"noopener\">Spring Tips: Spring Modulith<\/a>.<\/p>\n<p>El <strong>monolito modular<\/strong> presenta una alternativa importante, ofreciendo muchos de los beneficios de los microservicios mientras se mantiene la simplicidad de un despliegue monol\u00edtico.<\/p>\n<p>En esta gu\u00eda que va m\u00e1s all\u00e1 de lo b\u00e1sico, exploraremos c\u00f3mo dise\u00f1ar, implementar y escalar un monolito modular de manera efectiva. Analizaremos los principios del Dise\u00f1o Orientado al Dominio (DDD), la importancia de la comunicaci\u00f3n interna entre m\u00f3dulos, y las estrategias para lograr alta escalabilidad y confiabilidad. Tambi\u00e9n discutiremos en detalle c\u00f3mo los <strong>M\u00f3dulos Java<\/strong> y <strong>Spring Moduliths<\/strong> pueden ser utilizados para implementar monolitos modulares en Java.<\/p>\n<h2>Entendiendo los Monolitos Modulares<\/h2>\n<p>Un <strong>monolito modular<\/strong> es una aplicaci\u00f3n \u00fanica que se organiza en m\u00f3dulos bien definidos y con bajo acoplamiento. Cada m\u00f3dulo encapsula un dominio o funcionalidad espec\u00edfica, asegurando que la aplicaci\u00f3n se mantenga manejable y escalable a medida que crece.<\/p>\n<ul>\n<li><strong>Unidad de Despliegue \u00danica:<\/strong> Toda la aplicaci\u00f3n se despliega como una sola unidad.<\/li>\n<li><strong>Modularidad Interna:<\/strong> La aplicaci\u00f3n se organiza en m\u00f3dulos distintos, cada uno con responsabilidades y l\u00edmites claros.<\/li>\n<li><strong>Encapsulamiento:<\/strong> Cada m\u00f3dulo oculta sus detalles internos de implementaci\u00f3n a otros m\u00f3dulos, reduciendo las dependencias.<\/li>\n<\/ul>\n<h2>Dise\u00f1ando Monolitos Modulares con Domain-Driven Design (DDD)<\/h2>\n<p><strong>\u00bfQu\u00e9 es Domain-Driven Design (DDD)?<\/strong> Domain-Driven Design, o Dise\u00f1o Orientado al Dominio, es una metodolog\u00eda de desarrollo de software que se enfoca en construir aplicaciones que reflejen fielmente la l\u00f3gica y las reglas del negocio. La idea principal de DDD es que el dise\u00f1o del software debe estar profundamente conectado con el dominio del negocio que busca resolver. Esto se logra mediante una colaboraci\u00f3n continua entre desarrolladores y expertos en el negocio (conocidos como &#8220;expertos en dominio&#8221;) para construir un modelo de dominio compartido y comprensible para todos.<\/p>\n<p><strong>Lenguaje Com\u00fan:<\/strong> Uno de los pilares de DDD es el concepto de &#8220;Lenguaje Com\u00fan&#8221;, un lenguaje compartido por desarrolladores y expertos en dominio que se utiliza para describir el sistema. Este lenguaje se refleja directamente en el c\u00f3digo, lo que garantiza que tanto el software como las discusiones entre el equipo de desarrollo y los expertos en negocio sean consistentes y comprensibles para todos. Usar un lenguaje com\u00fan ayuda a reducir malentendidos y alinea el desarrollo del software con las necesidades reales del negocio.<\/p>\n<p><strong>Contextos Delimitados:<\/strong> DDD introduce la idea de &#8220;Contextos Delimitados&#8221;, que son \u00e1reas dentro del software donde un modelo de dominio particular es v\u00e1lido. Cada contexto delimitado define un l\u00edmite claro donde se aplica un conjunto de reglas y conceptos del dominio. En un monolito modular, cada contexto delimitado puede convertirse en un m\u00f3dulo separado. Este enfoque permite que diferentes partes del sistema evolucionen de manera independiente y se mantengan organizadas de acuerdo con las necesidades del negocio.<\/p>\n<p><strong>Entidades y Agregados:<\/strong> Dentro de cada contexto delimitado, DDD utiliza conceptos como &#8220;Entidades&#8221; y &#8220;Agregados&#8221;. Las entidades son objetos que tienen una identidad \u00fanica y persisten en el tiempo. Por ejemplo, en un sistema de ventas, un &#8220;Cliente&#8221; podr\u00eda ser una entidad. Un &#8220;Agregado&#8221; es un grupo de entidades relacionadas que se gestionan como una sola unidad. El agregado define las reglas para garantizar la coherencia de los datos dentro de su \u00e1mbito. Por ejemplo, un &#8220;Pedido&#8221; podr\u00eda ser un agregado que incluye varias entidades como &#8220;L\u00ednea de Pedido&#8221; y &#8220;Producto&#8221;.<\/p>\n<p><strong>Eventos de Dominio:<\/strong> Cuando ocurre algo importante en el dominio del negocio, DDD sugiere capturar estos sucesos en lo que se llama &#8220;Eventos de Dominio&#8221;. Estos eventos representan cambios de estado o acciones significativas que han ocurrido en el sistema, como &#8220;Pedido Creado&#8221; o &#8220;Pago Realizado&#8221;. Los eventos de dominio pueden ser utilizados para comunicar cambios entre diferentes m\u00f3dulos de una manera desacoplada, lo que mejora la flexibilidad y la capacidad de escalar del sistema.<\/p>\n<p><strong>Beneficios de DDD en Monolitos Modulares:<\/strong> Al aplicar los principios de DDD en un monolito modular, se obtiene una estructura de c\u00f3digo que est\u00e1 claramente alineada con las necesidades del negocio, lo que facilita su comprensi\u00f3n y mantenimiento. La modularidad natural que surge del uso de contextos delimitados y agregados permite que el sistema crezca y se adapte con el tiempo, sin volverse monol\u00edtico en el sentido tradicional. Adem\u00e1s, los eventos de dominio y la clara separaci\u00f3n entre los m\u00f3dulos permiten que el sistema evolucione de manera flexible y escalable.<\/p>\n<p>En resumen, <strong>Domain-Driven Design (DDD)<\/strong> ofrece un enfoque poderoso para estructurar monolitos modulares, alineando el software con las necesidades del negocio y promoviendo una arquitectura organizada y escalable. Incluso si uno no est\u00e1 familiarizado con DDD, los conceptos b\u00e1sicos de contextos delimitados, entidades, agregados y eventos de dominio pueden ser aplicados de manera intuitiva para mejorar la estructura y la modularidad de la aplicaci\u00f3n o sistema.<\/p>\n<h2>Comunicaci\u00f3n Dentro de un Monolito Modular<\/h2>\n<p>La comunicaci\u00f3n interna entre m\u00f3dulos es crucial para mantener la modularidad y asegurar que el sistema se mantenga cohesivo. Aqu\u00ed hay algunas opciones que se pueden considerar y adoptar de forma disciplinada, direccionando al sistema para que posea las caracter\u00edsticas deseadas:<\/p>\n<ul>\n<li><strong>Llamadas Directas a M\u00e9todos:<\/strong> Sencillas y eficientes, pero pueden llevar a un alto acoplamiento.<\/li>\n<li><strong>Servicios y Interfaces Compartidas:<\/strong> Promueven el bajo acoplamiento al usar interfaces para definir contratos de comunicaci\u00f3n entre m\u00f3dulos.<\/li>\n<li><strong>Bus de Eventos o Mensajer\u00eda en Memoria:<\/strong> Soporta una arquitectura orientada a eventos, reduciendo las dependencias entre m\u00f3dulos.<\/li>\n<li><strong>Eventos de Dominio:<\/strong> Alinea la comunicaci\u00f3n con los principios de DDD, permitiendo que los m\u00f3dulos se comuniquen de manera asincr\u00f3nica a trav\u00e9s de eventos de dominio.<\/li>\n<li><strong>Comunicaci\u00f3n Asincr\u00f3nica mediante Colas de Mensajes:<\/strong> Desacopla los m\u00f3dulos y mejora la escalabilidad mediante el uso de colas de mensajes para la comunicaci\u00f3n.<\/li>\n<\/ul>\n<h2>Implementando Monolitos Modulares en Java<\/h2>\n<p>Java ofrece varias herramientas y enfoques para implementar monolitos modulares de manera efectiva. Dos de las opciones m\u00e1s destacadas son los <strong>M\u00f3dulos Java<\/strong> y <strong>Spring Moduliths<\/strong>, una extensi\u00f3n m\u00e1s reciente del ecosistema Spring. Ambos enfoques permiten estructurar aplicaciones monol\u00edticas en m\u00f3dulos bien definidos, manteniendo la simplicidad de un despliegue monol\u00edtico mientras se benefician de la organizaci\u00f3n y la modularidad que estos enfoques proporcionan. A continuaci\u00f3n, exploraremos estos dos enfoques.<\/p>\n<h3>M\u00f3dulos Java (Java Platform Module System &#8211; JPMS)<\/h3>\n<p>Los <strong>M\u00f3dulos Java<\/strong>, introducidos en Java 9, proporcionan una manera de organizar el c\u00f3digo en m\u00f3dulos a nivel de la JVM. Cada m\u00f3dulo declara expl\u00edcitamente sus dependencias y qu\u00e9 componentes (paquetes) son accesibles por otros m\u00f3dulos.<\/p>\n<ul>\n<li><strong>Declaraciones de M\u00f3dulos:<\/strong> Cada m\u00f3dulo se define en un archivo <code>module-info.java<\/code>, donde se especifican las dependencias (<code>requires<\/code>) y los paquetes que exporta (<code>exports<\/code>).<\/li>\n<li><strong>Encapsulamiento Fuerte:<\/strong> Solo los paquetes expl\u00edcitamente exportados por un m\u00f3dulo pueden ser accedidos por otros m\u00f3dulos.<\/li>\n<li><strong>Verificaci\u00f3n en Tiempo de Compilaci\u00f3n:<\/strong> El sistema de m\u00f3dulos verifica las dependencias en tiempo de compilaci\u00f3n, ayudando a evitar problemas de classpath y asegurando que todos los m\u00f3dulos requeridos est\u00e9n disponibles.<\/li>\n<li><strong>Aplicaci\u00f3n en Tiempo de Ejecuci\u00f3n:<\/strong> Los m\u00f3dulos son aplicados en tiempo de ejecuci\u00f3n, lo que previene el uso accidental de API internas que no estaban destinadas a ser accesibles.<\/li>\n<\/ul>\n<p><strong>Ventajas:<\/strong><\/p>\n<ul>\n<li><strong>Encapsulamiento Fuerte:<\/strong> Asegura que los detalles internos de un m\u00f3dulo est\u00e9n ocultos a otros m\u00f3dulos.<\/li>\n<li><strong>Seguridad en Tiempo de Compilaci\u00f3n:<\/strong> Reduce errores en tiempo de ejecuci\u00f3n relacionados con dependencias faltantes.<\/li>\n<li><strong>L\u00edmites Claros de M\u00f3dulo:<\/strong> Fomenta un dise\u00f1o m\u00e1s limpio al imponer l\u00edmites claros entre m\u00f3dulos.<\/li>\n<\/ul>\n<p><strong>Limitaciones:<\/strong><\/p>\n<ul>\n<li><strong>Curva de Aprendizaje:<\/strong> JPMS introduce una nueva capa de complejidad que requiere aprendizaje y adaptaci\u00f3n.<\/li>\n<li><strong>Problemas de Compatibilidad:<\/strong> Algunas bibliotecas y frameworks de terceros pueden no soportar completamente JPMS.<\/li>\n<li><strong>Granularidad:<\/strong> Los m\u00f3dulos Java son a nivel de JVM, lo cual podr\u00eda ser demasiado general para algunas necesidades de modularizaci\u00f3n a nivel de aplicaci\u00f3n.<\/li>\n<\/ul>\n<h3>Spring Moduliths<\/h3>\n<p><strong>Spring Moduliths<\/strong> es un enfoque m\u00e1s reciente, construido sobre Spring Framework, que busca proporcionar una manera m\u00e1s estructurada de crear monolitos modulares. Aprovecha la inyecci\u00f3n de dependencias de Spring y el contexto de la aplicaci\u00f3n para imponer l\u00edmites entre m\u00f3dulos dentro de una aplicaci\u00f3n Spring.<\/p>\n<ul>\n<li><strong>Integraci\u00f3n con Spring:<\/strong> Los Moduliths est\u00e1n totalmente integrados en el ecosistema de Spring, lo que facilita la adopci\u00f3n para los desarrolladores familiarizados con Spring.<\/li>\n<li><strong>Declaraciones Expl\u00edcitas de M\u00f3dulos:<\/strong> Los m\u00f3dulos en Spring Moduliths se definen utilizando mecanismos de configuraci\u00f3n de Spring, con l\u00edmites y dependencias claramente establecidos entre ellos.<\/li>\n<li><strong>Arquitectura Orientada a Eventos:<\/strong> Spring Moduliths fomenta el uso de eventos de dominio para la comunicaci\u00f3n entre m\u00f3dulos, reduciendo el acoplamiento estrecho.<\/li>\n<li><strong>Documentaci\u00f3n Autom\u00e1tica:<\/strong> Se proporcionan herramientas para documentar autom\u00e1ticamente la estructura de los m\u00f3dulos, las dependencias y las interacciones, lo que ayuda a mantener y entender la arquitectura modular.<\/li>\n<\/ul>\n<p><strong>Ventajas:<\/strong><\/p>\n<ul>\n<li><strong>Integraci\u00f3n Sencilla con Spring:<\/strong> Dado que est\u00e1 construido sobre Spring, los desarrolladores pueden utilizar su conocimiento y herramientas existentes.<\/li>\n<li><strong>Modularidad basada en Eventos:<\/strong> Fomenta el acoplamiento flojo entre m\u00f3dulos a trav\u00e9s de la comunicaci\u00f3n basada en eventos.<\/li>\n<li><strong>Facilidad de Uso:<\/strong> Proporciona una manera m\u00e1s intuitiva y menos intrusiva de crear m\u00f3dulos en comparaci\u00f3n con JPMS.<\/li>\n<li><strong>Documentaci\u00f3n Autom\u00e1tica:<\/strong> Facilita la comprensi\u00f3n y el mantenimiento de la estructura modular.<\/li>\n<\/ul>\n<p><strong>Limitaciones:<\/strong><\/p>\n<ul>\n<li><strong>Encapsulamiento Menos Estricto:<\/strong> Aunque Spring Moduliths promueve la modularidad, la imposici\u00f3n no es tan estricta como en JPMS. Se requiere disciplina para mantener los l\u00edmites.<\/li>\n<li><strong>Dependencia de Spring:<\/strong> Este enfoque ata tu arquitectura estrechamente a Spring, lo cual podr\u00eda ser una desventaja si est\u00e1s buscando una soluci\u00f3n m\u00e1s independiente del framework.<\/li>\n<\/ul>\n<h2>Logrando Escalabilidad en un Monolito Modular<\/h2>\n<p>La escalabilidad es una preocupaci\u00f3n com\u00fan en cualquier arquitectura. Aqu\u00ed te mostramos c\u00f3mo escalar un monolito modular:<\/p>\n<ul>\n<li><strong>Escalabilidad Horizontal:<\/strong> Despliega m\u00faltiples instancias del monolito detr\u00e1s de un balanceador de carga para distribuir el tr\u00e1fico.<\/li>\n<li><strong>Escalabilidad de la Base de Datos:<\/strong> Utiliza t\u00e9cnicas como la partici\u00f3n de bases de datos, sharding, y r\u00e9plicas de lectura para manejar grandes vol\u00famenes de datos.<\/li>\n<li><strong>Cach\u00e9:<\/strong> Implementa cach\u00e9 en memoria para reducir la carga de la base de datos y mejorar los tiempos de respuesta.<\/li>\n<li><strong>Procesamiento Asincr\u00f3nico:<\/strong> Desplaza tareas de larga duraci\u00f3n a trabajadores en segundo plano para mantener la aplicaci\u00f3n principal receptiva.<\/li>\n<li><strong>CQRS y Event Sourcing:<\/strong> Separa las operaciones de lectura y escritura para optimizar el rendimiento y la escalabilidad.<\/li>\n<\/ul>\n<h2>Asegurando la Confiabilidad en un Monolito Modular<\/h2>\n<p>La confiabilidad asegura que el sistema permanezca operativo bajo diversas condiciones. Las t\u00e9cnicas para mejorar la confiabilidad incluyen:<\/p>\n<ul>\n<li><strong>Tolerancia a Fallos:<\/strong> Implementa patrones como el circuit breaker para prevenir fallos en cascada.<\/li>\n<li><strong>Degradaci\u00f3n Gradual:<\/strong> Dise\u00f1a el sistema para desactivar funciones no cr\u00edticas bajo carga pesada, asegurando que la funcionalidad principal permanezca disponible.<\/li>\n<li><strong>Redundancia:<\/strong> Asegura la redundancia en componentes cr\u00edticos, utilizando mecanismos de replicaci\u00f3n y conmutaci\u00f3n por error.<\/li>\n<li><strong>Monitorizaci\u00f3n y Observabilidad Integral:<\/strong> Implementa herramientas de monitorizaci\u00f3n para rastrear el rendimiento de la aplicaci\u00f3n y detectar problemas de manera temprana.<\/li>\n<li><strong>Comprobaciones de Salud y Recuperaci\u00f3n Automatizada:<\/strong> Utiliza comprobaciones de salud para detectar fallos y activar mecanismos de recuperaci\u00f3n automatizados.<\/li>\n<\/ul>\n<h2>Despliegue Continuo y Pruebas<\/h2>\n<p>Un monolito modular se beneficia de robustas canalizaciones de CI\/CD y pruebas automatizadas:<\/p>\n<ul>\n<li><strong>Canalizaci\u00f3n CI\/CD:<\/strong> Automatiza el proceso de construcci\u00f3n, pruebas y despliegue para asegurar lanzamientos r\u00e1pidos y confiables.<\/li>\n<li><strong>Pruebas Automatizadas:<\/strong> Implementa pruebas unitarias, pruebas de integraci\u00f3n y pruebas de rendimiento para detectar problemas de manera temprana y mantener la integridad del sistema.<\/li>\n<\/ul>\n<h2>Conclusi\u00f3n<\/h2>\n<p>Un <strong>monolito modular<\/strong> ofrece un enfoque poderoso y pragm\u00e1tico para construir aplicaciones escalables y confiables sin la complejidad de los microservicios. Al combinar los principios del Dise\u00f1o Orientado al Dominio (DDD), una comunicaci\u00f3n interna efectiva y t\u00e9cnicas probadas de escalabilidad y confiabilidad, puedes crear un sistema que satisfaga las demandas del desarrollo de software moderno mientras mantienes la simplicidad y la manejabilidad.<\/p>\n<p>Con un dise\u00f1o cuidadoso y las pr\u00e1cticas correctas, un monolito modular puede servir como una base robusta para tu software, permiti\u00e9ndole crecer y evolucionar con las necesidades de tu negocio.<\/p>\n<p>(<i>Actualizado: 3 de septiembre 2024)<\/i><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>En una \u00e9poca enfocada en microservicios y metodolog\u00edas \u00e1giles en el desarrollo de software, creo que es importante revisitar y entender bien lo que son los monolitos modulares. Aunque los microservicios ofrecen claros beneficios en t\u00e9rminos de escalabilidad y modularidad, tambi\u00e9n introducen una complejidad significativa y problemas m\u00faltiples en t\u00e9rminos de despliegue, gesti\u00f3n y comunicaci\u00f3n. [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"set","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[1],"tags":[],"class_list":["post-1696","post","type-post","status-publish","format-standard","hentry","category-articulos"],"_links":{"self":[{"href":"https:\/\/idelogix.com\/index.php?rest_route=\/wp\/v2\/posts\/1696","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/idelogix.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/idelogix.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/idelogix.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/idelogix.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1696"}],"version-history":[{"count":26,"href":"https:\/\/idelogix.com\/index.php?rest_route=\/wp\/v2\/posts\/1696\/revisions"}],"predecessor-version":[{"id":1724,"href":"https:\/\/idelogix.com\/index.php?rest_route=\/wp\/v2\/posts\/1696\/revisions\/1724"}],"wp:attachment":[{"href":"https:\/\/idelogix.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1696"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/idelogix.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1696"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/idelogix.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1696"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}