{"id":16035,"date":"2025-07-04T10:06:42","date_gmt":"2025-07-04T08:06:42","guid":{"rendered":"https:\/\/www.hiberus.com\/crecemos-contigo\/?p=16035"},"modified":"2025-07-04T09:16:02","modified_gmt":"2025-07-04T07:16:02","slug":"que-es-blazor","status":"publish","type":"post","link":"https:\/\/www.hiberus.com\/crecemos-contigo\/que-es-blazor\/","title":{"rendered":"Qu\u00e9 es Blazor y c\u00f3mo funciona"},"content":{"rendered":"<p><span data-contrast=\"auto\">De todos es bien conocido que <\/span><b><span data-contrast=\"auto\">el lenguaje de programaci\u00f3n predominante<\/span><\/b><span data-contrast=\"auto\"> en las aplicaciones web interactivas <\/span><b><span data-contrast=\"auto\">es\u202fJavascript<\/span><\/b><span data-contrast=\"auto\">\u202fy, si no, es cualquier framework basado en este. Para los desarrolladores .NET esto ha supuesto siempre una barrera para poder crear aplicaciones modernas y r\u00e1pidas. Los reyes de las aplicaciones web enriquecidas est\u00e1 en manos de los single page applications (SPAs) lo que hace que, de manera forzosa, los equipos .NET deban aprender un lenguaje fuera de su dominio (React, <\/span><a href=\"https:\/\/www.hiberus.com\/crecemos-contigo\/que-es-angular-y-para-que-sirve\/\"><span data-contrast=\"none\">Angular<\/span><\/a><span data-contrast=\"auto\">, Vue.js, etc.).<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">Pero \u00bfy si te digo que <\/span><b><span data-contrast=\"auto\">existe un framework capaz de alcanzar toda la potencia de un SPA<\/span><\/b><span data-contrast=\"auto\"> moderno, pero sin entrar en contacto con c\u00f3digo Javascript, s\u00f3lamente usando C#? Como habr\u00e1s intuido, esto es lo que nos va a ofrecer\u202f<\/span><b><span data-contrast=\"auto\">Blazor<\/span><\/b><span data-contrast=\"auto\">.<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-16067 aligncenter\" src=\"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2020\/11\/blazor.jpg\" alt=\"\" width=\"264\" height=\"220\" \/><\/p>\n<h2>\u00bfQu\u00e9 es Blazor?<\/h2>\n<p><span data-contrast=\"auto\">Blazor\u202fes un proyecto desarrollado por Microsoft creado para permitir\u202f<\/span><b><span data-contrast=\"auto\">crear SPAs \u00fanicamente usando lenguajes de programaci\u00f3n C# y Razor Pages<\/span><\/b><span data-contrast=\"auto\">, eliminando la necesidad de programar en Javascript o en frameworks derivados.<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">El objetivo de Microsoft est\u00e1 claro: entrar de manera directa en el mundo de los SPA a trav\u00e9s de Blazor, teniendo una\u202f<\/span><b><span data-contrast=\"auto\">curva de aprendizaje plana<\/span><\/b><span data-contrast=\"auto\">\u202fpara los desarrolladores .NET, abstrayendo la complejidad que requiere el tener que trabajar con frameworks Javascript. En consecuencia, se construir\u00e1n aplicaciones web enriquecidas usando \u00fanicamente HTML, CSS y C# en lugar de Javascript.<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">Vamos a ver los diferentes modelos de hospedaje que ofrece Blazor a continuaci\u00f3n<\/span><\/p>\n<h2>Modelos de hospedaje de Blazor<\/h2>\n<p><span data-contrast=\"auto\">Blazor presenta <strong>dos enfoques claramente diferenciados: Blazor Server y Blazor WebAssembly<\/strong>.\u00a0<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">Por un lado, <\/span><b><span data-contrast=\"auto\">Blazor Server se construye el DOM<\/span><\/b><span data-contrast=\"auto\"> que se ha de enviar al cliente desde el servidor. Es el modelo m\u00e1s tradicional, cuyo objetivo es sustituir el modelo Web Forms de .NET. <\/span><b><span data-contrast=\"auto\">Su principal fuerte es la\u202finteracci\u00f3n en tiempo real<\/span><\/b><span data-contrast=\"auto\">\u202fentre cliente y servidor a trav\u00e9s de\u202fSignalR.<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">Por otro lado, <\/span><b><span data-contrast=\"auto\">Blazor WebAssembly es un modelo SPA basado en WebAssembly<\/span><\/b><i><span data-contrast=\"auto\">,\u202f<\/span><\/i><span data-contrast=\"auto\">es decir,<\/span><b><span data-contrast=\"auto\">\u202fla construcci\u00f3n del DOM se realizar\u00e1 en el lado del cliente<\/span><\/b><span data-contrast=\"auto\">. Permite,\u202fa su vez, realizar operaciones en el lado del servidor, llamando a APIs para solicitar datos, con la intencionalidad de obtener informaci\u00f3n sensible que no se quiera calcular en el cliente.\u00a0<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-16052 size-full\" src=\"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2020\/11\/blazor-webassembly.png\" alt=\"Blazor WebAssembly\" width=\"784\" height=\"402\" srcset=\"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2020\/11\/blazor-webassembly.png 784w, https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2020\/11\/blazor-webassembly-300x154.png 300w, https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2020\/11\/blazor-webassembly-768x394.png 768w, https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2020\/11\/blazor-webassembly-360x185.png 360w\" sizes=\"auto, (max-width: 784px) 100vw, 784px\" \/><\/p>\n<p><b><span data-contrast=\"auto\">WebAssembly\u202f<\/span><\/b><span data-contrast=\"auto\">(conocido tambi\u00e9n por su abreviatura\u202fWasm)<\/span><b><span data-contrast=\"auto\"> es un est\u00e1ndar que permite\u202fejecutar c\u00f3digo binario en un navegador web<\/span><\/b><span data-contrast=\"auto\">\u202fpara ofrecer un rendimiento a priori mayor que Javascript.<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">El servidor web se encargar\u00e1 de enviar al navegador cliente que realice una petici\u00f3n a nuestra aplicaci\u00f3n las librer\u00edas directamente compiladas (dlls), y el navegador a trav\u00e9s de esta tecnolog\u00eda sabr\u00e1 interpretar lo que queremos ejecutar. Como consecuencia,\u202f<\/span><b><span data-contrast=\"auto\">el servidor web se liberar\u00e1 de procesar l\u00f3gica<\/span><\/b><span data-contrast=\"auto\">, ya que se realizar\u00e1 en el cliente.<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">Con esta aproximaci\u00f3n, <\/span><b><span data-contrast=\"auto\">se sobreentiende la necesidad de mantener un back-end<\/span><\/b><span data-contrast=\"auto\"> con el procesamiento de informaci\u00f3n que no se quiera llevar al cliente. Recordemos que las librer\u00edas compiladas son f\u00e1cilmente decompilables, exponiendo nuestro c\u00f3digo fuente a cualquier usuario de nuestra aplicaci\u00f3n.<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<h3>JS Interop<\/h3>\n<p><span data-contrast=\"auto\">\u00bfY esto quiere decir que ya no podemos usar Javascript? Nada m\u00e1s lejos de la realidad. Existen multitud de librer\u00edas de terceros ya escritas en Javascript, que podemos seguir utilizando tambi\u00e9n en Blazor. Para ello, se ofrece la posibilidad de hacer trabajar de manera conjunta a Javascript y C# a trav\u00e9s del servicio\u202fIJSRuntime.<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">Esto quiere decir que, sin salirnos del marco .NET,\u202f<\/span><b><span data-contrast=\"auto\">se podr\u00e1n realizar peticiones a funciones escritas en Javascript<\/span><\/b><span data-contrast=\"auto\">, pasando los datos que se requieran a dichas funciones.<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<h2>C\u00f3mo usar Blazor: ejemplo real<\/h2>\n<p><span data-contrast=\"auto\">Y una vez entendidos los conceptos, vamos a ver un ejemplo de uso real en el que Blazor puede ser una soluci\u00f3n m\u00e1s que v\u00e1lida. Vamos a plantear una aplicaci\u00f3n web de preguntas y respuestas. Para ello, vamos a necesitar:<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"2\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;multilevel&quot;}\" aria-setsize=\"-1\" data-aria-posinset=\"1\" data-aria-level=\"1\"><span data-contrast=\"auto\">Host donde alojar la aplicaci\u00f3n.<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<\/ul>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"2\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;multilevel&quot;}\" aria-setsize=\"-1\" data-aria-posinset=\"2\" data-aria-level=\"1\"><span data-contrast=\"auto\">Base de datos donde almacenar las preguntas y respuestas.<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<\/ul>\n<p><span data-contrast=\"auto\">Sabiendo <\/span><a href=\"https:\/\/www.hiberus.com\/crecemos-contigo\/azure-la-plataforma-cloud-de-microsoft\/\"><span data-contrast=\"none\">qu\u00e9 es Microsoft Azure<\/span><\/a><span data-contrast=\"auto\">, tenemos que seleccionarlo como proveedor de la infraestructura. Concretamente usaremos los servicios:<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"3\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;multilevel&quot;}\" aria-setsize=\"-1\" data-aria-posinset=\"1\" data-aria-level=\"1\"><b><span data-contrast=\"auto\">App Service<\/span><\/b><span data-contrast=\"auto\">\u202fpara alojar la aplicaci\u00f3n<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<\/ul>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"3\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;multilevel&quot;}\" aria-setsize=\"-1\" data-aria-posinset=\"2\" data-aria-level=\"1\"><b><span data-contrast=\"auto\">SQL database<\/span><\/b><span data-contrast=\"auto\">\u202f(SQL server) para la base de datos<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-16048 size-full\" src=\"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2020\/11\/blazor-diagram-azure.png\" alt=\"Diagrama App Blazor en Azure\" width=\"785\" height=\"406\" srcset=\"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2020\/11\/blazor-diagram-azure.png 785w, https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2020\/11\/blazor-diagram-azure-300x155.png 300w, https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2020\/11\/blazor-diagram-azure-768x397.png 768w, https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2020\/11\/blazor-diagram-azure-360x186.png 360w\" sizes=\"auto, (max-width: 785px) 100vw, 785px\" \/><\/p>\n<p><span data-contrast=\"auto\">Recordemos que los proveedores de servicios en la nube\u202f<\/span><b><span data-contrast=\"auto\">suelen cobrar estos servicios por uso de recursos<\/span><\/b><span data-contrast=\"auto\">\u202f(CPU, memoria, etc), as\u00ed que\u2026 <\/span><b><span data-contrast=\"auto\">\u00bfQu\u00e9 mejor que usar Blazor WebAssembly para delegar estos procesamientos <\/span><\/b><span data-contrast=\"auto\">de c\u00e1lculos al cliente y tratar de minimizar la computaci\u00f3n en servidor?<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">El framework de .NET que usaremos ser\u00e1\u202f<\/span><b><span data-contrast=\"auto\">.NET Core 3.1<\/span><\/b><span data-contrast=\"auto\">, ya que est\u00e1 soportado tanto en App Service como en Blazor.<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">Una vez clara la infraestructura, vamos a profundizar en la arquitectura de la aplicaci\u00f3n:<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"4\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;multilevel&quot;}\" aria-setsize=\"-1\" data-aria-posinset=\"1\" data-aria-level=\"1\"><b><span data-contrast=\"auto\">Front end<\/span><\/b><span data-contrast=\"auto\">: en esta capa guardaremos los archivos de Razor (cshtml), HTML, CSS, Javascript (en caso de requerirlo), l\u00f3gica de pintado a trav\u00e9s de C# (por ejemplo, saber qu\u00e9 pregunta toca pintar a un usuario espec\u00edfico).<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<\/ul>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"4\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;multilevel&quot;}\" aria-setsize=\"-1\" data-aria-posinset=\"2\" data-aria-level=\"1\"><b><span data-contrast=\"auto\">Back end<\/span><\/b><span data-contrast=\"auto\">: en este caso, tenemos c\u00e1lculos que no queremos que se realicen en el cliente (por ejemplo, comprobar si una respuesta es correcta o no), as\u00ed que contaremos con un proyecto de WebAPI para recibir peticiones y procesarlas convenientemente.<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<\/ul>\n<p><span data-contrast=\"auto\">Como vemos, esto nos permite desacoplar de manera clara el back del front, pudiendo tener un proyecto limpio y bien estructurado.<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">En la siguiente imagen, vemos la estructura de la soluci\u00f3n, denominada\u202f<\/span><i><span data-contrast=\"auto\">AnalogyGame\u202f<\/span><\/i><span data-contrast=\"auto\">(como he mencionado, \u00a1esto es una aplicaci\u00f3n real productiva!):<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-16070 size-full\" src=\"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2020\/11\/blazor-sln.png\" alt=\"Soluci\u00f3n de la aplicaci\u00f3n real\" width=\"700\" height=\"347\" srcset=\"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2020\/11\/blazor-sln.png 700w, https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2020\/11\/blazor-sln-300x149.png 300w, https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2020\/11\/blazor-sln-360x178.png 360w\" sizes=\"auto, (max-width: 700px) 100vw, 700px\" \/><\/p>\n<p>Veamos m\u00e1s en detalle qu\u00e9 contiene cada proyecto.<\/p>\n<h3><span class=\"TextRun SCXW168283701 BCX0\" lang=\"ES-ES\" xml:lang=\"ES-ES\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW168283701 BCX0\" data-ccp-parastyle=\"heading 3\">Front <\/span><span class=\"NormalTextRun SpellingErrorV2Themed SCXW168283701 BCX0\" data-ccp-parastyle=\"heading 3\">end<\/span><span class=\"NormalTextRun SCXW168283701 BCX0\" data-ccp-parastyle=\"heading 3\"> con <\/span><span class=\"NormalTextRun SpellingErrorV2Themed SCXW168283701 BCX0\" data-ccp-parastyle=\"heading 3\">Blazor<\/span><\/span><span class=\"EOP SCXW168283701 BCX0\" data-ccp-props=\"{&quot;134245418&quot;:true,&quot;134245529&quot;:true,&quot;335559738&quot;:160,&quot;335559739&quot;:80}\">\u00a0<\/span><\/h3>\n<p><span data-contrast=\"auto\">Para este desarrollo, plantearemos 3 principales bloques:<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"5\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;multilevel&quot;}\" aria-setsize=\"-1\" data-aria-posinset=\"1\" data-aria-level=\"1\"><b><span data-contrast=\"auto\">Pages\/Components\/Shared<\/span><\/b><span data-contrast=\"auto\">: ficheros razor estructurados en p\u00e1ginas, componentes para compartir entre diferentes p\u00e1ginas y layouts gen\u00e9ricos. Predomina el HTML y CSS para la construcci\u00f3n del DOM. El c\u00f3mo se alimentar\u00e1 este DOM se realizar\u00e1 a trav\u00e9s de C#, usando\u202f<\/span><i><span data-contrast=\"auto\">code-behind\u202f<\/span><\/i><span data-contrast=\"auto\">o directamente escribiendo el c\u00f3digo C# en la propia p\u00e1gina Razor. Otro de los objetivos de esta capa es comunicar con los servicios que veremos en el siguiente punto.<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<\/ul>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"5\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;multilevel&quot;}\" aria-setsize=\"-1\" data-aria-posinset=\"2\" data-aria-level=\"1\"><b><span data-contrast=\"auto\">Services<\/span><\/b><span data-contrast=\"auto\">: servicios donde encontraremos la l\u00f3gica de la aplicaci\u00f3n del cliente. Por hacer la analog\u00eda, ser\u00edan los ficheros Javascript en cualquier otro escenario, pero en Blazor ser\u00e1n ficheros C# y por tanto escritos en C#.<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<\/ul>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"5\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;multilevel&quot;}\" aria-setsize=\"-1\" data-aria-posinset=\"3\" data-aria-level=\"1\"><b><span data-contrast=\"auto\">wwwroot<\/span><\/b><span data-contrast=\"auto\">: ficheros de recursos css, js, images, etc. Contiene el punto de entrada a la aplicaci\u00f3n por parte del cliente web, normalmente a trav\u00e9s del fichero index.html. En dicho punto de entrada se establecer\u00e1 el tag HTML \u201capp\u201d, que ser\u00e1 el componente ra\u00edz del cual se cargar\u00e1n el resto de componentes Blazor.<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<\/ul>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"5\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;multilevel&quot;}\" aria-setsize=\"-1\" data-aria-posinset=\"4\" data-aria-level=\"1\"><b><span data-contrast=\"auto\">Model<\/span><\/b><span data-contrast=\"auto\">: modelos de datos que se usar\u00e1n entre los servicios y los diferentes ficheros de Razor.<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<\/ul>\n<h3>Back end<\/h3>\n<p><span data-contrast=\"auto\">En este caso, se optar\u00e1 por una arquitectura organizada mediante <\/span><a href=\"https:\/\/www.hiberus.com\/crecemos-contigo\/domain-driven-design-ddd\/\"><span data-contrast=\"none\">DDD (<\/span><i><span data-contrast=\"none\">domain driven design<\/span><\/i><span data-contrast=\"none\">)<\/span><\/a><span data-contrast=\"auto\"> y para el acceso a la base de datos utilizaremos\u202f<\/span><i><span data-contrast=\"auto\">Entity Framework Core<\/span><\/i><span data-contrast=\"auto\">. Por ello, tendremos 3 proyectos:<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"6\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;multilevel&quot;}\" aria-setsize=\"-1\" data-aria-posinset=\"1\" data-aria-level=\"1\"><b><span data-contrast=\"auto\">Server<\/span><\/b><span data-contrast=\"auto\">: punto de entrada de nuestra aplicaci\u00f3n, donde estar\u00e1n alojados los controladores.<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<\/ul>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"6\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;multilevel&quot;}\" aria-setsize=\"-1\" data-aria-posinset=\"2\" data-aria-level=\"1\"><b><span data-contrast=\"auto\">Domain<\/span><\/b><span data-contrast=\"auto\">: l\u00f3gica de negocio de nuestra aplicaci\u00f3n, donde residen a su vez las entidades del dominio.<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<\/ul>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"6\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;multilevel&quot;}\" aria-setsize=\"-1\" data-aria-posinset=\"3\" data-aria-level=\"1\"><b><span data-contrast=\"auto\">Infrastructure<\/span><\/b><span data-contrast=\"auto\">: recursos necesarios para recuperar la informaci\u00f3n de la base de datos.<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<\/ul>\n<h3>Shared<\/h3>\n<p>Adem\u00e1s, plantearemos un proyecto transversal, compartido entre el cliente y el servidor, que ser\u00e1n los DTOs de comunicaci\u00f3n entre los servicios del proyecto del front end y los controladores del back end.<\/p>\n<h3>Desplegar la aplicaci\u00f3n<\/h3>\n<p><span class=\"TextRun SCXW62092685 BCX0\" lang=\"ES-ES\" xml:lang=\"ES-ES\" data-contrast=\"auto\"><span class=\"NormalTextRun SCXW62092685 BCX0\">La manera m\u00e1s sencilla de desplegar nuestra aplicaci\u00f3n en Azure es\u202f<\/span><\/span><span class=\"TextRun SCXW62092685 BCX0\" lang=\"ES-ES\" xml:lang=\"ES-ES\" data-contrast=\"auto\"><span class=\"NormalTextRun SCXW62092685 BCX0\">a trav\u00e9s del asistente<\/span><\/span><span class=\"TextRun SCXW62092685 BCX0\" lang=\"ES-ES\" xml:lang=\"ES-ES\" data-contrast=\"auto\"><span class=\"NormalTextRun SCXW62092685 BCX0\">\u202fque ofrece Visual Studio. <\/span><span class=\"NormalTextRun SCXW62092685 BCX0\">\u00danicamente necesitaremos tener preparada nuestra cuenta de Azure.<\/span><span class=\"NormalTextRun SCXW62092685 BCX0\"> Si publicamos la aplicaci\u00f3n a trav\u00e9s de Visual Studio, aparecer\u00e1 un asistente para asociar la aplicaci\u00f3n con el servicio de Azure App <\/span><span class=\"NormalTextRun SpellingErrorV2Themed SCXW62092685 BCX0\">Service<\/span><span class=\"NormalTextRun SCXW62092685 BCX0\"> (si no lo tenemos creado, podemos crearlo desde el mismo asistente). Podremos gestionar de la misma forma la instancia de base de datos <\/span><span class=\"NormalTextRun SCXW62092685 BCX0\">que\u202fdesplegaremos<\/span><span class=\"NormalTextRun SCXW62092685 BCX0\"> en Azure SQL <\/span><span class=\"NormalTextRun SpellingErrorV2Themed SCXW62092685 BCX0\">Database<\/span><span class=\"NormalTextRun SCXW62092685 BCX0\">.<\/span><\/span><span class=\"EOP SCXW62092685 BCX0\" data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-16059 size-full\" src=\"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2020\/11\/blazor-publish.png\" alt=\"Asistente de Visual Studio para desplegar la aplicaci\u00f3n\" width=\"1164\" height=\"661\" srcset=\"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2020\/11\/blazor-publish.png 1164w, https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2020\/11\/blazor-publish-300x170.png 300w, https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2020\/11\/blazor-publish-1024x581.png 1024w, https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2020\/11\/blazor-publish-768x436.png 768w, https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2020\/11\/blazor-publish-360x204.png 360w\" sizes=\"auto, (max-width: 1164px) 100vw, 1164px\" \/><\/p>\n<p><span data-contrast=\"auto\">Cabe apuntar que\u202f<\/span><b><span data-contrast=\"auto\">este modo de despliegue no debe ser tratado como algo gen\u00e9rico<\/span><\/b><span data-contrast=\"auto\">, ya que depende del escenario que nos encontremos deberemos tener otra pol\u00edtica de despliegue m\u00e1s restrictiva.<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">\u00danicamente nos quedar\u00e1 establecer la conexi\u00f3n a la base de datos en la aplicaci\u00f3n. Para ello, desde el servicio de Azure App Service se ofrece la posibilidad de crear configuraciones. Deberemos coger la ruta de conexi\u00f3n a la base de datos del servicio de Azure SQL Database y establecerla como configuraci\u00f3n en App Service.<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<h3>Probando la aplicaci\u00f3n<\/h3>\n<p>\u00a1Ya tenemos funcionando la aplicaci\u00f3n! Tocar\u00e1 probarla.<\/p>\n<p>En la primera petici\u00f3n al servidor, observamos c\u00f3mo nos devuelve todas las librer\u00edas compiladas necesarias para la correcta ejecuci\u00f3n del front:<\/p>\n<div id=\"attachment_16055\" style=\"width: 1053px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-16055\" class=\"wp-image-16055 size-full\" src=\"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2020\/11\/blazor-dlls.png\" alt=\"Visualizaci\u00f3n de la red desde el navegador\" width=\"1043\" height=\"939\" srcset=\"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2020\/11\/blazor-dlls.png 1043w, https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2020\/11\/blazor-dlls-300x270.png 300w, https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2020\/11\/blazor-dlls-1024x922.png 1024w, https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2020\/11\/blazor-dlls-768x691.png 768w, https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2020\/11\/blazor-dlls-360x324.png 360w\" sizes=\"auto, (max-width: 1043px) 100vw, 1043px\" \/><p id=\"caption-attachment-16055\" class=\"wp-caption-text\">Visualizaci\u00f3n de la red desde el navegador<\/p><\/div>\n<p>Si seleccionamos una respuesta a una de las preguntas que nos mostrar\u00e1 la aplicaci\u00f3n, vemos c\u00f3mo realiza la petici\u00f3n al servidor para guardar la respuesta que ha seleccionado el usuario:<\/p>\n<div id=\"attachment_16054\" style=\"width: 1675px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-16054\" class=\"wp-image-16054 size-full\" src=\"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2020\/11\/blazor-app-working.png\" alt=\"Captura de la petici\u00f3n al servidor\" width=\"1665\" height=\"758\" srcset=\"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2020\/11\/blazor-app-working.png 1665w, https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2020\/11\/blazor-app-working-300x137.png 300w, https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2020\/11\/blazor-app-working-1024x466.png 1024w, https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2020\/11\/blazor-app-working-768x350.png 768w, https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2020\/11\/blazor-app-working-1536x699.png 1536w, https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2020\/11\/blazor-app-working-360x164.png 360w\" sizes=\"auto, (max-width: 1665px) 100vw, 1665px\" \/><p id=\"caption-attachment-16054\" class=\"wp-caption-text\">Captura de la petici\u00f3n al servidor<\/p><\/div>\n<p>Con ello, ofrecemos al usuario una interacci\u00f3n m\u00e1s enriquecida, sin pr\u00e1cticamente esperas.<\/p>\n<h1><\/h1>\n<p>Blazor (y en especial Blazor WebAssembly) <strong>ha venido para quedarse<\/strong>. Es un framework que apenas acaba de empezar a andar, pero muy completo, con el cual Microsoft est\u00e1 apostando fuerte para desarrollos en los que se requiera una alta carga de desarrollo front end, en especial si se requieren interfaces muy enriquecidas e interactivas para el usuario. <strong>Si triunfar\u00e1 o no, s\u00f3lo el tiempo lo dir\u00e1<\/strong>. Lo que es seguro es que, a cada nuevo proyecto que se plantee, tendremos que meter en la ecuaci\u00f3n de frameworks a utilizar la variable \u00abBlazor\u00bb.<\/p>\n<p>&nbsp;<\/p>\n<p>Si quieres que tu proyecto cuente con un equipo experto IT que aplique las \u00faltimas tendencias tecnol\u00f3gicas del mercado, conoce c\u00f3mo podemos ayudarte con nuestros Agile Centers y servicios de <a href=\"https:\/\/www.hiberus.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">Outsourcing IT<\/a>.<\/p>\n        <div class=\"row\">\n            <div class=\"block-cta-form\" style=\"background-color: #003664;\">\n                <div class=\"content-cta-form\">\n                    <div class=\"text-cta-form\">\n                        <p class=\"title-cta-form\">\u00bfQuieres m\u00e1s informaci\u00f3n sobre nuestro servicio de desarrollo y outsourcing?<\/p>\n                        <p>Contacta con nuestro equipo<\/p>\n                    <\/div>\n                    <div class=\"form-fields\">\n                        \n<div class=\"wpcf7 no-js\" id=\"wpcf7-f33973-o1\" lang=\"es-ES\" dir=\"ltr\" data-wpcf7-id=\"33973\">\n<div class=\"screen-reader-response\"><p role=\"status\" aria-live=\"polite\" aria-atomic=\"true\"><\/p> <ul><\/ul><\/div>\n<form action=\"\/crecemos-contigo\/wp-json\/wp\/v2\/posts\/16035#wpcf7-f33973-o1\" method=\"post\" class=\"wpcf7-form init\" aria-label=\"Formulario de contacto\" novalidate=\"novalidate\" data-status=\"init\">\n<fieldset class=\"hidden-fields-container\"><input type=\"hidden\" name=\"_wpcf7\" value=\"33973\" \/><input type=\"hidden\" name=\"_wpcf7_version\" value=\"6.1.5\" \/><input type=\"hidden\" name=\"_wpcf7_locale\" value=\"es_ES\" \/><input type=\"hidden\" name=\"_wpcf7_unit_tag\" value=\"wpcf7-f33973-o1\" \/><input type=\"hidden\" name=\"_wpcf7_container_post\" value=\"0\" \/><input type=\"hidden\" name=\"_wpcf7_posted_data_hash\" value=\"\" \/><input type=\"hidden\" name=\"_wpcf7_recaptcha_response\" value=\"\" \/>\n<\/fieldset>\n<div id=\"responsive-form\" class=\"clearfix\">\n\t<div class=\"form-row\">\n\t\t<div class=\"column-half\">\n\t\t\t<p><span class=\"wpcf7-form-control-wrap\" data-name=\"nombre\"><input size=\"40\" maxlength=\"400\" class=\"wpcf7-form-control wpcf7-text wpcf7-validates-as-required\" aria-required=\"true\" aria-invalid=\"false\" placeholder=\"Nombre *\" value=\"\" type=\"text\" name=\"nombre\" \/><\/span>\n\t\t\t<\/p>\n\t\t<\/div>\n\t\t<div class=\"column-half\">\n\t\t\t<p><span class=\"wpcf7-form-control-wrap\" data-name=\"apellido\"><input size=\"40\" maxlength=\"400\" class=\"wpcf7-form-control wpcf7-text wpcf7-validates-as-required\" aria-required=\"true\" aria-invalid=\"false\" placeholder=\"Apellido *\" value=\"\" type=\"text\" name=\"apellido\" \/><\/span>\n\t\t\t<\/p>\n\t\t<\/div>\n\t<\/div>\n\t<div class=\"form-row\">\n\t\t<div class=\"column-half\">\n\t\t\t<p><span class=\"wpcf7-form-control-wrap\" data-name=\"correo\"><input size=\"40\" maxlength=\"400\" class=\"wpcf7-form-control wpcf7-email wpcf7-validates-as-required wpcf7-text wpcf7-validates-as-email\" aria-required=\"true\" aria-invalid=\"false\" placeholder=\"Correo corporativo *\" value=\"\" type=\"email\" name=\"correo\" \/><\/span>\n\t\t\t<\/p>\n\t\t<\/div>\n\t\t<div class=\"column-half\">\n\t\t\t<p><span class=\"wpcf7-form-control-wrap\" data-name=\"telf-contacto\"><input size=\"40\" maxlength=\"400\" class=\"wpcf7-form-control wpcf7-tel wpcf7-validates-as-required wpcf7-text wpcf7-validates-as-tel\" aria-required=\"true\" aria-invalid=\"false\" placeholder=\"Tel\u00e9fono *\" value=\"\" type=\"tel\" name=\"telf-contacto\" \/><\/span>\n\t\t\t<\/p>\n\t\t<\/div>\n\t<\/div>\n\t<div class=\"form-row\">\n\t\t<div class=\"column-half\">\n\t\t\t<p><span class=\"wpcf7-form-control-wrap\" data-name=\"compania\"><input size=\"40\" maxlength=\"400\" class=\"wpcf7-form-control wpcf7-text wpcf7-validates-as-required\" aria-required=\"true\" aria-invalid=\"false\" placeholder=\"Compa\u00f1ia *\" value=\"\" type=\"text\" name=\"compania\" \/><\/span>\n\t\t\t<\/p>\n\t\t<\/div>\n\t<\/div>\n\t<div class=\"form-row\">\n\t\t<div class=\"column-full\">\n\t\t\t<p><span class=\"wpcf7-form-control-wrap\" data-name=\"mensaje\"><textarea cols=\"40\" rows=\"10\" maxlength=\"2000\" class=\"wpcf7-form-control wpcf7-textarea wpcf7-validates-as-required\" aria-required=\"true\" aria-invalid=\"false\" placeholder=\"Mensaje *\" name=\"mensaje\"><\/textarea><\/span>\n\t\t\t<\/p>\n\t\t<\/div>\n\t<\/div>\n\t<div class=\"form-row\">\n\t\t<div class=\"column-full color-acceptance\">\n\t\t\t<p><span class=\"wpcf7-form-control-wrap\" data-name=\"politica\"><span class=\"wpcf7-form-control wpcf7-acceptance\"><span class=\"wpcf7-list-item\"><label><input type=\"checkbox\" name=\"politica\" value=\"1\" aria-invalid=\"false\" \/><span class=\"wpcf7-list-item-label\">He le\u00eddo y acepto la <a href=\"https:\/\/www.hiberus.com\/politica\" target=\"_blank\"><u>Pol\u00edtica de privacidad<\/u><\/a><\/span><\/label><\/span><\/span><\/span>\n\t\t\t<\/p>\n\t\t<\/div>\n\t<\/div>\n\t<div class=\"form-row\">\n\t\t<div class=\"column-full color-acceptance\">\n\t\t\t<p><span class=\"wpcf7-form-control-wrap\" data-name=\"marketing\"><span class=\"wpcf7-form-control wpcf7-acceptance optional\"><span class=\"wpcf7-list-item\"><label><input type=\"checkbox\" name=\"marketing\" value=\"1\" aria-invalid=\"false\" \/><span class=\"wpcf7-list-item-label\">Me gustar\u00eda recibir comunicaciones de marketing de Hiberus y sobre sus productos, servicios y eventos.<\/span><\/label><\/span><\/span><\/span>\n\t\t\t<\/p>\n\t\t<\/div>\n\t<\/div>\n\t<div class=\"form-row\">\n\t\t<div class=\"column-half\">\n\t\t\t<p><input class=\"wpcf7-form-control wpcf7-submit has-spinner\" type=\"submit\" value=\"Contacta con nosotros\" \/>\n\t\t\t<\/p>\n\t\t<\/div>\n\t<\/div>\n\t<div class=\"form-row\">\n\t\t<div id=\"campos_ocultos\" class=\"hidden\">\n\t\t\t<p><span class=\"wpcf7-form-control-wrap\" data-name=\"oculto_analitica_new1\"><input size=\"40\" maxlength=\"400\" class=\"wpcf7-form-control wpcf7-text\" id=\"oculto_analitica_new1\" aria-invalid=\"false\" value=\"\" type=\"text\" name=\"oculto_analitica_new1\" \/><\/span><br \/>\n<span class=\"wpcf7-form-control-wrap\" data-name=\"oculto_analitica_new2\"><input size=\"40\" maxlength=\"400\" class=\"wpcf7-form-control wpcf7-text\" id=\"oculto_analitica_new2\" aria-invalid=\"false\" value=\"\" type=\"text\" name=\"oculto_analitica_new2\" \/><\/span><br \/>\n<span class=\"wpcf7-form-control-wrap\" data-name=\"oculto_analitica_new3\"><input size=\"40\" maxlength=\"400\" class=\"wpcf7-form-control wpcf7-text\" id=\"oculto_analitica_new3\" aria-invalid=\"false\" value=\"\" type=\"text\" name=\"oculto_analitica_new3\" \/><\/span><br \/>\n<span class=\"wpcf7-form-control-wrap\" data-name=\"oculto_analitica_new4\"><input size=\"40\" maxlength=\"400\" class=\"wpcf7-form-control wpcf7-text\" id=\"oculto_analitica_new4\" aria-invalid=\"false\" value=\"\" type=\"text\" name=\"oculto_analitica_new4\" \/><\/span><br \/>\n<span class=\"wpcf7-form-control-wrap\" data-name=\"oculto_analitica_new_p\"><input size=\"40\" maxlength=\"400\" class=\"wpcf7-form-control wpcf7-text\" id=\"oculto_analitica_new_p\" aria-invalid=\"false\" value=\"\" type=\"text\" name=\"oculto_analitica_new_p\" \/><\/span>\n\t\t\t<\/p>\n\t\t<\/div>\n\t<\/div>\n<\/div>\n\n<!--end responsive-form--><div class=\"wpcf7-response-output\" aria-hidden=\"true\"><\/div>\n<\/form>\n<\/div>\n                    <\/div>\n                <\/div>\n            <\/div>\n        <\/div>\n        \n","protected":false},"excerpt":{"rendered":"<p>De todos es bien conocido que el lenguaje de programaci\u00f3n predominante en las aplicaciones web interactivas es\u202fJavascript\u202fy, si no, es cualquier framework&#8230;<\/p>\n","protected":false},"author":197,"featured_media":16097,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_ayudawp_aiss_exclude":false,"footnotes":""},"categories":[2,8],"tags":[70,87],"class_list":{"0":"post-16035","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-noticiassector","8":"category-outsourcing-servicios","9":"tag-servicios-microsoft","10":"tag-soluciones-microsoft"},"acf":[],"_links":{"self":[{"href":"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-json\/wp\/v2\/posts\/16035","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-json\/wp\/v2\/users\/197"}],"replies":[{"embeddable":true,"href":"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-json\/wp\/v2\/comments?post=16035"}],"version-history":[{"count":29,"href":"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-json\/wp\/v2\/posts\/16035\/revisions"}],"predecessor-version":[{"id":56021,"href":"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-json\/wp\/v2\/posts\/16035\/revisions\/56021"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-json\/wp\/v2\/media\/16097"}],"wp:attachment":[{"href":"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-json\/wp\/v2\/media?parent=16035"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-json\/wp\/v2\/categories?post=16035"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-json\/wp\/v2\/tags?post=16035"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}