{"id":72204,"date":"2023-12-05T13:25:51","date_gmt":"2023-12-05T12:25:51","guid":{"rendered":"https:\/\/kinsta.com\/es\/?p=72204&#038;preview=true&#038;preview_id=72204"},"modified":"2023-12-15T15:15:16","modified_gmt":"2023-12-15T14:15:16","slug":"python-microservicios","status":"publish","type":"post","link":"https:\/\/kinsta.com\/es\/blog\/python-microservicios\/","title":{"rendered":"C\u00f3mo Construir y Desplegar Microservicios con Python"},"content":{"rendered":"<p>En el desarrollo de software moderno, los microservicios han surgido como una arquitectura fundamental, que permite la escalabilidad, la flexibilidad y la gesti\u00f3n eficiente de sistemas complejos.<\/p>\n<p>Los microservicios son aplicaciones peque\u00f1as e independientes que realizan tareas espec\u00edficas, permitiendo un despliegue y escalado flexibles. Este enfoque modular del dise\u00f1o de software flexibiliza el acoplamiento entre componentes, mejorando la flexibilidad y la capacidad de gesti\u00f3n a lo largo del desarrollo.<\/p>\n<p>El art\u00edculo proporciona una visi\u00f3n general de los <a href=\"https:\/\/kinsta.com\/es\/blog\/microservicios-vs-api\/\">microservicios<\/a>, su funcionalidad y su creaci\u00f3n utilizando <a href=\"https:\/\/kinsta.com\/es\/blog\/comandos-python\/\">Python<\/a>. Tambi\u00e9n muestra c\u00f3mo desplegar tus microservicios en Kinsta utilizando un <a href=\"https:\/\/docs.sevalla.com\/applications\/build-options\/dockerfile\">Dockerfile<\/a>.<\/p>\n<div><\/div><kinsta-auto-toc heading=\"Table of Contents\" exclude=\"last\" list-style=\"arrow\" selector=\"h2\" count-number=\"-1\"><\/kinsta-auto-toc>\n<h2>\u00bfQu\u00e9 Son los Microservicios?<\/h2>\n<p>Los microservicios son servicios independientes y aut\u00f3nomos dentro de una aplicaci\u00f3n, cada uno de los cuales aborda necesidades empresariales espec\u00edficas. Se comunican a trav\u00e9s de <a href=\"https:\/\/kinsta.com\/es\/blog\/punto-final-de-la-api\/\">API<\/a> ligeras o brokers de mensajes, formando un sistema integral.<\/p>\n<p>A diferencia de los sistemas <a href=\"https:\/\/kinsta.com\/es\/blog\/funcion-como-servicio\/#how-does-faas-work\">monol\u00edticos<\/a> que escalan totalmente en funci\u00f3n de la demanda, los microservicios permiten escalar componentes individuales de alto tr\u00e1fico. Esta arquitectura facilita la gesti\u00f3n de fallos y las actualizaciones de funciones, contrarrestando las limitaciones monol\u00edticas.<\/p>\n<p>El uso de microservicios tiene varias ventajas, como:<\/p>\n<ul>\n<li><strong>Flexibilidad y escalabilidad<\/strong> \u2014 Desvincular servicios individuales te permite aumentar el n\u00famero de nodos que ejecutan una instancia de un servicio concreto que experimenta un tr\u00e1fico elevado.<\/li>\n<li><strong>Modularidad del c\u00f3digo<\/strong> \u2014 Cada servicio puede utilizar un stack tecnol\u00f3gico distinto, lo que significa que puedes elegir las mejores herramientas de desarrollo para cada uno.<\/li>\n<\/ul>\n<p>Sin embargo, algunas dificultades acompa\u00f1an a las arquitecturas de microservicios:<\/p>\n<ul>\n<li><strong>Supervisi\u00f3n de m\u00faltiples servicios<\/strong> \u2014 Supervisar los servicios individuales de un sistema se convierte en un reto a medida que las instancias de un servicio concreto se despliegan y distribuyen por varios nodos. Esta dificultad es especialmente evidente durante los fallos de red u otros problemas del sistema.<\/li>\n<li><strong>Coste<\/strong> \u2014Desarrollar aplicaciones de microservicios puede ser significativamente m\u00e1s caro que construir sistemas monol\u00edticos, debido a los costes asociados a la gesti\u00f3n de m\u00faltiples servicios. Cada servicio requiere su propia infraestructura y recursos, lo que puede resultar costoso, sobre todo cuando se ampl\u00eda el sistema.<\/li>\n<\/ul>\n<h2>C\u00f3mo Dise\u00f1ar un Microservicio con Python<\/h2>\n<p>Ahora que conoces las ventajas de utilizar una arquitectura de microservicios, es hora de construir una con Python.<\/p>\n<p>Para este ejemplo, supongamos que quieres construir una aplicaci\u00f3n web de <a href=\"https:\/\/kinsta.com\/ecommerce\/\">comercio electr\u00f3nico<\/a>. El sitio web tiene varios componentes, como el cat\u00e1logo de productos, una lista de pedidos y un sistema de procesamiento de pagos y registros, cada uno de los cuales necesitas implementar como un servicio independiente. Adem\u00e1s, necesitas establecer un m\u00e9todo de comunicaci\u00f3n de servicio a servicio para transferir datos entre estos servicios, como <a href=\"https:\/\/kinsta.com\/es\/blog\/codigos-de-estado-de-http\/\">HTTP<\/a>, de forma eficiente.<\/p>\n<p>Construyamos un microservicio utilizando Python para gestionar un cat\u00e1logo de productos. El microservicio obtendr\u00e1 los datos de los productos de una fuente especificada y los devolver\u00e1 en formato JSON.<\/p>\n<h3>Requisitos Previos<\/h3>\n<p>Para seguir este tutorial, aseg\u00farate de que tienes<\/p>\n<ul>\n<li>Familiaridad con <a href=\"https:\/\/flask.palletsprojects.com\/en\/2.3.x\/\" target=\"_blank\" rel=\"noopener noreferrer\">Flask<\/a><\/li>\n<li><a href=\"https:\/\/kinsta.com\/es\/blog\/instalar-python\/\">Python<\/a>, <a href=\"https:\/\/www.postman.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">Postman Client<\/a> y <a href=\"https:\/\/www.docker.com\/products\/docker-desktop\/\">Docker Desktop<\/a> instalados en tu m\u00e1quina<\/li>\n<\/ul>\n<h3>1. Crea Tu Proyecto<\/h3>\n<ol start=\"1\">\n<li>Para empezar, crea una carpeta para tu proyecto llamada <strong>flask-microservice<\/strong> y el directorio actual en el directorio del proyecto.<\/li>\n<li>A continuaci\u00f3n, ejecuta <code>python3 --version<\/code> para confirmar que Python est\u00e1 instalado correctamente en tu ordenador.<\/li>\n<li>Instala <code>virtualenv<\/code> para crear un entorno de desarrollo aislado para el microservicio Flask ejecutando el siguiente comando:\n<pre><code class=\"language-bash\">pip3 install virtualenv<\/code><\/pre>\n<\/li>\n<li>Crea un entorno virtual ejecutando lo siguiente:\n<pre><code class=\"language-bash\">virtualenv venv<\/code><\/pre>\n<\/li>\n<li>Por \u00faltimo, activa el entorno virtual utilizando uno de los siguientes comandos en funci\u00f3n del sistema operativo de tu ordenador:\n<pre><code class=\"language-bash\"># Windows: \n.\\venv\\Scripts\\activate\n# Unix or macOS:\nsource venv\/bin\/activate<\/code><\/pre>\n<\/li>\n<\/ol>\n<h3>2. Configurar un Servidor Flask<\/h3>\n<p>En el directorio root, crea un archivo <strong>requirements.txt<\/strong> y a\u00f1ade estas dependencias.<\/p>\n<pre><code class=\"language-bash\">flask\nrequests<\/code><\/pre>\n<p>Ejecuta el programa <code><a href=\"https:\/\/kinsta.com\/es\/blog\/python-frameworks\/#the-python-package-manager-pip\">pip3<\/a><code> command on your terminal to install the dependencies.<\/code><\/code><\/p>\n<pre><code class=\"language-bash\">pip install -r requirements.txt<\/code><\/pre>\n<p>A continuaci\u00f3n, crea una nueva carpeta en el directorio ra\u00edz y ll\u00e1mala <strong>services<\/strong>. Dentro de esta carpeta, crea un nuevo archivo, <strong>products.py<\/strong>, y a\u00f1ade el c\u00f3digo que aparece a continuaci\u00f3n para configurar un servidor Flask.<\/p>\n<pre><code class=\"language-python\">import requests\nimport os\nfrom flask import Flask, jsonify\napp = Flask(__name__)\nport = int(os.environ.get('PORT', 5000))\n\n@app.route(\"\/\")\ndef home():\n    return \"Hello, this is a Flask Microservice\"\nif __name__ == \"__main__\":\n    app.run(debug=True, host=\"0.0.0.0\", port=port)<\/code><\/pre>\n<p>En el c\u00f3digo anterior, se configura un servidor Flask b\u00e1sico. Inicializa una aplicaci\u00f3n Flask, define una \u00fanica ruta para la URL ra\u00edz (<code>\"\/\"<\/code>), y cuando se accede a ella, muestra el mensaje <code>\"Hello, this is a Flask Microservice\"<\/code>. El servidor se ejecuta en un puerto especificado, obtenido a partir de una variable de entorno o por defecto en el puerto <code>5000<\/code>, y se inicia en modo depuraci\u00f3n, lo que lo prepara para gestionar las peticiones entrantes.<\/p>\n<h3>3. Define los Endpoints de la API<\/h3>\n<p>Con el servidor configurado, crea un endpoint de API para un microservicio que obtenga datos de productos de una <a href=\"https:\/\/dummyjson.com\" target=\"_blank\" rel=\"noopener noreferrer\">API disponible p\u00fablicamente<\/a>. A\u00f1ade este c\u00f3digo al archivo <strong>products.py<\/strong>:<\/p>\n<pre><code class=\"language-python\">BASE_URL = \"https:\/\/dummyjson.com\"\n@app.route('\/products', methods=['GET'])\ndef get_products():\n    response = requests.get(f\"{BASE_URL}\/products\")\n    if response.status_code != 200:\n        return jsonify({'error': response.json()['message']}), response.status_code\n    products = []\n    for product in response.json()['products']:\n        product_data = {\n            'id': product['id'],\n            'title': product['title'],\n            'brand': product['brand'],\n            'price': product['price'],\n            'description': product['description']\n        }\n        products.append(product_data)\n    return jsonify({'data': products}), 200 if products else 204<\/code><\/pre>\n<p>El c\u00f3digo anterior crea un endpoint <code>\/products<\/code> en el servidor Flask. Cuando se accede a \u00e9l mediante una solicitud GET, obtiene datos de productos de una API ficticia. Si tiene \u00e9xito, procesa los datos recuperados, extrae los detalles del producto y devuelve la informaci\u00f3n en formato JSON. En caso de error o de que no haya datos disponibles, responde con un mensaje de error y un c\u00f3digo de estado adecuados.<\/p>\n<h3>4. Prueba el Microservicio<\/h3>\n<p>Llegados a este punto, has configurado con \u00e9xito un microservicio sencillo. Para iniciar el servicio, pon en marcha el servidor de desarrollo, que comenzar\u00e1 a ejecutarse en <code>http:\/\/localhost:5000<\/code>.<\/p>\n<pre><code class=\"language-bash\">flask --app services\/products run<\/code><\/pre>\n<p>A continuaci\u00f3n, puedes realizar una solicitud <code>GET<\/code> al endpoint <code>\/products<\/code> utilizando el cliente Postman, deber\u00edas ver una respuesta similar a la de la captura de pantalla siguiente.<\/p>\n<figure style=\"width: 1001px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/11\/testing-endpoint-locally.jpg\" alt=\"Solicitud GET correcta al endpoint del producto API ficticio en Postman\" width=\"1001\" height=\"471\"><figcaption class=\"wp-caption-text\">Probando la petici\u00f3n HTTP API <code>GET<\/code> en Postman.<\/figcaption><\/figure>\n<h2>C\u00f3mo Implementar la Autenticaci\u00f3n y la Autorizaci\u00f3n en un Microservicio Python<\/h2>\n<p>Al construir microservicios, es importante implementar medidas de seguridad robustas, como la autenticaci\u00f3n y la autorizaci\u00f3n. Asegurar tu microservicio garantiza que s\u00f3lo los usuarios autorizados puedan acceder al servicio y utilizarlo, protegiendo los datos sensibles y evitando ataques maliciosos.<\/p>\n<p>Un m\u00e9todo eficaz para implementar la autenticaci\u00f3n y autorizaci\u00f3n seguras en microservicios son los Tokens Web JSON (JWTs).<\/p>\n<p>JWT es un est\u00e1ndar abierto ampliamente utilizado que proporciona una forma segura y eficaz de transmitir informaci\u00f3n de autenticaci\u00f3n entre clientes y servidores. Son tokens compactos, encriptados y firmados digitalmente que pasas junto a las peticiones HTTP. Cuando incluyes un JWT con cada solicitud, el servidor puede verificar r\u00e1pidamente la identidad y los permisos de un usuario.<\/p>\n<p>Para implementar la autenticaci\u00f3n JWT en el microservicio, haz lo siguiente:<\/p>\n<ol start=\"1\">\n<li>A\u00f1ade el paquete <code>pyjwt<\/code> de Python a tu archivo <strong>requirements.txt<\/strong> y reinstala las dependencias utilizando <code>pip install -r requirements.txt<\/code>.<\/li>\n<li>Como el servicio no tiene una base de datos dedicada, crea un archivo <strong>users.json<\/strong> en el directorio root de tu proyecto para almacenar una lista de usuarios autorizados. Pega el c\u00f3digo siguiente en el archivo:\n<pre><code class=\"language-json\">[\n    {   \n        \"id\": 1,\n        \"username\": \"admin\",\n        \"password\": \"admin\"\n    \n    }\n]<\/code><\/pre>\n<p><aside role=\"note\" class=\"wp-block-kinsta-notice is-style-info\">\n            <h3>Info<\/h3>\n        <p>Puedes configurar f\u00e1cilmente tu base de datos preferida (<a href=\"https:\/\/kinsta.com\/es\/blog\/que-es-postgresql\/\">PostgreSQL<\/a>, <a href=\"https:\/\/kinsta.com\/es\/blog\/mariadb-python\/\">MariaDB<\/a>, <a href=\"https:\/\/kinsta.com\/es\/blog\/redis-docker\/\">Redis<\/a> y <a href=\"https:\/\/kinsta.com\/es\/secciones\/base-de-datos-mysql\/\">MySQL<\/a>) para tus microservicios con nuestro servicio de <a href=\"https:\/\/sevalla.com\/database-hosting\/\">alojamiento de bases de datos<\/a>.<\/p>\n<\/aside>\n<\/li>\n<li>A continuaci\u00f3n, en tu archivo <strong>services\/products.py<\/strong>, sustituye las sentencias import por lo siguiente:\n<pre><code class=\"language-python\">import requests \nfrom flask import Flask, jsonify, request, make_response\nimport jwt\nfrom functools import wraps\nimport json\nimport os\nfrom jwt.exceptions import DecodeError<\/code><\/pre>\n<p>Est\u00e1s importando estos m\u00f3dulos para gestionar solicitudes HTTP, crear una aplicaci\u00f3n Flask, gestionar datos JSON, implementar la autenticaci\u00f3n basada en JWT y gestionar excepciones, lo que permite una amplia gama de funciones dentro del servidor <a href=\"https:\/\/kinsta.com\/es\/blog\/flask-vs-django\/\">Flask<\/a>.<\/li>\n<li>A\u00f1ade el siguiente c\u00f3digo debajo de la creaci\u00f3n de la instancia de la app Flask para generar una clave secreta que se utilizar\u00e1 para firmar los tokens JWT.\n<pre><code class=\"language-python\">app.config['SECRET_KEY'] = os.urandom(24)<\/code><\/pre>\n<\/li>\n<li>Para verificar los JWT, crea una funci\u00f3n decoradora y a\u00f1ade el siguiente c\u00f3digo por encima de las rutas API en el c\u00f3digo de tu servidor Flask. Esta funci\u00f3n decoradora autenticar\u00e1 y validar\u00e1 a los usuarios antes de que accedan a las rutas protegidas.\n<pre><code class=\"language-python\">def token_required(f):\n    @wraps(f)\n    def decorated(*args, **kwargs):\n        token = request.cookies.get('token')\n        if not token:\n            return jsonify({'error': 'Authorization token is missing'}), 401\n        try:\n            data = jwt.decode(token, app.config['SECRET_KEY'], algorithms=[\"HS256\"])\n            current_user_id = data['user_id']\n        except DecodeError:\n            return jsonify({'error': 'Authorization token is invalid'}), 401\n        return f(current_user_id, *args, **kwargs)\n    return decorated<\/code><\/pre>\n<p>Esta funci\u00f3n decoradora comprueba las peticiones HTTP entrantes en busca de un token de autorizaci\u00f3n JWT, que debe estar en las cabeceras de la petici\u00f3n o en las cookies. Si falta el token o no es v\u00e1lido, el decorador env\u00eda un mensaje <code>unauthorized status code<\/code> como respuesta.<\/p>\n<p>Por el contrario, si hay un token v\u00e1lido, el decorator extrae el ID de usuario tras descodificarlo. Este proceso salvaguarda los endpoints protegidos de la API concediendo acceso s\u00f3lo a los usuarios autorizados.<\/li>\n<li>Define un endpoint de la API para la autenticaci\u00f3n de usuarios utilizando el siguiente c\u00f3digo.\n<pre><code class=\"language-python\">with open('users.json', 'r') as f:\n    users = json.load(f)\n@app.route('\/auth', methods=['POST'])\ndef authenticate_user():\n    if request.headers['Content-Type'] != 'application\/json':\n        return jsonify({'error': 'Unsupported Media Type'}), 415\n    username = request.json.get('username')\n    password = request.json.get('password')\n    for user in users:\n        if user['username'] == username and user['password'] == password:\n            token = jwt.encode({'user_id': user['id']}, app.config['SECRET_KEY'],algorithm=\"HS256\")\n            response = make_response(jsonify({'message': 'Authentication successful'}))\n            response.set_cookie('token', token)\n            return response, 200\n    return jsonify({'error': 'Invalid username or password'}), 401<\/code><\/pre>\n<p>Para autenticar y autorizar a los usuarios, el endpoint de la API <code>\/auth<\/code> comprueba las credenciales del payload JSON de la solicitud <code>POST<\/code> con la lista de usuarios permitidos. Si las credenciales son v\u00e1lidas, genera un token JWT utilizando el ID del usuario y la clave secreta de la aplicaci\u00f3n, y establece el token como una cookie en la respuesta. Ahora los usuarios pueden utilizar este token para realizar posteriores solicitudes a la API.<\/p>\n<p>Tras crear el endpoint <code>\/auth<\/code>, utiliza Postman para enviar una solicitud HTTP <code>POST<\/code> a <code>http:\/\/localhost:5000\/auth<\/code>. En el cuerpo de la solicitud, incluye las credenciales del usuario administrador simulado que has creado.<\/p>\n<figure style=\"width: 1001px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/11\/authentication-request.png\" alt=\"Solicitud Postman mostrando el cuerpo de la solicitud.\" width=\"1001\" height=\"471\"><figcaption class=\"wp-caption-text\">Solicitud Postman mostrando el cuerpo de la solicitud.<\/figcaption><\/figure>\n<p>Si la solicitud tiene \u00e9xito, la API generar\u00e1 un token JWT, lo almacenar\u00e1 en las cookies de Postman y enviar\u00e1 una respuesta de \u00e9xito autenticada.<\/li>\n<li>Por \u00faltimo, actualiza el endpoint de la API <code>GET<\/code> para comprobar y verificar el token JWT utilizando el c\u00f3digo siguiente:\n<pre><code class=\"language-python\">@app.route('\/products', methods=['GET'])\n@token_required\ndef get_products(current_user_id):\n    headers = {'Authorization': f'Bearer {request.cookies.get(\"token\")}'}    \n    response = requests.get(f\"{BASE_URL}\/products\", headers=headers)\n    if response.status_code != 200:\n        return jsonify({'error': response.json()['message']}), response.status_code\n    products = []\n    for product in response.json()['products']:\n        product_data = {\n            'id': product['id'],\n            'title': product['title'],\n            'brand': product['brand'],\n            'price': product['price'],\n            'description': product['description']\n        }\n        products.append(product_data)\n    return jsonify({'data': products}), 200 if products else 204<\/code><\/pre>\n<\/li>\n<\/ol>\n<h2>C\u00f3mo Contenerizar Microservicios Python con Docker<\/h2>\n<p><a href=\"https:\/\/kinsta.com\/es\/blog\/que-es-docker\/\">Docker<\/a> es una plataforma que empaqueta aplicaciones y sus dependencias en un entorno de desarrollo aislado. Empaquetar microservicios en contenedores agiliza sus procesos de despliegue y gesti\u00f3n en servidores, ya que cada servicio se inicia y ejecuta de forma independiente en su contenedor.<\/p>\n<p>Para empaquetar el microservicio en contenedores, debes crear una imagen Docker a partir de un <a href=\"https:\/\/docs.sevalla.com\/applications\/build-options\/dockerfile\">Dockerfile<\/a> que especifique las dependencias necesarias para ejecutar la aplicaci\u00f3n en un contenedor. Crea un <strong>Dockerfile<\/strong> en el directorio root de tu proyecto y a\u00f1ade estas instrucciones:<\/p>\n<pre><code class=\"language-bash\">FROM python:3.9-alpine\nWORKDIR \/app\nCOPY requirements.txt .\/\nRUN pip install -r requirements.txt\nCOPY . .\nEXPOSE 5000\nCMD [\"python\", \".\/services\/products.py\"]<\/code><\/pre>\n<p>Antes de crear la imagen, revisa estos comandos:<\/p>\n<ul>\n<li><code>FROM<\/code> \u2014 Indica a Docker qu\u00e9 imagen base debe utilizar. Una imagen base es una instancia preconstruida que contiene el software y las dependencias para ejecutar la aplicaci\u00f3n Flask en un contenedor.<\/li>\n<li><code>WORKDIR<\/code> \u2014 Establece el directorio especificado dentro del contenedor como directorio de trabajo.<\/li>\n<li><code>COPY requirements.txt .\/<\/code> \u2014 Copia las dependencias del archivo <strong>requirements.txt<\/strong> en el archivo <strong>requirements.txt<\/strong> del contenedor.<\/li>\n<li><code>RUN<\/code> \u2014 Ejecuta el comando especificado para instalar las dependencias que requiere la imagen.<\/li>\n<li><code>COPY . .<\/code> \u2014 Copia todos los archivos del directorio root del proyecto al directorio de trabajo dentro del contenedor.<\/li>\n<li><code>EXPOSE<\/code> \u2014 Especifica el puerto en el que el contenedor escuchar\u00e1 las peticiones. Sin embargo, Docker no publica el puerto en el host.<\/li>\n<li><code>CMD<\/code> \u2014 Especifica el comando por defecto que se ejecutar\u00e1 cuando se inicie el contenedor.<\/li>\n<\/ul>\n<p>A continuaci\u00f3n, a\u00f1ade un archivo <strong>.dockerignore <\/strong>en el directorio root de tu proyecto para especificar los archivos que la imagen Docker debe excluir. Limitar el contenido de la imagen reducir\u00e1 su tama\u00f1o final y el tiempo de construcci\u00f3n asociado.<\/p>\n<pre><code class=\"language-bash\">\/venv\n\/services\/__pycache__\/\n.gitignore<\/code><\/pre>\n<p>Ahora, ejecuta el siguiente comando para construir la imagen Docker:<\/p>\n<pre><code class=\"language-bash\">docker build -t flask-microservice .<\/code><\/pre>\n<p>Por \u00faltimo, una vez construida la imagen, puedes ejecutar el microservicio en un contenedor Docker utilizando el siguiente comando:<\/p>\n<pre><code class=\"language-bash\">docker run -p 5000:5000 flask-microservice<\/code><\/pre>\n<p>Este comando iniciar\u00e1 un contenedor Docker que ejecuta el microservicio y expondr\u00e1 el puerto 5000 del contenedor al puerto 5000 del host, permiti\u00e9ndote hacer peticiones HTTP desde tu navegador web o Postman utilizando la URL <code>http:\/\/localhost:5000<\/code>.<\/p>\n<h2>Despliega Microservicios Python con Kinsta<\/h2>\n<p>Kinsta ofrece soluciones de alojamiento administrado para aplicaciones web y bases de datos \u2014 puedes desplegar y gestionar sin problemas tus microservicios Python y API backend en un entorno de producci\u00f3n.<\/p>\n<p>Sigue estos pasos para configurar tu microservicio Flask para su despliegue con MyKinsta:<\/p>\n<ol start=\"1\">\n<li>En primer lugar, crea un nuevo <strong>Procfile<\/strong> en el directorio ra\u00edz y a\u00f1ade el c\u00f3digo que aparece a continuaci\u00f3n. Especifica el comando para ejecutar el microservicio Flask en el servidor HTTP Gunicorn WSGI de Kinsta para aplicaciones Python.\n<pre><code class=\"language-bash\">web: gunicorn services.wsgi<\/code><\/pre>\n<\/li>\n<li>En tu archivo <strong>requirements.txt<\/strong>, a\u00f1ade la dependencia de Gunicorn:\n<pre><code class=\"language-bash\">gunicorn==20.1.*<\/code><\/pre>\n<\/li>\n<li>A continuaci\u00f3n, crea un nuevo archivo <strong>services\/wsgi.py<\/strong> y a\u00f1ade el c\u00f3digo que aparece a continuaci\u00f3n.\n<pre><code class=\"language-python\">from services.products import app as application\nif __name__ == \"__main__\":\n                application.run()<\/code><\/pre>\n<\/li>\n<li>Crea un archivo <strong>.gitignore<\/strong> en la carpeta ra\u00edz del proyecto y a\u00f1ade lo siguiente:\n<pre><code class=\"language-bash\">services\/__pycache__\nvenv<\/code><\/pre>\n<\/li>\n<li>Por \u00faltimo, crea un nuevo repositorio en GitHub y env\u00eda los archivos de tu proyecto.<\/li>\n<\/ol>\n<p>Una vez que tu repositorio est\u00e9 listo, sigue estos pasos para desplegar el microservicio Flask en Kinsta:<\/p>\n<ol start=\"1\">\n<li>Inicia sesi\u00f3n o crea una cuenta para ver tu panel <a href=\"https:\/\/my.kinsta.com\/?lang=es\" target=\"_blank\" rel=\"noopener noreferrer\">MyKinsta<\/a>.<\/li>\n<li>Autoriza a Kinsta con tu proveedor de Git (<a href=\"https:\/\/docs.sevalla.com\/applications\/git\/bitbucket#grant-access-to-the-kinsta-bitbucket-application\">Bitbucket<\/a>, <a href=\"https:\/\/docs.sevalla.com\/applications\/git\/github#authenticate-and-authorize\">GitHub<\/a> o <a href=\"https:\/\/docs.sevalla.com\/applications\/git\/gitlab#authorize-the-kinsta-gitlab-application\">GitLab<\/a>).<\/li>\n<li>Haz clic en <strong>Aplicaciones<\/strong> en la barra lateral izquierda, y luego en <strong>A\u00f1adir aplicaci\u00f3n<\/strong>.<\/li>\n<li>En el panel de control, haz clic en <strong>A\u00f1adir servicio<\/strong> y selecciona <strong>Aplicaci\u00f3n<\/strong>.<\/li>\n<li>Selecciona el repositorio y la rama desde la que deseas desplegar.<\/li>\n<li>Asigna un nombre \u00fanico a tu aplicaci\u00f3n y elige la <strong>ubicaci\u00f3n del centro de datos<\/strong>.<\/li>\n<li>Para configurar el entorno de <strong>Construcci\u00f3n<\/strong>, selecciona la opci\u00f3n de utilizar un <a href=\"https:\/\/docs.sevalla.com\/applications\/build-options\/dockerfile\"><strong>Dockerfile<\/strong> para construir la imagen del contenedor<\/a>.<\/li>\n<li>Proporciona la ruta a tu Dockerfile y el contexto.<\/li>\n<li>Por \u00faltimo, revisa el resto de la informaci\u00f3n y haz clic en <strong>Crear aplicaci\u00f3n<\/strong>.<\/li>\n<\/ol>\n<h3>Prueba el Microservicio<\/h3>\n<p>Una vez que el proceso de despliegue se haya realizado correctamente, haz clic en la <a href=\"https:\/\/flask-microservice-tutorial-3dhgr.kinsta.app\/\" target=\"_blank\" rel=\"noopener noreferrer\">URL<\/a> proporcionada para probar el microservicio realizando peticiones HTTP en Postman. Haz una petici\u00f3n <code>GET<\/code> al endpoint ra\u00edz.<\/p>\n<figure style=\"width: 1001px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/11\/testing-deployed-microservice.jpg\" alt=\"Solicitud GET correcta a la URL del microservicio desplegado para la ruta Ra\u00edz\" width=\"1001\" height=\"471\"><figcaption class=\"wp-caption-text\">Haz una petici\u00f3n HTTP API <code>GET<\/code> al endpoint <code>product<\/code> del microservicio.<\/figcaption><\/figure>\n<p>Para autenticarte y generar un token JWT, env\u00eda una solicitud <code>POST<\/code> al endpoint de la API <code>\/auth<\/code>, pasando las credenciales de administrador en el cuerpo de la solicitud.<\/p>\n<figure style=\"width: 1001px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/11\/microservice-authentication.jpg\" alt=\"Una petici\u00f3n POST a un Microservicio Auth Endpoint para autenticaci\u00f3n en Postman\" width=\"1001\" height=\"471\"><figcaption class=\"wp-caption-text\">Solicitud HTTP API <code>POST<\/code> al endpoint <code>auth<\/code> del microservicio.<\/figcaption><\/figure>\n<p>Por \u00faltimo, tras autenticarte correctamente, realiza una solicitud <code>GET<\/code> al endpoint <code>\/products<\/code> para obtener datos.<\/p>\n<figure style=\"width: 1001px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/11\/products-list.jpg\" alt=\"Petici\u00f3n GET de la API HTTP al endpoint de productos en Postman realizada con \u00e9xito\" width=\"1001\" height=\"471\"><figcaption class=\"wp-caption-text\">Solicitud de la API HTTP <code>GET<\/code> a un endpoint de microservicio <code>products<\/code>.<\/figcaption><\/figure>\n<h2>Resumen<\/h2>\n<p>A medida que las aplicaciones crecen en tama\u00f1o y complejidad, es crucial adoptar patrones de arquitectura que permitan a los sistemas de software escalar sin forzar los recursos disponibles.<\/p>\n<p>La arquitectura de microservicios ofrece escalabilidad, flexibilidad de desarrollo y facilidad de mantenimiento, facilit\u00e1ndote la gesti\u00f3n de aplicaciones complejas.<\/p>\n<p>Kinsta simplifica el proceso de alojar tus microservicios. Te permite utilizar sin esfuerzo tu base de datos preferida y alojar c\u00f3modamente tanto tu <a href=\"https:\/\/sevalla.com\/application-hosting\/\">aplicaci\u00f3n<\/a> como tu <a href=\"https:\/\/sevalla.com\/database-hosting\/\">base de datos<\/a> a trav\u00e9s de un panel de control unificado.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>En el desarrollo de software moderno, los microservicios han surgido como una arquitectura fundamental, que permite la escalabilidad, la flexibilidad y la gesti\u00f3n eficiente de sistemas &#8230;<\/p>\n","protected":false},"author":199,"featured_media":72205,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[],"topic":[1282,1319,1320],"class_list":["post-72204","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","topic-docker","topic-postgresql","topic-python"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v24.6 (Yoast SEO v24.6) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>C\u00f3mo Construir y Desplegar Microservicios con Python - Kinsta\u00ae<\/title>\n<meta name=\"description\" content=\"\u00a1Aprende a construir y desplegar microservicios eficientes utilizando Python para agilizar el desarrollo y mejorar el rendimiento!\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/kinsta.com\/es\/blog\/python-microservicios\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"C\u00f3mo Construir y Desplegar Microservicios con Python\" \/>\n<meta property=\"og:description\" content=\"\u00a1Aprende a construir y desplegar microservicios eficientes utilizando Python para agilizar el desarrollo y mejorar el rendimiento!\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinsta.com\/es\/blog\/python-microservicios\/\" \/>\n<meta property=\"og:site_name\" content=\"Kinsta\u00ae\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/kinsta.es\/\" \/>\n<meta property=\"article:published_time\" content=\"2023-12-05T12:25:51+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-12-15T14:15:16+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/12\/python-microservices.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"3043\" \/>\n\t<meta property=\"og:image:height\" content=\"1522\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Jeremy Holcombe\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:description\" content=\"\u00a1Aprende a construir y desplegar microservicios eficientes utilizando Python para agilizar el desarrollo y mejorar el rendimiento!\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/12\/python-microservices.jpg\" \/>\n<meta name=\"twitter:creator\" content=\"@Kinsta_ES\" \/>\n<meta name=\"twitter:site\" content=\"@Kinsta_ES\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Jeremy Holcombe\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data2\" content=\"13 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/kinsta.com\/es\/blog\/python-microservicios\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/python-microservicios\/\"},\"author\":{\"name\":\"Jeremy Holcombe\",\"@id\":\"https:\/\/kinsta.com\/es\/#\/schema\/person\/4eee42881d7b5a73ebb4f58dd5223b21\"},\"headline\":\"C\u00f3mo Construir y Desplegar Microservicios con Python\",\"datePublished\":\"2023-12-05T12:25:51+00:00\",\"dateModified\":\"2023-12-15T14:15:16+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/python-microservicios\/\"},\"wordCount\":2403,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/es\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/python-microservicios\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/12\/python-microservices.jpg\",\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/kinsta.com\/es\/blog\/python-microservicios\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinsta.com\/es\/blog\/python-microservicios\/\",\"url\":\"https:\/\/kinsta.com\/es\/blog\/python-microservicios\/\",\"name\":\"C\u00f3mo Construir y Desplegar Microservicios con Python - Kinsta\u00ae\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/es\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/python-microservicios\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/python-microservicios\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/12\/python-microservices.jpg\",\"datePublished\":\"2023-12-05T12:25:51+00:00\",\"dateModified\":\"2023-12-15T14:15:16+00:00\",\"description\":\"\u00a1Aprende a construir y desplegar microservicios eficientes utilizando Python para agilizar el desarrollo y mejorar el rendimiento!\",\"breadcrumb\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/python-microservicios\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinsta.com\/es\/blog\/python-microservicios\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/kinsta.com\/es\/blog\/python-microservicios\/#primaryimage\",\"url\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/12\/python-microservices.jpg\",\"contentUrl\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/12\/python-microservices.jpg\",\"width\":3043,\"height\":1522},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinsta.com\/es\/blog\/python-microservicios\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/kinsta.com\/es\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Python\",\"item\":\"https:\/\/kinsta.com\/es\/secciones\/python\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"C\u00f3mo Construir y Desplegar Microservicios con Python\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/kinsta.com\/es\/#website\",\"url\":\"https:\/\/kinsta.com\/es\/\",\"name\":\"Kinsta\u00ae\",\"description\":\"Soluciones de alojamiento premium, r\u00e1pidas y seguras\",\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/es\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/kinsta.com\/es\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/kinsta.com\/es\/#organization\",\"name\":\"Kinsta\",\"url\":\"https:\/\/kinsta.com\/es\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/kinsta.com\/es\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/12\/kinsta-logo.jpeg\",\"contentUrl\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/12\/kinsta-logo.jpeg\",\"width\":500,\"height\":500,\"caption\":\"Kinsta\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/es\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/kinsta.es\/\",\"https:\/\/x.com\/Kinsta_ES\",\"https:\/\/www.instagram.com\/kinstahosting\/\",\"https:\/\/www.linkedin.com\/company\/kinsta\/\",\"https:\/\/www.pinterest.com\/kinstahosting\/\",\"https:\/\/www.youtube.com\/c\/Kinsta\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/kinsta.com\/es\/#\/schema\/person\/4eee42881d7b5a73ebb4f58dd5223b21\",\"name\":\"Jeremy Holcombe\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/kinsta.com\/es\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/0e17001f3bb37dbbe54fceef9bb547fa?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/0e17001f3bb37dbbe54fceef9bb547fa?s=96&d=mm&r=g\",\"caption\":\"Jeremy Holcombe\"},\"description\":\"Senior Editor at Kinsta, WordPress Web Developer, and Content Writer. Outside of all things WordPress, I enjoy the beach, golf, and movies. I also have tall people problems.\",\"sameAs\":[\"https:\/\/www.linkedin.com\/in\/jeremyholcombe\/\"],\"url\":\"https:\/\/kinsta.com\/es\/blog\/author\/jeremyholcombe\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"C\u00f3mo Construir y Desplegar Microservicios con Python - Kinsta\u00ae","description":"\u00a1Aprende a construir y desplegar microservicios eficientes utilizando Python para agilizar el desarrollo y mejorar el rendimiento!","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/kinsta.com\/es\/blog\/python-microservicios\/","og_locale":"es_ES","og_type":"article","og_title":"C\u00f3mo Construir y Desplegar Microservicios con Python","og_description":"\u00a1Aprende a construir y desplegar microservicios eficientes utilizando Python para agilizar el desarrollo y mejorar el rendimiento!","og_url":"https:\/\/kinsta.com\/es\/blog\/python-microservicios\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/kinsta.es\/","article_published_time":"2023-12-05T12:25:51+00:00","article_modified_time":"2023-12-15T14:15:16+00:00","og_image":[{"width":3043,"height":1522,"url":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/12\/python-microservices.jpg","type":"image\/jpeg"}],"author":"Jeremy Holcombe","twitter_card":"summary_large_image","twitter_description":"\u00a1Aprende a construir y desplegar microservicios eficientes utilizando Python para agilizar el desarrollo y mejorar el rendimiento!","twitter_image":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/12\/python-microservices.jpg","twitter_creator":"@Kinsta_ES","twitter_site":"@Kinsta_ES","twitter_misc":{"Escrito por":"Jeremy Holcombe","Tiempo de lectura":"13 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinsta.com\/es\/blog\/python-microservicios\/#article","isPartOf":{"@id":"https:\/\/kinsta.com\/es\/blog\/python-microservicios\/"},"author":{"name":"Jeremy Holcombe","@id":"https:\/\/kinsta.com\/es\/#\/schema\/person\/4eee42881d7b5a73ebb4f58dd5223b21"},"headline":"C\u00f3mo Construir y Desplegar Microservicios con Python","datePublished":"2023-12-05T12:25:51+00:00","dateModified":"2023-12-15T14:15:16+00:00","mainEntityOfPage":{"@id":"https:\/\/kinsta.com\/es\/blog\/python-microservicios\/"},"wordCount":2403,"commentCount":0,"publisher":{"@id":"https:\/\/kinsta.com\/es\/#organization"},"image":{"@id":"https:\/\/kinsta.com\/es\/blog\/python-microservicios\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/12\/python-microservices.jpg","inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/kinsta.com\/es\/blog\/python-microservicios\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/kinsta.com\/es\/blog\/python-microservicios\/","url":"https:\/\/kinsta.com\/es\/blog\/python-microservicios\/","name":"C\u00f3mo Construir y Desplegar Microservicios con Python - Kinsta\u00ae","isPartOf":{"@id":"https:\/\/kinsta.com\/es\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinsta.com\/es\/blog\/python-microservicios\/#primaryimage"},"image":{"@id":"https:\/\/kinsta.com\/es\/blog\/python-microservicios\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/12\/python-microservices.jpg","datePublished":"2023-12-05T12:25:51+00:00","dateModified":"2023-12-15T14:15:16+00:00","description":"\u00a1Aprende a construir y desplegar microservicios eficientes utilizando Python para agilizar el desarrollo y mejorar el rendimiento!","breadcrumb":{"@id":"https:\/\/kinsta.com\/es\/blog\/python-microservicios\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinsta.com\/es\/blog\/python-microservicios\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/kinsta.com\/es\/blog\/python-microservicios\/#primaryimage","url":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/12\/python-microservices.jpg","contentUrl":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/12\/python-microservices.jpg","width":3043,"height":1522},{"@type":"BreadcrumbList","@id":"https:\/\/kinsta.com\/es\/blog\/python-microservicios\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kinsta.com\/es\/"},{"@type":"ListItem","position":2,"name":"Python","item":"https:\/\/kinsta.com\/es\/secciones\/python\/"},{"@type":"ListItem","position":3,"name":"C\u00f3mo Construir y Desplegar Microservicios con Python"}]},{"@type":"WebSite","@id":"https:\/\/kinsta.com\/es\/#website","url":"https:\/\/kinsta.com\/es\/","name":"Kinsta\u00ae","description":"Soluciones de alojamiento premium, r\u00e1pidas y seguras","publisher":{"@id":"https:\/\/kinsta.com\/es\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/kinsta.com\/es\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Organization","@id":"https:\/\/kinsta.com\/es\/#organization","name":"Kinsta","url":"https:\/\/kinsta.com\/es\/","logo":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/kinsta.com\/es\/#\/schema\/logo\/image\/","url":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/12\/kinsta-logo.jpeg","contentUrl":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/12\/kinsta-logo.jpeg","width":500,"height":500,"caption":"Kinsta"},"image":{"@id":"https:\/\/kinsta.com\/es\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/kinsta.es\/","https:\/\/x.com\/Kinsta_ES","https:\/\/www.instagram.com\/kinstahosting\/","https:\/\/www.linkedin.com\/company\/kinsta\/","https:\/\/www.pinterest.com\/kinstahosting\/","https:\/\/www.youtube.com\/c\/Kinsta"]},{"@type":"Person","@id":"https:\/\/kinsta.com\/es\/#\/schema\/person\/4eee42881d7b5a73ebb4f58dd5223b21","name":"Jeremy Holcombe","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/kinsta.com\/es\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/0e17001f3bb37dbbe54fceef9bb547fa?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/0e17001f3bb37dbbe54fceef9bb547fa?s=96&d=mm&r=g","caption":"Jeremy Holcombe"},"description":"Senior Editor at Kinsta, WordPress Web Developer, and Content Writer. Outside of all things WordPress, I enjoy the beach, golf, and movies. I also have tall people problems.","sameAs":["https:\/\/www.linkedin.com\/in\/jeremyholcombe\/"],"url":"https:\/\/kinsta.com\/es\/blog\/author\/jeremyholcombe\/"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/posts\/72204","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/users\/199"}],"replies":[{"embeddable":true,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/comments?post=72204"}],"version-history":[{"count":6,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/posts\/72204\/revisions"}],"predecessor-version":[{"id":72544,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/posts\/72204\/revisions\/72544"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/72204\/translations\/en"},{"embeddable":true,"hreflang":"pt","title":"Portuguese","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/72204\/translations\/pt"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/72204\/translations\/fr"},{"embeddable":true,"hreflang":"de","title":"German","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/72204\/translations\/de"},{"embeddable":true,"hreflang":"ja","title":"Japanese","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/72204\/translations\/jp"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/72204\/translations\/es"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/72204\/translations\/it"},{"href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/72204\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/media\/72205"}],"wp:attachment":[{"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/media?parent=72204"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/tags?post=72204"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/topic?post=72204"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}