{"id":65608,"date":"2023-12-05T09:26:38","date_gmt":"2023-12-05T12:26:38","guid":{"rendered":"https:\/\/kinsta.com\/pt\/?p=65608&#038;preview=true&#038;preview_id=65608"},"modified":"2023-12-28T12:24:54","modified_gmt":"2023-12-28T15:24:54","slug":"microsservicos-python","status":"publish","type":"post","link":"https:\/\/kinsta.com\/pt\/blog\/microsservicos-python\/","title":{"rendered":"Como Criar e Implantar Microsservi\u00e7os com Python"},"content":{"rendered":"<p>No desenvolvimento moderno de software, os microsservi\u00e7os surgiram como uma arquitetura essencial, permitindo o dimensionamento, a flexibilidade e o gerenciamento eficiente de sistemas complexos.<\/p>\n<p>Microsservi\u00e7os s\u00e3o pequenos aplicativos independentes que executam tarefas espec\u00edficas, permitindo uma implanta\u00e7\u00e3o flex\u00edvel e escalonamento. Essa abordagem modular para o design de software reduz o acoplamento entre componentes, aumentando a flexibilidade e a capacidade de gerenciamento ao longo do desenvolvimento.<\/p>\n<p>O artigo apresenta uma vis\u00e3o geral dos <a href=\"https:\/\/kinsta.com\/pt\/blog\/microservicos-vs-api\/\">microsservi\u00e7os<\/a>, sua funcionalidade e sua cria\u00e7\u00e3o usando <a href=\"https:\/\/kinsta.com\/pt\/blog\/comandos-python\/\">Python<\/a>. Ele tamb\u00e9m demonstra a implanta\u00e7\u00e3o de seus microsservi\u00e7os na Kinsta usando um <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>O que s\u00e3o microsservi\u00e7os?<\/h2>\n<p>Os microsservi\u00e7os s\u00e3o servi\u00e7os independentes e aut\u00f4nomos dentro de um aplicativo, cada um atendendo a necessidades comerciais espec\u00edficas. Eles se comunicam por meio de <a href=\"https:\/\/kinsta.com\/pt\/blog\/endpoint-api\/\">APIs<\/a> leves ou corretores de mensagens, formando um sistema abrangente.<\/p>\n<p>Ao contr\u00e1rio dos sistemas <a href=\"https:\/\/kinsta.com\/pt\/blog\/function-as-a-service\/#how-does-faas-work\">monol\u00edticos<\/a> que s\u00e3o dimensionados inteiramente com base na demanda, os microsservi\u00e7os permitem o dimensionamento de componentes individuais de alto tr\u00e1fego. Essa arquitetura facilita o gerenciamento de falhas e as atualiza\u00e7\u00f5es de recursos, contrariando as limita\u00e7\u00f5es monol\u00edticas.<\/p>\n<p>H\u00e1 v\u00e1rios benef\u00edcios no uso de microsservi\u00e7os, tais como:<\/p>\n<ul>\n<li><strong>Flexibilidade e<\/strong> <strong>dimensionamento<\/strong> &#8211; O desacoplamento de servi\u00e7os individuais permite que voc\u00ea aumente o n\u00famero de nodes que executam uma inst\u00e2ncia de um determinado servi\u00e7o com alto tr\u00e1fego.<\/li>\n<li><strong>Modularidade do c\u00f3digo<\/strong> &#8211; Cada servi\u00e7o pode usar uma pilha de tecnologia discreta, o que significa que voc\u00ea pode escolher as melhores ferramentas de desenvolvimento para cada um deles.<\/li>\n<\/ul>\n<p>No entanto, algumas dificuldades acompanham as arquiteturas de microsservi\u00e7os:<\/p>\n<ul>\n<li><strong>Monitoramento de v\u00e1rios servi\u00e7os<\/strong> &#8211; O monitoramento de servi\u00e7os individuais em um sistema torna-se um desafio \u00e0 medida que as inst\u00e2ncias de um determinado servi\u00e7o s\u00e3o implantadas e distribu\u00eddas em v\u00e1rios nodes. Essa dificuldade \u00e9 especialmente aparente durante falhas de rede ou outros problemas do sistema.<\/li>\n<li><strong>Custo<\/strong> &#8211; O desenvolvimento de aplicativos de microsservi\u00e7os pode ser significativamente mais caro do que a cria\u00e7\u00e3o de sistemas monol\u00edticos devido aos custos associados ao gerenciamento de v\u00e1rios servi\u00e7os. Cada servi\u00e7o requer sua pr\u00f3pria infraestrutura e seus pr\u00f3prios recursos, o que pode se tornar dispendioso, principalmente quando voc\u00ea estiver ampliando o sistema.<\/li>\n<\/ul>\n<h2>Como projetar um microsservi\u00e7o usando Python<\/h2>\n<p>Agora que voc\u00ea conhece os benef\u00edcios de usar uma arquitetura de microsservi\u00e7o, \u00e9 hora de criar uma com Python.<\/p>\n<p>Para este exemplo, suponha que voc\u00ea queira criar um aplicativo web de <a href=\"https:\/\/kinsta.com\/ecommerce\/\">eCommerce<\/a>. O site tem v\u00e1rios componentes, incluindo o cat\u00e1logo de produtos, uma lista de pedidos e um sistema de processamento de pagamentos e registros, cada um dos quais voc\u00ea precisa implementar como um servi\u00e7o independente. Al\u00e9m disso, voc\u00ea precisa estabelecer um m\u00e9todo de comunica\u00e7\u00e3o servi\u00e7o a servi\u00e7o para transferir dados entre esses servi\u00e7os, como <a href=\"https:\/\/kinsta.com\/pt\/blog\/lista-codigos-status-http\/\">HTTP<\/a>, de forma eficiente.<\/p>\n<p>Vamos criar um microsservi\u00e7o usando Python para gerenciar um cat\u00e1logo de produtos. O microsservi\u00e7o buscar\u00e1 dados de produtos de uma fonte especificada e retornar\u00e1 os dados no formato JSON.<\/p>\n<h3>Pr\u00e9-requisitos<\/h3>\n<p>Para seguir este tutorial, certifique-se de que voc\u00ea tenha:<\/p>\n<ul>\n<li>Familiaridade com o <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\/pt\/blog\/instalar-python\/\">Python<\/a>, <a href=\"https:\/\/www.postman.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">Postman Client<\/a> e <a href=\"https:\/\/www.docker.com\/products\/docker-desktop\/\" target=\"_blank\" rel=\"noopener noreferrer\">Docker Desktop<\/a> instalados em seu computador<\/li>\n<\/ul>\n<h3>1. Crie seu projeto<\/h3>\n<ol start=\"1\">\n<li>Para come\u00e7ar, crie uma pasta para o seu projeto chamado <strong>flask-microservice<\/strong> e o diret\u00f3rio atual no diret\u00f3rio do projeto.<\/li>\n<li>Em seguida, execute <code>python3 --version<\/code> para confirmar se o Python est\u00e1 instalado corretamente em seu computador.<\/li>\n<li>Instale o site <code>virtualenv<\/code> para criar um ambiente de desenvolvimento isolado para o microsservi\u00e7o Flask executando o comando abaixo:\n<pre><code class=\"language-bash\">pip3 install virtualenv<\/code><\/pre>\n<\/li>\n<li>Crie um ambiente virtual executando o seguinte:\n<pre><code class=\"language-bash\">virtualenv venv<\/code><\/pre>\n<\/li>\n<li>Por fim, ative o ambiente virtual usando um dos seguintes comandos, de acordo com o sistema operacional do seu computador:\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. Configure um servidor Flask<\/h3>\n<p>No diret\u00f3rio raiz, crie um arquivo <strong>requirements.txt<\/strong> e adicione essas depend\u00eancias.<\/p>\n<pre><code class=\"language-bash\">flask\nrequests<\/code><\/pre>\n<p>Execute o arquivo <code><a href=\"https:\/\/kinsta.com\/pt\/blog\/frameworks-python\/#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>Em seguida, crie uma nova pasta no diret\u00f3rio raiz e nomeie-a como <strong>services<\/strong>. Dentro dessa pasta, crie um novo arquivo, <strong>products.py<\/strong>, e adicione o c\u00f3digo abaixo para configurar um 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>No c\u00f3digo acima, um servidor Flask b\u00e1sico \u00e9 configurado. Ele inicializa um aplicativo Flask, define uma \u00fanica rota para a URL raiz (<code>\"\/\"<\/code>) e, quando acessado, exibe a mensagem <code>\"Hello, this is a Flask Microservice\"<\/code>. O servidor \u00e9 executado em uma porta especifica, obtida de uma vari\u00e1vel de ambiente ou tem como padr\u00e3o a porta <code>5000<\/code>, e \u00e9 iniciado no modo de depura\u00e7\u00e3o, deixando pronto para lidar com as solicita\u00e7\u00f5es recebidas.<\/p>\n<h3>3. Defina os endpoints da API<\/h3>\n<p>Com o servidor configurado, crie um endpoint de API para um microsservi\u00e7o que busca dados de produtos em uma <a href=\"https:\/\/dummyjson.com\" target=\"_blank\" rel=\"noopener noreferrer\">API dispon\u00edvel publicamente<\/a>. Adicione este c\u00f3digo ao arquivo <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>O c\u00f3digo acima cria um endpoint <code>\/products<\/code> no servidor Flask. Quando acessado via uma requisi\u00e7\u00e3o GET, ele busca dados de produtos de uma API dummy. Se bem-sucedido, processa os dados obtidos, extrai detalhes do produto e retorna as informa\u00e7\u00f5es em formato JSON. Em caso de erros ou aus\u00eancia de dados dispon\u00edveis, responde com uma mensagem de erro apropriada e c\u00f3digo de status.<\/p>\n<h3>4. Teste o microsservi\u00e7o<\/h3>\n<p>Neste ponto, voc\u00ea configurou com \u00eaxito um microsservi\u00e7o simples. Para iniciar o servi\u00e7o, ative o servidor de desenvolvimento, que come\u00e7ar\u00e1 a ser executado em <code>http:\/\/localhost:5000<\/code>.<\/p>\n<pre><code class=\"language-bash\">flask --app services\/products run<\/code><\/pre>\n<p>Em seguida, voc\u00ea pode fazer uma solicita\u00e7\u00e3o <code>GET<\/code> para o endpoint <code>\/products<\/code> usando o cliente Postman. Voc\u00ea dever\u00e1 ver uma resposta semelhante \u00e0 captura de tela abaixo.<\/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=\"Testando a solicita\u00e7\u00e3o da API HTTP GET no Postman.\" width=\"1001\" height=\"471\"><figcaption class=\"wp-caption-text\">Testando a solicita\u00e7\u00e3o da API HTTP <code>GET<\/code> no Postman.<\/figcaption><\/figure>\n<h2>Como implementar a autentica\u00e7\u00e3o e a autoriza\u00e7\u00e3o em um microsservi\u00e7o Python<\/h2>\n<p>Ao criar microsservi\u00e7os, \u00e9 importante implementar medidas de seguran\u00e7a robustas, como autentica\u00e7\u00e3o e autoriza\u00e7\u00e3o. A seguran\u00e7a do microsservi\u00e7o garante que somente usu\u00e1rios autorizados possam acessar e usar o servi\u00e7o, protegendo dados confidenciais e evitando ataques mal-intencionados.<\/p>\n<p>Um m\u00e9todo eficaz para implementar autentica\u00e7\u00e3o e autoriza\u00e7\u00e3o seguras em microsservi\u00e7os s\u00e3o os JWTs (JSON Web Tokens).<\/p>\n<p>O JWT \u00e9 um padr\u00e3o aberto amplamente usado que oferece uma maneira segura e eficiente de transmitir informa\u00e7\u00f5es de autentica\u00e7\u00e3o entre clientes e servidores. Eles s\u00e3o tokens compactos, criptografados e assinados digitalmente que voc\u00ea transmite junto com as solicita\u00e7\u00f5es HTTP. Quando voc\u00ea inclui um JWT em cada solicita\u00e7\u00e3o, o servidor pode verificar rapidamente a identidade e as permiss\u00f5es de um usu\u00e1rio.<\/p>\n<p>Para implementar a autentica\u00e7\u00e3o JWT no microsservi\u00e7o, fa\u00e7a o seguinte:<\/p>\n<ol start=\"1\">\n<li>Adicione o pacote <code>pyjwt<\/code> do Python ao seu arquivo <strong>requirements.txt<\/strong> e reinstale as depend\u00eancias usando <code>pip install -r requirements.txt<\/code>.<\/li>\n<li>Como o servi\u00e7o n\u00e3o tem um banco de dados dedicado, crie um arquivo <strong>users.json<\/strong> no diret\u00f3rio raiz do seu projeto para armazenar uma lista de usu\u00e1rios autorizados. Cole o c\u00f3digo abaixo no arquivo:\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>Voc\u00ea pode configurar facilmente seu banco de dados preferido (<a href=\"https:\/\/kinsta.com\/pt\/blog\/o-que-e-postgresql\/\">PostgreSQL<\/a>, <a href=\"https:\/\/kinsta.com\/pt\/blog\/mariadb-python\/\">MariaDB<\/a>, <a href=\"https:\/\/kinsta.com\/pt\/blog\/executar-redis-no-docker\/\">Redis<\/a> e <a href=\"https:\/\/kinsta.com\/pt\/topicos\/banco-de-dados-mysql\/\">MySQL<\/a>) para seus microsservi\u00e7os com nosso servi\u00e7o de <a href=\"https:\/\/sevalla.com\/database-hosting\/\">hospedagem de banco de dados<\/a>.<\/p>\n<\/aside>\n<\/li>\n<li>Em seguida, em seu arquivo <strong>services\/products.py<\/strong>, substitua as instru\u00e7\u00f5es de importa\u00e7\u00e3o pelo seguinte:\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>Voc\u00ea est\u00e1 importando esses m\u00f3dulos para lidar com solicita\u00e7\u00f5es HTTP, criar um aplicativo Flask, gerenciar dados JSON, implementar autentica\u00e7\u00e3o baseada em JWT e lidar com exce\u00e7\u00f5es, permitindo uma ampla gama de recursos no servidor <a href=\"https:\/\/kinsta.com\/pt\/blog\/flask-vs-django\/\">Flask<\/a>.<\/li>\n<li>Adicione o seguinte c\u00f3digo abaixo da cria\u00e7\u00e3o da inst\u00e2ncia do aplicativo Flask para gerar uma chave secreta que ser\u00e1 usada para assinar os tokens JWT.\n<pre><code class=\"language-python\">app.config['SECRET_KEY'] = os.urandom(24)<\/code><\/pre>\n<\/li>\n<li>Para verificar os JWTs, crie uma fun\u00e7\u00e3o de decorador e adicione o seguinte c\u00f3digo acima das rotas de API no c\u00f3digo do servidor Flask. Essa fun\u00e7\u00e3o de decorador autenticar\u00e1 e validar\u00e1 os usu\u00e1rios antes que eles acessem as rotas 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>Essa fun\u00e7\u00e3o de decorador verifica as solicita\u00e7\u00f5es HTTP de entrada em busca de um token de autoriza\u00e7\u00e3o JWT, que deve estar nos cabe\u00e7alhos de solicita\u00e7\u00e3o ou nos cookies. Se o token estiver faltando ou for inv\u00e1lido, o decorador enviar\u00e1 uma mensagem <code>unauthorized status code<\/code> como resposta.<\/p>\n<p>Por outro lado, se um token v\u00e1lido estiver presente, o decorador extrai a ID do usu\u00e1rio ap\u00f3s decodific\u00e1-la. Esse processo protege os endpoints de API protegidos, concedendo acesso somente a usu\u00e1rios autorizados.<\/li>\n<li>Defina um endpoint de API para autentica\u00e7\u00e3o de usu\u00e1rio usando o c\u00f3digo abaixo.\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 e autorizar os usu\u00e1rios, o endpoint da API <code>\/auth<\/code> verifica as credenciais no payload JSON da solicita\u00e7\u00e3o <code>POST<\/code> em rela\u00e7\u00e3o \u00e0 lista de usu\u00e1rios permitidos. Se as credenciais forem v\u00e1lidas, ele gera um token JWT usando o ID do usu\u00e1rio e a chave secreta do aplicativo e define o token como um cookie na resposta. Os usu\u00e1rios agora podem usar esse token para fazer solicita\u00e7\u00f5es de API subsequentes.<\/p>\n<p>Depois de criar o endpoint <code>\/auth<\/code>, use o Postman para enviar uma solicita\u00e7\u00e3o HTTP <code>POST<\/code> para <code>http:\/\/localhost:5000\/auth<\/code>. No corpo da solicita\u00e7\u00e3o, inclua as credenciais do usu\u00e1rio administrador simulado que voc\u00ea criou.<\/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=\"Solicita\u00e7\u00e3o do Postman mostrando o corpo da solicita\u00e7\u00e3o.\" width=\"1001\" height=\"471\"><figcaption class=\"wp-caption-text\">Solicita\u00e7\u00e3o do Postman mostrando o corpo da solicita\u00e7\u00e3o.<\/figcaption><\/figure>\n<p>Se a solicita\u00e7\u00e3o for bem-sucedida, a API gerar\u00e1 um token JWT, o definir\u00e1 nos cookies do Postman e enviar\u00e1 uma resposta de sucesso autenticada.<\/li>\n<li>Por fim, atualize o endpoint da API <code>GET<\/code> para verificar o token JWT usando o c\u00f3digo abaixo:\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>Como colocar microsservi\u00e7os Python em cont\u00eaineres com o Docker<\/h2>\n<p>O <a href=\"https:\/\/kinsta.com\/pt\/blog\/que-e-docker\/\">Docker<\/a> \u00e9 uma plataforma que empacota aplicativos e suas depend\u00eancias em um ambiente de desenvolvimento isolado. O empacotamento de microsservi\u00e7os em cont\u00eaineres simplifica os processos de implanta\u00e7\u00e3o e gerenciamento nos servidores, pois cada servi\u00e7o \u00e9 executado de forma independente em seu cont\u00eainer.<\/p>\n<p>Para cont\u00eainerizar o microsservi\u00e7o, voc\u00ea deve criar uma imagem do Docker a partir de um <a href=\"https:\/\/docs.sevalla.com\/applications\/build-options\/dockerfile\">Dockerfile<\/a> que especifique as depend\u00eancias necess\u00e1rias para executar o aplicativo em um cont\u00eainer. Crie um <strong>Dockerfile<\/strong> no diret\u00f3rio raiz do seu projeto e adicione estas instru\u00e7\u00f5es:<\/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 criar a imagem, voc\u00ea deve revisar estes comandos:<\/p>\n<ul>\n<li><code>FROM<\/code> &#8211; Instrui o Docker sobre qual imagem de base voc\u00ea deve usar. Uma imagem de base \u00e9 uma inst\u00e2ncia pr\u00e9-criada que cont\u00e9m o software e as depend\u00eancias para executar o aplicativo Flask em um cont\u00eainer.<\/li>\n<li><code>WORKDIR<\/code> &#8211; Define o diret\u00f3rio especificado dentro do cont\u00eainer como o diret\u00f3rio de trabalho.<\/li>\n<li><code>COPY requirements.txt .\/<\/code> &#8211; Copia as depend\u00eancias do arquivo <strong>requirements.txt<\/strong> para o arquivo <strong>requirements.txt<\/strong> do cont\u00eainer.<\/li>\n<li><code>RUN<\/code> &#8211; Executa o comando especifico para instalar as depend\u00eancias que a imagem requer.<\/li>\n<li><code>COPY . .<\/code> &#8211; Copia todos os arquivos do diret\u00f3rio raiz do projeto para o diret\u00f3rio de trabalho dentro do cont\u00eainer.<\/li>\n<li><code>EXPOSE<\/code> &#8211; Especifica a porta em que o cont\u00eainer escutar\u00e1 as solicita\u00e7\u00f5es. No entanto, o Docker n\u00e3o publica a porta na m\u00e1quina host.<\/li>\n<li><code>CMD<\/code> &#8211; Especifica o comando padr\u00e3o a ser executado quando o cont\u00eainer for iniciado.<\/li>\n<\/ul>\n<p>Em seguida, adicione um arquivo <strong>.dockerignore <\/strong>no diret\u00f3rio raiz do seu projeto para especificar os arquivos que a imagem do Docker deve excluir. Limitar o conte\u00fado da imagem reduzir\u00e1 seu tamanho final e o tempo de build associado.<\/p>\n<pre><code class=\"language-bash\">\/venv\n\/services\/__pycache__\/\n.gitignore<\/code><\/pre>\n<p>Agora, execute o comando abaixo para criar a imagem do Docker:<\/p>\n<pre><code class=\"language-bash\">docker build -t flask-microservice .<\/code><\/pre>\n<p>Por fim, depois que a imagem for criada, voc\u00ea poder\u00e1 executar o microsservi\u00e7o em um cont\u00eainer do Docker usando o seguinte comando:<\/p>\n<pre><code class=\"language-bash\">docker run -p 5000:5000 flask-microservice<\/code><\/pre>\n<p>Este comando iniciar\u00e1 um cont\u00eainer Docker executando o microsservi\u00e7o e mapear\u00e1 a porta 5000 do cont\u00eainer para a porta 5000 na m\u00e1quina host, permitindo que voc\u00ea fa\u00e7a requisi\u00e7\u00f5es HTTP a partir do seu navegador web ou Postman usando a URL <code>http:\/\/localhost:5000<\/code>.<\/p>\n<h2>Implante microsservi\u00e7os Python com a Kinsta<\/h2>\n<p>A Kinsta oferece solu\u00e7\u00f5es de hospedagem gerenciada para aplicativos web e bancos de dados &#8211; voc\u00ea pode implantar e gerenciar perfeitamente seus microsservi\u00e7os Python e APIs de backend em um ambiente de produ\u00e7\u00e3o.<\/p>\n<p>Siga estas etapas para configurar seu microsservi\u00e7o Flask para implanta\u00e7\u00e3o com o MyKinsta:<\/p>\n<ol start=\"1\">\n<li>Primeiro, crie um novo <strong>Procfile<\/strong> no diret\u00f3rio raiz e adicione o c\u00f3digo abaixo. Ele especifica o comando para executar o microsservi\u00e7o do Flask no servidor HTTP Gunicorn WSGI da Kinsta para aplicativos Python.\n<pre><code class=\"language-bash\">web: gunicorn services.wsgi<\/code><\/pre>\n<\/li>\n<li>Em seu arquivo <strong>requirements.txt<\/strong>, adicione a depend\u00eancia do Gunicorn:\n<pre><code class=\"language-bash\">gunicorn==20.1.*<\/code><\/pre>\n<\/li>\n<li>Em seguida, crie um novo arquivo <strong>services\/wsgi.py<\/strong> e adicione o c\u00f3digo abaixo.\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>Crie um arquivo <strong>.gitignore<\/strong> na pasta raiz do projeto e adicione o seguinte:\n<pre><code class=\"language-bash\">services\/__pycache__\nvenv<\/code><\/pre>\n<\/li>\n<li>Por fim, crie um novo reposit\u00f3rio no GitHub e fa\u00e7a push dos arquivos do projeto.<\/li>\n<\/ol>\n<p>Quando seu reposit\u00f3rio estiver pronto, siga estas etapas para implantar o microsservi\u00e7o do Flask na Kinsta:<\/p>\n<ol start=\"1\">\n<li>Fa\u00e7a login ou crie uma conta para visualizar seu painel <a href=\"https:\/\/my.kinsta.com\/?lang=pt\" target=\"_blank\" rel=\"noopener noreferrer\">MyKinsta<\/a>.<\/li>\n<li>Autorize a Kinsta no seu provedor 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> ou <a href=\"https:\/\/docs.sevalla.com\/applications\/git\/gitlab#authorize-the-kinsta-gitlab-application\">GitLab<\/a>).<\/li>\n<li>Clique em <strong>Aplicativos<\/strong> na barra lateral esquerda e, em seguida, clique em <strong>Adicionar aplicativo<\/strong>.<\/li>\n<li>No painel, clique em <strong>Adicionar servi\u00e7o<\/strong> e selecione <strong>Aplicativo<\/strong>.<\/li>\n<li>Escolha o reposit\u00f3rio e a branch que voc\u00ea deseja usar para a implanta\u00e7\u00e3o.<\/li>\n<li>Atribua um nome exclusivo ao seu aplicativo e escolha um <strong>local de centro de dados<\/strong>.<\/li>\n<li>Para configurar o ambiente de <strong>build<\/strong>, selecione a op\u00e7\u00e3o para usar um <a href=\"https:\/\/docs.sevalla.com\/applications\/build-options\/dockerfile\"><strong>Dockerfile<\/strong> para criar a imagem do cont\u00eainer<\/a>.<\/li>\n<li>Forne\u00e7a o caminho para o seu Dockerfile e o contexto.<\/li>\n<li>Por fim, revise outras informa\u00e7\u00f5es e clique em <strong>Criar aplicativo<\/strong>.<\/li>\n<\/ol>\n<h3>Teste o microsservi\u00e7o<\/h3>\n<p>Quando o processo de implanta\u00e7\u00e3o for bem-sucedido, clique na <a href=\"https:\/\/flask-microservice-tutorial-3dhgr.kinsta.app\/\" target=\"_blank\" rel=\"noopener noreferrer\">URL<\/a> fornecida para testar o microsservi\u00e7o fazendo solicita\u00e7\u00f5es HTTP no Postman. Fa\u00e7a uma solicita\u00e7\u00e3o <code>GET<\/code> para o endpoint raiz.<\/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=\"Fa\u00e7a uma solicita\u00e7\u00e3o HTTP API GET para o endpoint product do microsservi\u00e7o.\" width=\"1001\" height=\"471\"><figcaption class=\"wp-caption-text\">Fa\u00e7a uma solicita\u00e7\u00e3o HTTP API <code>GET<\/code> para o endpoint <code>product<\/code> do microsservi\u00e7o.<\/figcaption><\/figure>\n<p>Para autenticar e gerar um token JWT, envie uma solicita\u00e7\u00e3o <code>POST<\/code> para o endpoint da API <code>\/auth<\/code>, passando as credenciais de administrador no corpo da solicita\u00e7\u00e3o.<\/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=\"Solicita\u00e7\u00e3o de API HTTP POST para o endpoint do microsservi\u00e7o auth.\" width=\"1001\" height=\"471\"><figcaption class=\"wp-caption-text\">Solicita\u00e7\u00e3o de API HTTP <code>POST<\/code> para o endpoint do microsservi\u00e7o <code>auth<\/code>.<\/figcaption><\/figure>\n<p>Por fim, ap\u00f3s a autentica\u00e7\u00e3o bem-sucedida, fa\u00e7a uma solicita\u00e7\u00e3o <code>GET<\/code> para o endpoint <code>\/products<\/code> para buscar dados.<\/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=\"Solicita\u00e7\u00e3o da API HTTP GET para um endpoint do microsservi\u00e7o products.\" width=\"1001\" height=\"471\"><figcaption class=\"wp-caption-text\">Solicita\u00e7\u00e3o da API HTTP <code>GET<\/code> para um endpoint do microsservi\u00e7o <code>products<\/code>.<\/figcaption><\/figure>\n<h2>Resumo<\/h2>\n<p>\u00c0 medida que os aplicativos aumentam em tamanho e complexidade, \u00e9 fundamental adotar padr\u00f5es de arquitetura que permitam que os sistemas de software sejam dimensionados sem sobrecarregar os recursos dispon\u00edveis.<\/p>\n<p>A arquitetura de microsservi\u00e7os oferece escalabilidade, flexibilidade de desenvolvimento e facilidade de manuten\u00e7\u00e3o, tornando mais f\u00e1cil para voc\u00ea gerenciar aplicativos complexos.<\/p>\n<p>A Kinsta simplifica o processo de hospedagem de seus microsservi\u00e7os. Ele permite que voc\u00ea use sem esfor\u00e7o o banco de dados de sua prefer\u00eancia e hospede de forma conveniente o <a href=\"https:\/\/sevalla.com\/application-hosting\/\">aplicativo<\/a> e o <a href=\"https:\/\/sevalla.com\/database-hosting\/\">banco de dados<\/a> por meio de um painel unificado.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>No desenvolvimento moderno de software, os microsservi\u00e7os surgiram como uma arquitetura essencial, permitindo o dimensionamento, a flexibilidade e o gerenciamento eficiente de sistemas complexos. Microsservi\u00e7os s\u00e3o &#8230;<\/p>\n","protected":false},"author":199,"featured_media":65609,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[],"topic":[963,1000,1001],"class_list":["post-65608","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>Como Criar e Implantar Microsservi\u00e7os com Python - Kinsta\u00ae<\/title>\n<meta name=\"description\" content=\"Aprenda como construir e implantar microsservi\u00e7os eficientes usando Python para otimizar o desenvolvimento e melhorar o desempenho!\" \/>\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\/pt\/blog\/microsservicos-python\/\" \/>\n<meta property=\"og:locale\" content=\"pt_PT\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Como Criar e Implantar Microsservi\u00e7os com Python\" \/>\n<meta property=\"og:description\" content=\"Aprenda como construir e implantar microsservi\u00e7os eficientes usando Python para otimizar o desenvolvimento e melhorar o desempenho!\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinsta.com\/pt\/blog\/microsservicos-python\/\" \/>\n<meta property=\"og:site_name\" content=\"Kinsta\u00ae\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/kinstapt\/\" \/>\n<meta property=\"article:published_time\" content=\"2023-12-05T12:26:38+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-12-28T15:24:54+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/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=\"Aprenda como construir e implantar microsservi\u00e7os eficientes usando Python para otimizar o desenvolvimento e melhorar o desempenho!\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/12\/python-microservices.jpg\" \/>\n<meta name=\"twitter:creator\" content=\"@kinsta_pt\" \/>\n<meta name=\"twitter:site\" content=\"@kinsta_pt\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Jeremy Holcombe\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tempo estimado de leitura\" \/>\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\/pt\/blog\/microsservicos-python\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/microsservicos-python\/\"},\"author\":{\"name\":\"Jeremy Holcombe\",\"@id\":\"https:\/\/kinsta.com\/pt\/#\/schema\/person\/4eee42881d7b5a73ebb4f58dd5223b21\"},\"headline\":\"Como Criar e Implantar Microsservi\u00e7os com Python\",\"datePublished\":\"2023-12-05T12:26:38+00:00\",\"dateModified\":\"2023-12-28T15:24:54+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/microsservicos-python\/\"},\"wordCount\":2497,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/pt\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/microsservicos-python\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/12\/python-microservices.jpg\",\"inLanguage\":\"pt-PT\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/kinsta.com\/pt\/blog\/microsservicos-python\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/microsservicos-python\/\",\"url\":\"https:\/\/kinsta.com\/pt\/blog\/microsservicos-python\/\",\"name\":\"Como Criar e Implantar Microsservi\u00e7os com Python - Kinsta\u00ae\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/pt\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/microsservicos-python\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/microsservicos-python\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/12\/python-microservices.jpg\",\"datePublished\":\"2023-12-05T12:26:38+00:00\",\"dateModified\":\"2023-12-28T15:24:54+00:00\",\"description\":\"Aprenda como construir e implantar microsservi\u00e7os eficientes usando Python para otimizar o desenvolvimento e melhorar o desempenho!\",\"breadcrumb\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/microsservicos-python\/#breadcrumb\"},\"inLanguage\":\"pt-PT\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinsta.com\/pt\/blog\/microsservicos-python\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-PT\",\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/microsservicos-python\/#primaryimage\",\"url\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/12\/python-microservices.jpg\",\"contentUrl\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/12\/python-microservices.jpg\",\"width\":3043,\"height\":1522},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/microsservicos-python\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/kinsta.com\/pt\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Python\",\"item\":\"https:\/\/kinsta.com\/pt\/topicos\/python\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Como Criar e Implantar Microsservi\u00e7os com Python\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/kinsta.com\/pt\/#website\",\"url\":\"https:\/\/kinsta.com\/pt\/\",\"name\":\"Kinsta\u00ae\",\"description\":\"Solu\u00e7\u00f5es de hospedagem Premium, r\u00e1pida e segura\",\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/pt\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/kinsta.com\/pt\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pt-PT\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/kinsta.com\/pt\/#organization\",\"name\":\"Kinsta\",\"url\":\"https:\/\/kinsta.com\/pt\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-PT\",\"@id\":\"https:\/\/kinsta.com\/pt\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/12\/kinsta-logo.jpeg\",\"contentUrl\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/12\/kinsta-logo.jpeg\",\"width\":500,\"height\":500,\"caption\":\"Kinsta\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/pt\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/kinstapt\/\",\"https:\/\/x.com\/kinsta_pt\",\"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\/pt\/#\/schema\/person\/4eee42881d7b5a73ebb4f58dd5223b21\",\"name\":\"Jeremy Holcombe\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-PT\",\"@id\":\"https:\/\/kinsta.com\/pt\/#\/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\/pt\/blog\/author\/jeremyholcombe\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Como Criar e Implantar Microsservi\u00e7os com Python - Kinsta\u00ae","description":"Aprenda como construir e implantar microsservi\u00e7os eficientes usando Python para otimizar o desenvolvimento e melhorar o desempenho!","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\/pt\/blog\/microsservicos-python\/","og_locale":"pt_PT","og_type":"article","og_title":"Como Criar e Implantar Microsservi\u00e7os com Python","og_description":"Aprenda como construir e implantar microsservi\u00e7os eficientes usando Python para otimizar o desenvolvimento e melhorar o desempenho!","og_url":"https:\/\/kinsta.com\/pt\/blog\/microsservicos-python\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/kinstapt\/","article_published_time":"2023-12-05T12:26:38+00:00","article_modified_time":"2023-12-28T15:24:54+00:00","og_image":[{"width":3043,"height":1522,"url":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/12\/python-microservices.jpg","type":"image\/jpeg"}],"author":"Jeremy Holcombe","twitter_card":"summary_large_image","twitter_description":"Aprenda como construir e implantar microsservi\u00e7os eficientes usando Python para otimizar o desenvolvimento e melhorar o desempenho!","twitter_image":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/12\/python-microservices.jpg","twitter_creator":"@kinsta_pt","twitter_site":"@kinsta_pt","twitter_misc":{"Escrito por":"Jeremy Holcombe","Tempo estimado de leitura":"13 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinsta.com\/pt\/blog\/microsservicos-python\/#article","isPartOf":{"@id":"https:\/\/kinsta.com\/pt\/blog\/microsservicos-python\/"},"author":{"name":"Jeremy Holcombe","@id":"https:\/\/kinsta.com\/pt\/#\/schema\/person\/4eee42881d7b5a73ebb4f58dd5223b21"},"headline":"Como Criar e Implantar Microsservi\u00e7os com Python","datePublished":"2023-12-05T12:26:38+00:00","dateModified":"2023-12-28T15:24:54+00:00","mainEntityOfPage":{"@id":"https:\/\/kinsta.com\/pt\/blog\/microsservicos-python\/"},"wordCount":2497,"commentCount":0,"publisher":{"@id":"https:\/\/kinsta.com\/pt\/#organization"},"image":{"@id":"https:\/\/kinsta.com\/pt\/blog\/microsservicos-python\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/12\/python-microservices.jpg","inLanguage":"pt-PT","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/kinsta.com\/pt\/blog\/microsservicos-python\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/kinsta.com\/pt\/blog\/microsservicos-python\/","url":"https:\/\/kinsta.com\/pt\/blog\/microsservicos-python\/","name":"Como Criar e Implantar Microsservi\u00e7os com Python - Kinsta\u00ae","isPartOf":{"@id":"https:\/\/kinsta.com\/pt\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinsta.com\/pt\/blog\/microsservicos-python\/#primaryimage"},"image":{"@id":"https:\/\/kinsta.com\/pt\/blog\/microsservicos-python\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/12\/python-microservices.jpg","datePublished":"2023-12-05T12:26:38+00:00","dateModified":"2023-12-28T15:24:54+00:00","description":"Aprenda como construir e implantar microsservi\u00e7os eficientes usando Python para otimizar o desenvolvimento e melhorar o desempenho!","breadcrumb":{"@id":"https:\/\/kinsta.com\/pt\/blog\/microsservicos-python\/#breadcrumb"},"inLanguage":"pt-PT","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinsta.com\/pt\/blog\/microsservicos-python\/"]}]},{"@type":"ImageObject","inLanguage":"pt-PT","@id":"https:\/\/kinsta.com\/pt\/blog\/microsservicos-python\/#primaryimage","url":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/12\/python-microservices.jpg","contentUrl":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/12\/python-microservices.jpg","width":3043,"height":1522},{"@type":"BreadcrumbList","@id":"https:\/\/kinsta.com\/pt\/blog\/microsservicos-python\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kinsta.com\/pt\/"},{"@type":"ListItem","position":2,"name":"Python","item":"https:\/\/kinsta.com\/pt\/topicos\/python\/"},{"@type":"ListItem","position":3,"name":"Como Criar e Implantar Microsservi\u00e7os com Python"}]},{"@type":"WebSite","@id":"https:\/\/kinsta.com\/pt\/#website","url":"https:\/\/kinsta.com\/pt\/","name":"Kinsta\u00ae","description":"Solu\u00e7\u00f5es de hospedagem Premium, r\u00e1pida e segura","publisher":{"@id":"https:\/\/kinsta.com\/pt\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/kinsta.com\/pt\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pt-PT"},{"@type":"Organization","@id":"https:\/\/kinsta.com\/pt\/#organization","name":"Kinsta","url":"https:\/\/kinsta.com\/pt\/","logo":{"@type":"ImageObject","inLanguage":"pt-PT","@id":"https:\/\/kinsta.com\/pt\/#\/schema\/logo\/image\/","url":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/12\/kinsta-logo.jpeg","contentUrl":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/12\/kinsta-logo.jpeg","width":500,"height":500,"caption":"Kinsta"},"image":{"@id":"https:\/\/kinsta.com\/pt\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/kinstapt\/","https:\/\/x.com\/kinsta_pt","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\/pt\/#\/schema\/person\/4eee42881d7b5a73ebb4f58dd5223b21","name":"Jeremy Holcombe","image":{"@type":"ImageObject","inLanguage":"pt-PT","@id":"https:\/\/kinsta.com\/pt\/#\/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\/pt\/blog\/author\/jeremyholcombe\/"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/posts\/65608","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/users\/199"}],"replies":[{"embeddable":true,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/comments?post=65608"}],"version-history":[{"count":8,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/posts\/65608\/revisions"}],"predecessor-version":[{"id":66189,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/posts\/65608\/revisions\/66189"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/65608\/translations\/en"},{"embeddable":true,"hreflang":"pt","title":"Portuguese","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/65608\/translations\/pt"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/65608\/translations\/fr"},{"embeddable":true,"hreflang":"de","title":"German","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/65608\/translations\/de"},{"embeddable":true,"hreflang":"ja","title":"Japanese","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/65608\/translations\/jp"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/65608\/translations\/es"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/65608\/translations\/it"},{"href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/65608\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/media\/65609"}],"wp:attachment":[{"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/media?parent=65608"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/tags?post=65608"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/topic?post=65608"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}