{"id":124,"date":"2026-03-08T23:10:20","date_gmt":"2026-03-08T23:10:20","guid":{"rendered":"https:\/\/blog.rebalai.com\/es\/2026\/03\/08\/benchmarks-de-asistentes-de-cdigo-ia-pruebas-de-re\/"},"modified":"2026-03-18T22:00:23","modified_gmt":"2026-03-18T22:00:23","slug":"benchmarks-de-asistentes-de-cdigo-ia-pruebas-de-re","status":"publish","type":"post","link":"https:\/\/blog.rebalai.com\/es\/2026\/03\/08\/benchmarks-de-asistentes-de-cdigo-ia-pruebas-de-re\/","title":{"rendered":"Prob\u00e9 4 asistentes de c\u00f3digo IA durante 3 semanas: esto es lo que realmente encontr\u00e9"},"content":{"rendered":"<p>Hace tres semanas estaba depurando un error que solo aparec\u00eda en <a href=\"https:\/\/m.do.co\/c\/06956e5e2802\" title=\"DigitalOcean para Producci\u00f3n\" rel=\"nofollow sponsored\" target=\"_blank\">producci\u00f3n<\/a>. Un endpoint de FastAPI que devolv\u00eda <a href=\"https:\/\/blog.rebalai.com\/es\/2026\/03\/09\/postgresql-performance-tuning-what-i-learned-optim\/\" title=\"Datos de\">datos de<\/a> paginaci\u00f3n inconsistentes cuando el usuario ordenaba por m\u00faltiples columnas simult\u00e1neamente. Nuestro ORM (SQLAlchemy 2.0.36) generaba queries distintas dependiendo de si el resultado del cach\u00e9 era un objeto nuevo o uno hidratado. Cl\u00e1sico.<\/p>\n<p>Lo que me llam\u00f3 la atenci\u00f3n no fue el bug en s\u00ed \u2014 ese tipo de problema lo he visto mil veces \u2014 sino la diferencia brutal entre c\u00f3mo me ayudaron los distintos asistentes <a href=\"https:\/\/blog.rebalai.com\/es\/2026\/03\/08\/construyendo-pipelines-de-ia-en-produccin-leccione\/\" title=\"de IA\">de IA<\/a> mientras lo depuraba. Uno me dio exactamente el c\u00f3digo que necesitaba <a href=\"https:\/\/blog.rebalai.com\/es\/2026\/03\/05\/claude-vs-gpt-4o-vs-gemini-20-qu-modelo-de-ia-usar\/\" title=\"en el\">en el<\/a> segundo intento. Otro estuvo dando vueltas en c\u00edrculos durante diez minutos. Y eso me hizo pensar: \u00bfcu\u00e1nto de <a href=\"https:\/\/blog.rebalai.com\/es\/2026\/03\/09\/configuracin-de-github-actions-para-aplicaciones-p\/\" title=\"lo que\">lo que<\/a> creemos sobre estos asistentes viene de demos pulidas versus uso real?<\/p>\n<p>As\u00ed que pas\u00e9 las siguientes tres semanas haciendo pruebas sistem\u00e1ticas. <a href=\"https:\/\/blog.rebalai.com\/es\/2026\/03\/05\/claude-vs-gpt-4o-vs-gemini-20-qu-modelo-de-ia-usar\/\" title=\"Trabajo en\">Trabajo en<\/a> un equipo de cuatro personas construyendo una plataforma de an\u00e1lisis B2B \u2014 stack principal: FastAPI + React + PostgreSQL, deployado en <a href=\"https:\/\/aws.amazon.com\/?tag=synsun0f-20\" title=\"Amazon Web Services (AWS) Cloud Platform\" rel=\"nofollow sponsored\" target=\"_blank\">AWS<\/a>. Us\u00e9 tareas de mi backlog normal, no ejercicios inventados.<\/p>\n<p>Los candidatos: <strong>GitHub Copilot<\/strong> (con el backend de Claude Sonnet 4.5 habilitado desde el panel de configuraci\u00f3n), <strong>Cursor<\/strong> 0.47, <strong>Claude Code<\/strong> CLI (tambi\u00e9n Sonnet 4.5), y <strong>Windsurf<\/strong> 1.9.2.<\/p>\n<hr \/>\n<h2>C\u00f3mo dise\u00f1\u00e9 las pruebas para que importaran<\/h2>\n<p>Lo primero que descart\u00e9 fueron los benchmarks de autocompletado de funciones aisladas. HumanEval y SWE-bench son \u00fatiles para comparar modelos base, pero no me dicen si un asistente me va a ayudar un martes por la tarde con un servicio que tiene 4.000 l\u00edneas de historia y dependencias raras.<\/p>\n<p>Defin\u00ed cuatro categor\u00edas de tareas:<\/p>\n<ol>\n<li><strong>Comprensi\u00f3n de contexto amplio<\/strong> \u2014 darle un m\u00f3dulo de 800+ l\u00edneas y pedirle que a\u00f1ada una feature que respete los patrones existentes<\/li>\n<li><strong>Depuraci\u00f3n con informaci\u00f3n parcial<\/strong> \u2014 pegarle un stack trace y el fragmento <a href=\"https:\/\/blog.rebalai.com\/es\/2026\/03\/05\/github-copilot-vs-cursor-vs-codeium-el-mejor-asist\/\" title=\"de C\u00f3digo\">de c\u00f3digo<\/a> relevante, sin el contexto completo del repo<\/li>\n<li><strong>Refactoring con restricciones<\/strong> \u2014 &#8220;cambia esto sin romper la API p\u00fablica, y sin cambiar los tests existentes&#8221;<\/li>\n<li><strong>Generaci\u00f3n de tests<\/strong> \u2014 escribir tests de integraci\u00f3n para c\u00f3digo legacy con acoplamiento fuerte<\/li>\n<\/ol>\n<p>Tres tareas reales distintas por categor\u00eda. Evaluaci\u00f3n subjetiva (lo s\u00e9, lo s\u00e9) en tres dimensiones: si el primer intento era usable directamente, cu\u00e1ntas iteraciones necesit\u00e9, y si introdujo bugs que no estaban antes. No med\u00ed velocidad de tokens por segundo. No me importa que sea r\u00e1pido si el output est\u00e1 mal.<\/p>\n<hr \/>\n<h2>Comprensi\u00f3n de contexto: aqu\u00ed es donde se separan los buenos de los mediocres<\/h2>\n<p>La prueba que m\u00e1s diferencia marc\u00f3 fue esta: tengo un m\u00f3dulo de exportaci\u00f3n <a href=\"https:\/\/blog.rebalai.com\/es\/2026\/03\/08\/rag-profundo-estrategias-de-chunking-bases-de-dato\/\" title=\"de Datos\">de datos<\/a> (<code>data_export\/pipeline.py<\/code>, ~1.100 l\u00edneas) que usa un patr\u00f3n de plugins registrados via decoradores. Le ped\u00ed a cada asistente que a\u00f1adiera soporte para un nuevo formato de exportaci\u00f3n siguiendo exactamente el mismo patr\u00f3n.<\/p>\n<pre><code class=\"language-python\"># Patr\u00f3n existente que el asistente necesitaba reconocer y replicar\n@export_registry.register(&quot;csv&quot;)\nclass CSVExporter(BaseExporter):\n    &quot;&quot;&quot;\n    Exporta datos en formato CSV con soporte para encodings custom.\n    El registry inyecta config via __init_subclass__ \u2014 no tocar ese flujo.\n    &quot;&quot;&quot;\n\n    def export(self, queryset: QuerySet, options: ExportOptions) -&gt; BytesIO:\n        # La l\u00f3gica de chunking est\u00e1 en BaseExporter.stream_chunks()\n        # Los exporters solo deben implementar _serialize_chunk()\n        buffer = BytesIO()\n        for chunk in self.stream_chunks(queryset, options.chunk_size):\n            buffer.write(self._serialize_chunk(chunk, options))\n        return buffer\n\n    def _serialize_chunk(self, data: list[dict], options: ExportOptions) -&gt; bytes:\n        # ... implementaci\u00f3n real omitida por brevedad\n<\/code><\/pre>\n<p><strong>Claude Code<\/strong> (CLI): <a href=\"https:\/\/blog.rebalai.com\/es\/2026\/03\/05\/claude-vs-gpt-4o-vs-gemini-20-qu-modelo-de-ia-usar\/\" title=\"en el\">En el<\/a> segundo intento \u2014 el primero le falt\u00f3 el decorador de registro \u2014 produjo un exporter de Parquet que usaba <code>stream_chunks()<\/code> correctamente y respet\u00f3 la convenci\u00f3n de <code>__init_subclass__<\/code>. Tuve que cambiar dos l\u00edneas. Tiempo total: unos 6 minutos.<\/p>\n<p><strong>Cursor<\/strong>: El resultado fue funcionalmente correcto pero ignor\u00f3 el patr\u00f3n de <code>stream_chunks()<\/code> y escribi\u00f3 su propio loop de chunking desde cero. Funciona, pero ahora tengo deuda t\u00e9cnica nueva porque si cambio <code>BaseExporter<\/code>, ese exporter no hereda el cambio.<\/p>\n<p><strong>Copilot<\/strong>: Similar a Cursor. Entiende el decorador pero no entiende <a href=\"https:\/\/blog.rebalai.com\/es\/2026\/03\/09\/arquitectura-impulsada-por-eventos-2026-por-qu-los\/\" title=\"Por Qu\u00e9\">por qu\u00e9<\/a> existe <code>_serialize_chunk()<\/code> como m\u00e9todo separado. El primer intento puso toda la l\u00f3gica en <code>export()<\/code>.<\/p>\n<p><strong>Windsurf<\/strong>: Sorpresa positiva \u2014 capt\u00f3 el patr\u00f3n mejor de <a href=\"https:\/\/blog.rebalai.com\/es\/2026\/03\/09\/configuracin-de-github-actions-para-aplicaciones-p\/\" title=\"lo que\">lo que<\/a> esperaba. El resultado estaba al mismo nivel que Claude Code, aunque le tom\u00f3 m\u00e1s iteraciones llegar ah\u00ed (cuatro intercambios vs. dos).<\/p>\n<p>Para c\u00f3digo con patrones internos no obvios, la ventana de contexto y c\u00f3mo el modelo la procesa importa m\u00e1s que la velocidad de autocompletado. Si tu codebase tiene convenciones propias \u2014 y <a href=\"https:\/\/blog.rebalai.com\/es\/2026\/03\/08\/edge-computing-en-2026-por-qu-los-desarrolladores\/\" title=\"despu\u00e9s de dos\">despu\u00e9s de dos<\/a> a\u00f1os cualquier codebase las tiene \u2014 vas a notar la diferencia.<\/p>\n<hr \/>\n<h2>Depuraci\u00f3n con informaci\u00f3n parcial: el escenario del stack trace <a href=\"https:\/\/blog.rebalai.com\/es\/2026\/03\/09\/setting-up-github-actions-for-python-applications\/\" title=\"a las\">a las<\/a> 11pm<\/h2>\n<p>Este es el caso de uso que m\u00e1s me aparece en la pr\u00e1ctica. Algo explota en staging, tengo el traceback y el c\u00f3digo relevante, no tengo tiempo para dar contexto completo.<\/p>\n<p>Us\u00e9 tres bugs reales del \u00faltimo mes. El m\u00e1s interesante para ilustrar: un <code>RecursionError<\/code> que ocurr\u00eda en la serializaci\u00f3n de Pydantic v2 cuando un modelo ten\u00eda referencias circulares a trav\u00e9s de un campo <code>Optional<\/code> con <code>model_rebuild()<\/code>.<\/p>\n<p>Look, aqu\u00ed comet\u00ed un error que me cost\u00f3 tiempo: asum\u00ed que cualquier asistente entender\u00eda la diferencia entre Pydantic v1 y v2 sin que yo lo especificara. Copilot me dio tres soluciones distintas que funcionar\u00edan en v1 pero que en v2 est\u00e1n deprecated o directamente eliminadas \u2014 <code>validator<\/code> en lugar de <code>field_validator<\/code>, <code>__fields__<\/code> en lugar de <code>model_fields<\/code>. Errores que indican que el modelo est\u00e1 mezclando conocimiento de ambas versiones. Si no conoces bien Pydantic puedes no darte cuenta y gastar media hora implementando algo que no va a funcionar. Desde entonces siempre especifico la versi\u00f3n exacta en mi prompt inicial. Deber\u00eda haberlo hecho desde el principio.<\/p>\n<p>Claude Code fue el que mejor naveg\u00f3 este tipo de ambig\u00fcedad \u2014 en parte, creo, porque al ser CLI con acceso al repo completo puede leer el <code>pyproject.toml<\/code> y verificar qu\u00e9 versi\u00f3n tienes instalada antes de responder. Windsurf tiene algo similar. <a href=\"https:\/\/blog.rebalai.com\/es\/2026\/03\/08\/alternativas-a-github-copilot-en-2026-cursor-codei\/\" title=\"Copilot en\">Copilot en<\/a> modo chat no hace eso por defecto.<\/p>\n<p>Versiones exactas <a href=\"https:\/\/blog.rebalai.com\/es\/2026\/03\/05\/claude-vs-gpt-4o-vs-gemini-20-qu-modelo-de-ia-usar\/\" title=\"en el\">en el<\/a> contexto, siempre. Y si el asistente tiene acceso a tus archivos de configuraci\u00f3n del proyecto, aprov\u00e9chalo \u2014 es informaci\u00f3n que cambia completamente la calidad de la respuesta.<\/p>\n<hr \/>\n<h2>Refactoring con restricciones: donde la mayor\u00eda falla<\/h2>\n<p>Esta fue la categor\u00eda m\u00e1s frustrante de probar porque los asistentes tienden a ser demasiado ambiciosos. Les pides que refactoricen una funci\u00f3n y te reescriben el m\u00f3dulo entero.<\/p>\n<p>La tarea: ten\u00edamos un servicio de notificaciones (<code>notifications\/dispatcher.py<\/code>) con una funci\u00f3n de 120 l\u00edneas que hac\u00eda demasiadas cosas. Quer\u00eda extraer la l\u00f3gica de throttling a una clase separada sin cambiar la firma p\u00fablica de la funci\u00f3n ni los tests existentes \u2014 27 tests de integraci\u00f3n que tardaban 40 segundos en correr y que no quer\u00eda tocar.<\/p>\n<pre><code class=\"language-python\"># La firma que NO pod\u00eda cambiar:\nasync def dispatch_notification(\n    user_id: int,\n    event: NotificationEvent,\n    channels: list[NotificationChannel],\n    *,\n    priority: Priority = Priority.NORMAL,\n    metadata: dict | None = None\n) -&gt; DispatchResult:\n    ...\n<\/code><\/pre>\n<p>Copilot y Cursor \u2014 con distintos grados de severidad \u2014 ambos sugirieron cambios que habr\u00edan roto la API. Cursor propuso convertir <code>channels<\/code> de <code>list<\/code> a <code>*args<\/code>, lo cual parece menor pero rompe cualquier c\u00f3digo que llame a la funci\u00f3n con una lista ya construida. Copilot a\u00f1adi\u00f3 un par\u00e1metro nuevo sin default, <a href=\"https:\/\/blog.rebalai.com\/es\/2026\/03\/09\/configuracin-de-github-actions-para-aplicaciones-p\/\" title=\"lo que\">lo que<\/a> obviamente rompe todo.<\/p>\n<p>Claude Code respet\u00f3 la restricci\u00f3n. Windsurf tambi\u00e9n la respet\u00f3, aunque su implementaci\u00f3n del throttler ten\u00eda un bug sutil: usaba el <code>user_id<\/code> como \u00fanica clave de throttle ignorando el <code>channel<\/code>, as\u00ed que si un usuario recib\u00eda muchas notificaciones por email, tambi\u00e9n quedaba throttled para SMS. Tom\u00f3 un intercambio adicional para corregirlo.<\/p>\n<p>Hay algo que no esperaba: cuando le dije expl\u00edcitamente a Cursor &#8220;no cambies la firma p\u00fablica de dispatch_notification ni su comportamiento observable&#8221;, mejor\u00f3 significativamente. La precisi\u00f3n de la instrucci\u00f3n importa m\u00e1s de <a href=\"https:\/\/blog.rebalai.com\/es\/2026\/03\/09\/configuracin-de-github-actions-para-aplicaciones-p\/\" title=\"lo que\">lo que<\/a> pensaba. No es que Cursor no pueda hacer refactoring correcto \u2014 es que por defecto asume que tienes permiso de cambiar todo si no dices lo contrario.<\/p>\n<hr \/>\n<h2>Generaci\u00f3n de tests: el caso de uso m\u00e1s variable<\/h2>\n<p>La varianza aqu\u00ed es enorme dependiendo del tipo <a href=\"https:\/\/blog.rebalai.com\/es\/2026\/03\/05\/github-copilot-vs-cursor-vs-codeium-el-mejor-asist\/\" title=\"de C\u00f3digo\">de c\u00f3digo<\/a> que est\u00e9s testeando. El patr\u00f3n consistente: todos los asistentes son buenos generando tests para c\u00f3digo nuevo y bien estructurado, todos son mediocres con c\u00f3digo legacy y dependencias globales. <a href=\"https:\/\/blog.rebalai.com\/es\/2026\/03\/09\/webassembly-in-2026-where-it-actually-makes-sense\/\" title=\"Tiene Sentido\">Tiene sentido<\/a> \u2014 si el c\u00f3digo es dif\u00edcil de testear, tambi\u00e9n es dif\u00edcil de razonar sobre \u00e9l desde fuera.<\/p>\n<p>Lo que diferencia a los asistentes es qu\u00e9 hacen cuando el c\u00f3digo legacy es problem\u00e1tico: \u00bfte lo dicen, o simplemente generan tests que parecen buenos pero que en realidad no testean <a href=\"https:\/\/blog.rebalai.com\/es\/2026\/03\/09\/configuracin-de-github-actions-para-aplicaciones-p\/\" title=\"lo que\">lo que<\/a> crees?<\/p>\n<p>Claude Code fue el \u00fanico que en dos ocasiones distintas me dijo algo del estilo de &#8220;esta funci\u00f3n tiene un side effect en un singleton global, los tests que genere van a ser fr\u00e1giles si no mocks eso primero \u2014 \u00bfquieres que lo haga?&#8221;. Eso es \u00fatil. El resto simplemente gener\u00f3 los tests y me los present\u00f3 como si fueran correctos. Mi muestra es peque\u00f1a, pero fue suficientemente consistente como para notarlo.<\/p>\n<hr \/>\n<h2>Mi recomendaci\u00f3n real \u2014 sin rodeos<\/h2>\n<p><strong>Si trabajas principalmente <a href=\"https:\/\/blog.rebalai.com\/es\/2026\/03\/05\/claude-vs-gpt-4o-vs-gemini-20-qu-modelo-de-ia-usar\/\" title=\"en el\">en el<\/a> IDE y tu codebase es de tama\u00f1o medio (&lt; 100k l\u00edneas)<\/strong>: Cursor sigue siendo la opci\u00f3n m\u00e1s integrada y la experiencia general es mejor. El autocompletado <a href=\"https:\/\/blog.rebalai.com\/es\/2026\/03\/05\/claude-vs-gpt-4o-vs-gemini-20-qu-modelo-de-ia-usar\/\" title=\"en el\">en el<\/a> editor es m\u00e1s r\u00e1pido y natural que las alternativas. Pero cambia el modelo backend a Claude Sonnet 4.5 \u2014 la diferencia en calidad de output justifica el costo adicional y la latencia es aceptable.<\/p>\n<p><strong>Si haces mucho trabajo de arquitectura, refactoring grande, o depuraci\u00f3n de bugs dif\u00edciles<\/strong>: Claude Code CLI. La capacidad de leer el repo completo, ejecutar comandos y mantener contexto a trav\u00e9s de sesiones largas le da una ventaja real en tareas complejas. No es tan c\u00f3modo como un IDE integrado \u2014 la curva de adaptaci\u00f3n existe \u2014 pero para trabajo de alta complejidad los resultados son notablemente mejores.<\/p>\n<p><strong>Copilot<\/strong>: Honestamente, si ya tienes la suscripci\u00f3n <a href=\"https:\/\/blog.rebalai.com\/es\/2026\/03\/09\/configuracin-de-github-actions-para-aplicacione\/\" title=\"de GitHub\">de GitHub<\/a> y tu caso de uso principal es autocompletado r\u00e1pido y sugerencias inline, funciona bien. Para razonamiento complejo o comprensi\u00f3n <a href=\"https:\/\/blog.rebalai.com\/es\/2026\/03\/05\/github-copilot-vs-cursor-vs-codeium-el-mejor-asist\/\" title=\"de C\u00f3digo\">de c\u00f3digo<\/a> con patrones no est\u00e1ndar, qued\u00f3 por detr\u00e1s consistentemente. La integraci\u00f3n del backend de Claude en Copilot es relativamente reciente \u2014 quiz\u00e1s mejore.<\/p>\n<p><strong>Windsurf<\/strong>: La sorpresa positiva del grupo. <a href=\"https:\/\/blog.rebalai.com\/es\/2026\/03\/09\/serverless-vs-containers-in-2026-a-practical-decis\/\" title=\"para Equipos\">Para equipos<\/a> que no quieren pagar por Cursor Pro y quieren algo m\u00e1s capaz que el Copilot est\u00e1ndar, es una opci\u00f3n seria. El modelo Cascade que usan para el contexto de repo funciona mejor de <a href=\"https:\/\/blog.rebalai.com\/es\/2026\/03\/09\/configuracin-de-github-actions-para-aplicaciones-p\/\" title=\"lo que\">lo que<\/a> esperaba dado el precio.<\/p>\n<p>Una cosa que no cambiar\u00eda independientemente del asistente: aprende a escribir buenos prompts para tu contexto espec\u00edfico. La diferencia entre &#8220;refactoriza esto&#8221; y &#8220;refactoriza la funci\u00f3n X para extraer la l\u00f3gica de Y a una clase separada, sin cambiar la firma p\u00fablica, manteniendo compatibilidad con los tests en test_dispatcher.py&#8221; es la diferencia entre un resultado in\u00fatil y uno que puedes usar directamente. El asistente es bueno. No es adivino.<\/p>\n<p>Estos resultados reflejan mi stack (FastAPI\/Python\/React), mi estilo de trabajo, y las tareas que tengo en mi backlog. Si trabajas en Rust o en un monorepo de Java de 2 millones de l\u00edneas, probablemente el ranking cambiar\u00eda. Pero la metodolog\u00eda \u2014 pru\u00e9balo con tu c\u00f3digo real, no con demos \u2014 aplica igual.<\/p>\n<p><!-- Reviewed: 2026-03-07 | Status: ready_to_publish | Changes: removed AI filler transitions, integrated \"Takeaway concreto\" label into paragraph flow, cut meta-commentary opener in tests section, trimmed redundant closing sentence in intro, varied paragraph lengths throughout, softened overly parallel structure in recommendations section --><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Hace tres semanas estaba depurando un error que solo aparec\u00eda en producci\u00f3n .<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","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":"","ast-disable-related-posts":"","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":"default","ast-page-background-enabled":"default","ast-page-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":"","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-4)","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-4)","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-4)","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-124","post","type-post","status-publish","format-standard","hentry","category-general"],"_links":{"self":[{"href":"https:\/\/blog.rebalai.com\/es\/wp-json\/wp\/v2\/posts\/124","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.rebalai.com\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.rebalai.com\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.rebalai.com\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.rebalai.com\/es\/wp-json\/wp\/v2\/comments?post=124"}],"version-history":[{"count":14,"href":"https:\/\/blog.rebalai.com\/es\/wp-json\/wp\/v2\/posts\/124\/revisions"}],"predecessor-version":[{"id":588,"href":"https:\/\/blog.rebalai.com\/es\/wp-json\/wp\/v2\/posts\/124\/revisions\/588"}],"wp:attachment":[{"href":"https:\/\/blog.rebalai.com\/es\/wp-json\/wp\/v2\/media?parent=124"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.rebalai.com\/es\/wp-json\/wp\/v2\/categories?post=124"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.rebalai.com\/es\/wp-json\/wp\/v2\/tags?post=124"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}