{"id":12952,"date":"2024-08-02T14:51:25","date_gmt":"2024-08-02T12:51:25","guid":{"rendered":"https:\/\/www.palentino.es\/blog\/?p=12952"},"modified":"2024-08-08T01:47:04","modified_gmt":"2024-08-07T23:47:04","slug":"introduccion-a-la-programacion-de-microservicios-con-kubernetes-y-docker","status":"publish","type":"post","link":"https:\/\/www.palentino.es\/blog\/introduccion-a-la-programacion-de-microservicios-con-kubernetes-y-docker\/","title":{"rendered":"Introducci\u00f3n a la programaci\u00f3n de microservicios con Kubernetes y Docker"},"content":{"rendered":"<p>La arquitectura de <strong>microservicios<\/strong> ha ganado popularidad en los \u00faltimos a\u00f1os como una soluci\u00f3n eficaz para desarrollar aplicaciones escalables y mantenibles. Esta arquitectura permite descomponer aplicaciones monol\u00edticas en servicios peque\u00f1os e independientes, cada uno de los cuales puede ser desarrollado, desplegado y mantenido de manera aut\u00f3noma. Este enfoque contrasta fuertemente con las aplicaciones monol\u00edticas tradicionales, donde todas las funciones y caracter\u00edsticas est\u00e1n estrechamente integradas en un solo bloque de c\u00f3digo.<\/p>\n<p>En este contexto, herramientas como <strong>Docker<\/strong> y <strong>Kubernetes<\/strong> se han convertido en componentes esenciales para implementar y gestionar microservicios. Docker facilita la creaci\u00f3n de entornos de ejecuci\u00f3n consistentes y portables, mientras que Kubernetes se encarga de orquestar estos entornos, gestionando su despliegue, escalado y operaci\u00f3n en entornos de producci\u00f3n.<\/p>\n<p>Este art\u00edculo ofrece una gu\u00eda detallada sobre c\u00f3mo introducirse en la programaci\u00f3n de microservicios utilizando <strong>Docker y Kubernetes<\/strong>, cubriendo desde los conceptos b\u00e1sicos hasta los aspectos m\u00e1s avanzados de estas tecnolog\u00edas.<\/p>\n<p><a href=\"https:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2024\/08\/docker-1.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-12955\" src=\"https:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2024\/08\/docker-1.png\" alt=\"\" width=\"1126\" height=\"637\" srcset=\"https:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2024\/08\/docker-1.png 1126w, https:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2024\/08\/docker-1-300x170.png 300w, https:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2024\/08\/docker-1-1024x579.png 1024w\" sizes=\"auto, (max-width: 1126px) 100vw, 1126px\" \/><\/a><\/p>\n<p><!--more--><\/p>\n<h2>Microservicios: Un Enfoque Modular al Desarrollo de Software<\/h2>\n<h3>\u00bfQu\u00e9 Son los Microservicios?<\/h3>\n<p>Los microservicios son un estilo de <strong>arquitectura<\/strong> de <strong>software<\/strong> donde una aplicaci\u00f3n se divide en servicios independientes que se comunican entre s\u00ed mediante APIs ligeras. Cada microservicio es responsable de una funci\u00f3n espec\u00edfica de la aplicaci\u00f3n, como la gesti\u00f3n de usuarios, el procesamiento de pagos, o la manipulaci\u00f3n de inventarios.<\/p>\n<p>A diferencia de las aplicaciones <strong>monol\u00edticas<\/strong>, donde todos los componentes est\u00e1n interrelacionados y cualquier cambio requiere una recompilaci\u00f3n y despliegue completo de la aplicaci\u00f3n, los microservicios permiten que cada componente evolucione y se despliegue de forma independiente. Esto no solo mejora la flexibilidad del desarrollo, sino que tambi\u00e9n permite a los equipos trabajar en diferentes partes de la aplicaci\u00f3n simult\u00e1neamente, reduciendo as\u00ed el tiempo de desarrollo.<\/p>\n<h3>Ventajas y Desaf\u00edos de los Microservicios<\/h3>\n<p><strong>Ventajas<\/strong>:<\/p>\n<ul>\n<li><strong>Escalabilidad Independiente<\/strong>: Cada microservicio puede ser escalado individualmente seg\u00fan las necesidades del negocio, lo que permite una utilizaci\u00f3n m\u00e1s eficiente de los recursos.<\/li>\n<li><strong>Despliegue Continuo<\/strong>: Los microservicios pueden ser actualizados y desplegados sin necesidad de interrumpir toda la aplicaci\u00f3n. Esto facilita el despliegue continuo y la entrega continua (CI\/CD).<\/li>\n<li><strong>Resiliencia Mejorada<\/strong>: Si un microservicio falla, los dem\u00e1s pueden continuar funcionando, lo que reduce el impacto de errores y aumenta la resiliencia de la aplicaci\u00f3n en su conjunto.<\/li>\n<li><strong>Flexibilidad Tecnol\u00f3gica<\/strong>: Los equipos pueden elegir diferentes tecnolog\u00edas, lenguajes de programaci\u00f3n y herramientas para desarrollar cada microservicio, lo que permite utilizar las mejores herramientas para cada tarea espec\u00edfica.<\/li>\n<\/ul>\n<p><strong>Desaf\u00edos<\/strong>:<\/p>\n<ul>\n<li><strong>Complejidad Operativa<\/strong>: Gestionar una gran cantidad de microservicios en un entorno de producci\u00f3n puede ser complejo. Se requieren herramientas avanzadas para la orquestaci\u00f3n, el monitoreo y la gesti\u00f3n de microservicios.<\/li>\n<li><strong>Gesti\u00f3n de la Comunicaci\u00f3n entre Servicios<\/strong>: La comunicaci\u00f3n entre microservicios puede ser complicada, especialmente cuando se trata de manejar fallos, latencia y consistencia de datos.<\/li>\n<li><strong>Pruebas y Depuraci\u00f3n<\/strong>: La prueba de microservicios individuales y sus interacciones requiere un enfoque m\u00e1s sofisticado que en aplicaciones monol\u00edticas.<\/li>\n<\/ul>\n<h2>Docker: Contenerizando Microservicios<\/h2>\n<p><a href=\"https:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2024\/08\/docker-2.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-12957\" src=\"https:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2024\/08\/docker-2.png\" alt=\"\" width=\"1131\" height=\"632\" srcset=\"https:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2024\/08\/docker-2.png 1131w, https:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2024\/08\/docker-2-300x168.png 300w, https:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2024\/08\/docker-2-1024x572.png 1024w\" sizes=\"auto, (max-width: 1131px) 100vw, 1131px\" \/><\/a><\/p>\n<h3>\u00bfQu\u00e9 es Docker?<\/h3>\n<p>Docker es una plataforma de contenedorizaci\u00f3n que permite empaquetar una aplicaci\u00f3n junto con sus dependencias en un contenedor. Un contenedor es un entorno de ejecuci\u00f3n ligero y portable que puede ejecutarse de manera consistente en diferentes entornos, ya sea en la m\u00e1quina del desarrollador, en un servidor de prueba, o en producci\u00f3n.<\/p>\n<h3>Conceptos Clave de Docker<\/h3>\n<ul>\n<li><strong>Imagen<\/strong>: Una imagen de Docker es un paquete inmutable que contiene todo lo necesario para ejecutar una aplicaci\u00f3n: el c\u00f3digo de la aplicaci\u00f3n, las dependencias, el sistema operativo y las configuraciones necesarias. Las im\u00e1genes son la base de los contenedores y pueden ser versionadas y reutilizadas.<\/li>\n<li><strong>Contenedor<\/strong>: Un contenedor es una instancia en ejecuci\u00f3n de una imagen de Docker. Es un entorno aislado que se ejecuta en el sistema operativo del host, pero est\u00e1 separado de otros contenedores y del propio sistema operativo del host.<\/li>\n<li><strong>Dockerfile<\/strong>: Es un archivo de texto que contiene una serie de instrucciones para construir una imagen de Docker. Define desde qu\u00e9 imagen base se debe partir, qu\u00e9 dependencias se deben instalar, qu\u00e9 archivos se deben copiar al contenedor, y cu\u00e1l es el comando que se debe ejecutar cuando se inicie el contenedor.<\/li>\n<\/ul>\n<h3>Creaci\u00f3n de Im\u00e1genes y Contenedores<\/h3>\n<p>Para ilustrar c\u00f3mo funciona Docker, consideremos un ejemplo sencillo: la creaci\u00f3n de una imagen de Docker para una aplicaci\u00f3n Node.js.<\/p>\n<h4>Ejemplo de un Dockerfile para Node.js<\/h4>\n<pre><span style=\"color: #800080;\"># Usar una imagen base oficial de Node.js\r\nFROM node:14\r\n\r\n# Establecer el directorio de trabajo dentro del contenedor\r\nWORKDIR \/app\r\n\r\n# Copiar los archivos de la aplicaci\u00f3n al contenedor\r\nCOPY . .\r\n\r\n# Instalar las dependencias de la aplicaci\u00f3n\r\nRUN npm install\r\n\r\n# Exponer el puerto que la aplicaci\u00f3n utilizar\u00e1\r\nEXPOSE 3000\r\n\r\n# Comando para ejecutar la aplicaci\u00f3n\r\nCMD [\"npm\", \"start\"]<\/span><\/pre>\n<p>&nbsp;<\/p>\n<p>Este Dockerfile realiza las siguientes acciones:<\/p>\n<ol>\n<li><strong>FROM<\/strong>: Se especifica la imagen base de Node.js, que incluye un entorno preconfigurado para ejecutar aplicaciones Node.js.<\/li>\n<li><strong>WORKDIR<\/strong>: Establece \/app como el directorio de trabajo en el contenedor. Este es el lugar donde se ejecutar\u00e1n todos los comandos subsiguientes.<\/li>\n<li><strong>COPY<\/strong>: Copia todos los archivos de la aplicaci\u00f3n desde el sistema de archivos del host al directorio de trabajo en el contenedor.<\/li>\n<li><strong>RUN<\/strong>: Ejecuta <strong>npm install<\/strong> para instalar las dependencias de la aplicaci\u00f3n.<\/li>\n<li><strong>EXPOSE<\/strong>: Indica que el contenedor expondr\u00e1 el puerto 3000, que es donde se espera que la aplicaci\u00f3n escuche.<\/li>\n<li><strong>CMD<\/strong>: Especifica el comando que se ejecutar\u00e1 cuando el contenedor se inicie, en este caso, <strong>npm start<\/strong>, que arranca la aplicaci\u00f3n Node.js.<\/li>\n<\/ol>\n<h3>Construcci\u00f3n y Ejecuci\u00f3n de un Contenedor<\/h3>\n<p>Una vez que se ha creado el Dockerfile, se puede construir una imagen y ejecutar un contenedor utilizando los siguientes comandos:<\/p>\n<p># Construir la imagen<br \/>\ndocker build -t mi-app .<\/p>\n<p># Ejecutar un contenedor a partir de la imagen creada<br \/>\ndocker run -p 3000:3000 mi-app<\/p>\n<p>El comando <strong>docker build<\/strong> construye una imagen a partir del Dockerfile y le asigna una etiqueta (mi-app). El comando<strong> docker run<\/strong>\u00a0ejecuta un contenedor a partir de la imagen, mapeando el puerto 3000 del contenedor al puerto 3000 del host, lo que permite acceder a la aplicaci\u00f3n a trav\u00e9s de <span style=\"color: #800080;\">http:\/\/localhost:3000<\/span>.<\/p>\n<p>&nbsp;<\/p>\n<p><a href=\"https:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2024\/08\/kubernetes.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-12958\" src=\"https:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2024\/08\/kubernetes.png\" alt=\"\" width=\"1133\" height=\"630\" srcset=\"https:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2024\/08\/kubernetes.png 1133w, https:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2024\/08\/kubernetes-300x167.png 300w, https:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2024\/08\/kubernetes-1024x569.png 1024w\" sizes=\"auto, (max-width: 1133px) 100vw, 1133px\" \/><\/a><\/p>\n<h2>Kubernetes: Orquestando Microservicios en Producci\u00f3n<\/h2>\n<h3>\u00bfQu\u00e9 es Kubernetes?<\/h3>\n<p>Kubernetes es una plataforma de orquestaci\u00f3n de contenedores que automatiza la gesti\u00f3n, despliegue, escalado y operaci\u00f3n de aplicaciones contenerizadas. Fue desarrollado originalmente por Google y es ahora un proyecto de c\u00f3digo abierto mantenido por la Cloud Native Computing Foundation (CNCF).<\/p>\n<p>Kubernetes permite a los desarrolladores y operadores gestionar aplicaciones complejas que constan de m\u00faltiples microservicios distribuidos en cl\u00fasteres de servidores, ya sea en la nube, en entornos h\u00edbridos, o en datacenters on-premises.<\/p>\n<h3>Componentes Fundamentales de Kubernetes<\/h3>\n<ul>\n<li><strong>Pod<\/strong>: Es la unidad b\u00e1sica de Kubernetes y representa una instancia en ejecuci\u00f3n de un contenedor (o, en algunos casos, varios contenedores que deben ejecutarse juntos). Los Pods son ef\u00edmeros y est\u00e1n dise\u00f1ados para ser reemplazados en caso de fallo.<\/li>\n<li><strong>Service<\/strong>: Un Service en Kubernetes es un conjunto de Pods que trabajan juntos y exponen una interfaz de red estable (una direcci\u00f3n IP y un puerto) a trav\u00e9s de la cual pueden ser accedidos. Esto abstrae los detalles del despliegue y facilita el descubrimiento y balanceo de carga entre los Pods.<\/li>\n<li><strong>Deployment<\/strong>: Es un recurso de Kubernetes que gestiona el ciclo de vida de los Pods. Define c\u00f3mo deben ser desplegados, cu\u00e1ntas r\u00e9plicas deben estar activas, y c\u00f3mo deben actualizarse. Kubernetes se encarga de asegurarse de que el n\u00famero deseado de Pods est\u00e9 siempre en ejecuci\u00f3n y que los despliegues sean realizados sin interrupciones.<\/li>\n<li><strong>ConfigMap y Secret<\/strong>: Son recursos que permiten gestionar la configuraci\u00f3n de las aplicaciones y almacenar informaci\u00f3n sensible (como credenciales y claves API) de manera segura y centralizada.<\/li>\n<\/ul>\n<h3>Despliegue de Microservicios con Kubernetes<\/h3>\n<p>Para desplegar un microservicio en Kubernetes, generalmente se siguen los siguientes pasos:<\/p>\n<ol>\n<li><strong>Especificar el Despliegue en un Archivo YAML<\/strong>: Se define un archivo YAML que describe c\u00f3mo debe ser desplegado el Pod, cu\u00e1ntas r\u00e9plicas deben existir, y otras configuraciones necesarias.<\/li>\n<li><strong>Aplicar el Despliegue al Cl\u00faster<\/strong>: Utilizando la herramienta de l\u00ednea de comandos <strong>kubectl<\/strong>, se aplica el archivo de despliegue al cl\u00faster de Kubernetes.<\/li>\n<li><strong>Configurar un Servicio para el Pod<\/strong>: Se crea un servicio que permite acceder al Pod desde dentro o fuera del cl\u00faster.<\/li>\n<\/ol>\n<h4>Ejemplo de un Archivo de Despliegue<\/h4>\n<p>El siguiente es un ejemplo de un archivo YAML que describe el despliegue de un microservicio en Kubernetes:<\/p>\n<pre><span style=\"color: #800080;\">apiVersion: apps\/v1\r\nkind: Deployment\r\nmetadata:\r\nname: mi-app\r\nspec:\r\nreplicas: 3\r\nselector:\r\nmatchLabels:\r\napp: mi-app\r\ntemplate:\r\nmetadata:\r\nlabels:\r\napp: mi-app\r\nspec:\r\ncontainers:\r\n- name: mi-app\r\nimage: mi-app:latest\r\nports:\r\n- containerPort: 3000<\/span><\/pre>\n<p>&nbsp;<\/p>\n<p>Este archivo YAML define un <strong>Deployment<\/strong> que:<\/p>\n<ol>\n<li><strong>apiVersion<\/strong>: Especifica la versi\u00f3n de la API de Kubernetes utilizada.<\/li>\n<li><strong>kind<\/strong>: Indica el tipo de recurso que se est\u00e1 definiendo, en este caso, un <strong>Deployment<\/strong>.<\/li>\n<li><strong>metadata<\/strong>: Proporciona informaci\u00f3n b\u00e1sica como el nombre del despliegue.<\/li>\n<li><strong>spec<\/strong>: Define las especificaciones del despliegue, incluyendo el n\u00famero de r\u00e9plicas, los selectores para identificar los Pods, y el template para los Pods.<\/li>\n<li><strong>template<\/strong>: Define los Pods que se crear\u00e1n, especificando la imagen del contenedor y el puerto que debe ser expuesto.<\/li>\n<\/ol>\n<h3>Escalado y Actualizaci\u00f3n de Microservicios<\/h3>\n<p>Una de las mayores ventajas de Kubernetes es su capacidad para escalar y actualizar microservicios de manera sencilla. Mediante la modificaci\u00f3n del archivo de despliegue o utilizando comandos de kubectl, los desarrolladores pueden:<\/p>\n<ul>\n<li><strong>Escalar Microservicios<\/strong>: Aumentar o disminuir el n\u00famero de r\u00e9plicas de un microservicio seg\u00fan la demanda. Esto se puede hacer de manera manual o autom\u00e1tica utilizando un Horizontal Pod Autoscaler (HPA) basado en m\u00e9tricas como la CPU o el uso de memoria.<\/li>\n<li><strong>Actualizar Microservicios<\/strong>: Implementar nuevas versiones de un microservicio sin interrumpir su disponibilidad. Kubernetes gestiona la transici\u00f3n entre versiones mediante una estrategia de rolling updates, que reemplaza gradualmente los Pods antiguos con los nuevos.<\/li>\n<\/ul>\n<h3>Monitorizaci\u00f3n y Gesti\u00f3n en Kubernetes<\/h3>\n<p>Adem\u00e1s del despliegue y escalado, Kubernetes proporciona herramientas y APIs para la monitorizaci\u00f3n y gesti\u00f3n de microservicios en producci\u00f3n:<\/p>\n<ul>\n<li><strong>Prometheus<\/strong>: Es una herramienta de monitoreo y alertas que se integra bien con Kubernetes. Recopila m\u00e9tricas en tiempo real de los contenedores y Pods, permitiendo un seguimiento detallado del rendimiento de los microservicios.<\/li>\n<li><strong>Grafana<\/strong>: Se utiliza para la visualizaci\u00f3n de m\u00e9tricas, proporcionando paneles que permiten a los operadores ver el estado de sus microservicios y tomar decisiones informadas.<\/li>\n<li><strong>Kubectl<\/strong>: Es la herramienta de l\u00ednea de comandos de Kubernetes que permite interactuar con el cl\u00faster, obtener informaci\u00f3n detallada sobre el estado de los Pods, Servicios, Deployments, y otros recursos, as\u00ed como realizar tareas de mantenimiento y gesti\u00f3n.<\/li>\n<\/ul>\n<h2>Conclusi\u00f3n<\/h2>\n<p>La combinaci\u00f3n de microservicios con Docker y Kubernetes ofrece un enfoque poderoso y flexible para el desarrollo y despliegue de aplicaciones modernas. Docker simplifica la creaci\u00f3n y gesti\u00f3n de entornos de ejecuci\u00f3n consistentes, mientras que Kubernetes proporciona las herramientas necesarias para orquestar y escalar estos entornos en producci\u00f3n.<\/p>\n<p>Adoptar esta arquitectura y estas herramientas permite a los desarrolladores construir aplicaciones m\u00e1s resilientes, escalables y adaptables a los cambios en las demandas del negocio. Sin embargo, tambi\u00e9n introduce nuevos desaf\u00edos en t\u00e9rminos de gesti\u00f3n de la complejidad, la comunicaci\u00f3n entre servicios y la seguridad. Por lo tanto, es crucial no solo entender c\u00f3mo funcionan Docker y Kubernetes, sino tambi\u00e9n adoptar buenas pr\u00e1cticas de desarrollo y operaciones para maximizar los beneficios de la arquitectura de microservicios.<\/p>\n<p>La clave del \u00e9xito en la implementaci\u00f3n de microservicios radica en la planificaci\u00f3n cuidadosa, la selecci\u00f3n adecuada de herramientas y la adopci\u00f3n de una cultura de DevOps que fomente la colaboraci\u00f3n entre equipos de desarrollo y operaciones. Con la combinaci\u00f3n correcta de tecnolog\u00eda y metodolog\u00eda, las organizaciones pueden construir sistemas que no solo sean robustos y escalables, sino tambi\u00e9n lo suficientemente \u00e1giles para adaptarse a las necesidades del futuro.<\/p>\n    <!-- Contenedor principal del chat con estilos en l\u00ednea para ancho personalizado -->\r\n    <div id=\"chat-ia-container\" style=\"width: ;\">\r\n        <!-- \u00c1rea donde se mostrar\u00e1n los mensajes -->\r\n        <div id=\"chat-ia-messages\" style=\"height: 200px;\"><\/div>\r\n        <!-- Campo de entrada de texto -->\r\n        <textarea id=\"chat-ia-input\" placeholder=\"Escribe tu pregunta r\u00e1pida sobre el articulo\"><\/textarea>\r\n        <!-- Bot\u00f3n de env\u00edo -->\r\n        <button id=\"chat-ia-send\">Enviar<\/button>\r\n    <\/div>\r\n    \n","protected":false},"excerpt":{"rendered":"<p>La arquitectura de microservicios ha ganado popularidad en los \u00faltimos a\u00f1os como una soluci\u00f3n eficaz para desarrollar aplicaciones escalables y mantenibles. Esta arquitectura permite descomponer aplicaciones monol\u00edticas en servicios peque\u00f1os e independientes, cada uno de los cuales puede ser desarrollado, desplegado y mantenido de manera aut\u00f3noma. Este enfoque contrasta fuertemente con las aplicaciones monol\u00edticas tradicionales, donde todas las funciones y caracter\u00edsticas est\u00e1n estrechamente integradas en un solo bloque de c\u00f3digo. En este contexto, herramientas como Docker y Kubernetes se han convertido en componentes esenciales para implementar y gestionar microservicios. Docker facilita la creaci\u00f3n de entornos de ejecuci\u00f3n consistentes y portables, mientras que Kubernetes se encarga de orquestar estos entornos, gestionando su despliegue, escalado y operaci\u00f3n en entornos de producci\u00f3n. Este art\u00edculo ofrece una gu\u00eda detallada sobre c\u00f3mo introducirse en la programaci\u00f3n de microservicios utilizando Docker y Kubernetes, cubriendo desde los conceptos b\u00e1sicos hasta los aspectos m\u00e1s avanzados de estas tecnolog\u00edas.<\/p>\n","protected":false},"author":1,"featured_media":12953,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2286],"tags":[],"class_list":["post-12952","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-microservicios"],"_links":{"self":[{"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/posts\/12952","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/comments?post=12952"}],"version-history":[{"count":8,"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/posts\/12952\/revisions"}],"predecessor-version":[{"id":12989,"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/posts\/12952\/revisions\/12989"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/media\/12953"}],"wp:attachment":[{"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/media?parent=12952"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/categories?post=12952"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/tags?post=12952"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}