{"id":55356,"date":"2022-11-29T09:07:25","date_gmt":"2022-11-29T12:07:25","guid":{"rendered":"https:\/\/kinsta.com\/pt\/?p=55356&#038;preview=true&#038;preview_id=55356"},"modified":"2023-08-21T10:11:33","modified_gmt":"2023-08-21T13:11:33","slug":"fastapi","status":"publish","type":"post","link":"https:\/\/kinsta.com\/pt\/blog\/fastapi\/","title":{"rendered":"Construindo um Aplicativo em Python usando o FastAPI"},"content":{"rendered":"<p>FastAPI \u00e9 um framework leve e r\u00e1pido para criar interfaces de programa\u00e7\u00e3o de aplicativos modernos usando o <a href=\"https:\/\/kinsta.com\/pt\/blog\/programacao-orientada-objetos-python\/\">Python<\/a> 3.6 ou superior. Neste tutorial, explicaremos o b\u00e1sico para construir um aplicativo com FastAPI e mostraremos a voc\u00ea porque ele foi nomeado como um dos <a href=\"https:\/\/www.infoworld.com\/article\/3637038\/the-best-open-source-software-of-2021.html#slide5\">melhores frameworks de c\u00f3digo aberto de 2021<\/a>.<\/p>\n<p>Quando voc\u00ea estiver pronto para desenvolver seus pr\u00f3prios aplicativos FastAPI, voc\u00ea n\u00e3o ter\u00e1 que procurar muito para encontrar um lugar para hosped\u00e1-los. Os servi\u00e7os de <a href=\"https:\/\/sevalla.com\/application-hosting\/\">Hospedagem de Aplicativos<\/a> e <a href=\"https:\/\/sevalla.com\/database-hosting\/\">Hospedagem de Banco de Dados<\/a> da Kinsta fornecem uma plataforma como um servi\u00e7o baseado em Python.<\/p>\n<p>Aprenderemos o b\u00e1sico primeiro.<\/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>Vantagens do FastAPI<\/h2>\n<p>Abaixo est\u00e3o algumas das vantagens que a <a href=\"https:\/\/fastapi.tiangolo.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">framework FastAPI<\/a> traz para um projeto.<\/p>\n<ul>\n<li><strong>Velocidade:<\/strong> Como o nome indica, FastAPI \u00e9 uma framework muito r\u00e1pida. Sua velocidade \u00e9 compar\u00e1vel com o <a href=\"https:\/\/docs.sevalla.com\/templates\/overview\">Go<\/a> e <a href=\"https:\/\/docs.sevalla.com\/templates\/overview\">Node.js<\/a>, que s\u00e3o geralmente consideradas uma das op\u00e7\u00f5es mais r\u00e1pidas para a constru\u00e7\u00e3o de APIs.<\/li>\n<li><strong>F\u00e1cil de aprender e codificar:<\/strong> FastAPI j\u00e1 descobriu quase tudo que voc\u00ea precisar\u00e1 para fazer uma API pronta para produ\u00e7\u00e3o. Como um desenvolvedor que usa FastAPI, voc\u00ea n\u00e3o precisa codificar tudo do zero. Com apenas algumas linhas de c\u00f3digo, voc\u00ea pode ter uma API RESTful pronta para a implanta\u00e7\u00e3o.<\/li>\n<li><strong>Documenta\u00e7\u00e3o abrangente:<\/strong> FastAPI usa os padr\u00f5es de documenta\u00e7\u00e3o OpenAPI, assim a documenta\u00e7\u00e3o pode ser gerada de forma din\u00e2mica. Esta documenta\u00e7\u00e3o fornece informa\u00e7\u00f5es detalhadas sobre os endpoints, respostas, par\u00e2metros e c\u00f3digos de retorno do FastAPI.<\/li>\n<li><strong>APIs com menos bugs:<\/strong> FastAPI suporta <a href=\"https:\/\/fastapi.tiangolo.com\/tutorial\/query-params-str-validations\/#add-more-validations\" target=\"_blank\" rel=\"noopener noreferrer\">valida\u00e7\u00e3o de dados personalizada<\/a>, o que permite aos desenvolvedores construir APIs com menos bugs. Os desenvolvedores de FastAPI se orgulham de que o framework resulta em menos bugs induzidos por humanos &#8211; at\u00e9 40% menos.<\/li>\n<li><strong>Dicas de digita\u00e7\u00e3o:<\/strong> O m\u00f3dulo types foi introduzido no Python 3.5. Isso permite que voc\u00ea declare o <code>type<\/code> de uma vari\u00e1vel. Quando o tipo de uma vari\u00e1vel \u00e9 declarado, as IDEs conseguem fornecer melhor suporte e prever erros com mais precis\u00e3o.<\/li>\n<\/ul>\n\n<h2>Como come\u00e7ar com o FastAPI<\/h2>\n<p>Para seguir este tutorial e come\u00e7ar com FastAPI, voc\u00ea precisar\u00e1 realizar algumas coisas primeiro.<\/p>\n<p>Certifique-se de ter um editor de texto\/IDE de um programador, como o <a href=\"https:\/\/code.visualstudio.com\/download\" target=\"_blank\" rel=\"noopener noreferrer\">Visual Studio Code<\/a>. Outras op\u00e7\u00f5es incluem <a href=\"https:\/\/kinsta.com\/pt\/blog\/como-usar-sublime-text\/\" rel=\"noopener\">Sublime Text<\/a> e <a href=\"https:\/\/www.espressoapp.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">Expresso<\/a>.<\/p>\n<p>\u00c9 comum que aplicativos e inst\u00e2ncias do Python sejam executados em ambientes virtuais. Os ambientes virtuais permitem que diferentes conjuntos de pacotes e configura\u00e7\u00f5es sejam executados simultaneamente, evitando conflitos causados \u200b\u200bpor vers\u00f5es de pacotes incompat\u00edveis.<\/p>\n<p>Para criar um ambiente virtual, abra <a href=\"https:\/\/kinsta.com\/pt\/blog\/comandos-python\/#introduction-to-the-cli\">seu terminal<\/a> e execute este comando:<\/p>\n<pre><code class=\"language-bash\">$ python3 -m venv env<\/code><\/pre>\n<p>Voc\u00ea tamb\u00e9m precisar\u00e1 ativar o ambiente virtual. O comando para fazer isso vai variar dependendo do sistema operacional e do shell que voc\u00ea est\u00e1 usando. Aqui est\u00e3o alguns exemplos de ativa\u00e7\u00e3o da CLI para v\u00e1rios ambientes:<\/p>\n<pre><code class=\"language-bash\"># On Unix or MacOS (bash shell): \n\/path\/to\/venv\/bin\/activate\n\n# On Unix or MacOS (csh shell):\n\/path\/to\/venv\/bin\/activate.csh\n\n# On Unix or MacOS (fish shell):\n\/path\/to\/venv\/bin\/activate.fish\n\n# On Windows (command prompt):\npathtovenvScriptsactivate.bat\n\n# On Windows (PowerShell):\npathtovenvScriptsActivate.ps1\n<\/code><\/pre>\n<p>(Algumas IDEs Python-aware tamb\u00e9m podem ser configuradas para ativar o ambiente virtual atual.)<\/p>\n<p>Agora, instale o FastAPI:<\/p>\n<pre><code class=\"language-bash\">$ pip3 install fastapi<\/code><\/pre>\n<p>FastAPI \u00e9 um framework para construir APIs, mas para testar suas APIs voc\u00ea precisar\u00e1 de um servidor web local. O <a href=\"https:\/\/www.uvicorn.org\/\" target=\"_blank\" rel=\"noopener noreferrer\">Uvicorn<\/a> \u00e9 um servidor web ASGI (Asynchronous Server Gateway Interface) para Python, \u00f3timo para desenvolvimento. Para instalar o Uvicorn, execute este comando:<\/p>\n<pre><code class=\"language-bash\">$ pip3 install \"uvicorn[standard]\"<\/code><\/pre>\n<p>Ap\u00f3s a instala\u00e7\u00e3o bem-sucedida, crie um arquivo chamado <strong>main.py<\/strong> no diret\u00f3rio de trabalho do seu projeto. Este arquivo ser\u00e1 o ponto de entrada do seu aplicativo.<\/p>\n<figure style=\"width: 1151px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/11\/fastapi-project-layout.png\" alt=\"Visualiza\u00e7\u00e3o de um projeto FastAPI b\u00e1sico dentro de uma IDE.\" width=\"1151\" height=\"475\"><figcaption class=\"wp-caption-text\">Visualiza\u00e7\u00e3o de um projeto FastAPI b\u00e1sico em uma IDE.<\/figcaption><\/figure>\n<h3>Um exemplo r\u00e1pido de FastAPI<\/h3>\n<p>Voc\u00ea testar\u00e1 sua instala\u00e7\u00e3o FastAPI configurando rapidamente um endpoint de exemplo. Em seu arquivo <strong>main.py<\/strong>, cole no seguinte c\u00f3digo e depois salve o arquivo:<\/p>\n<pre><code class=\"language-python\"># main.py\nfrom fastapi import FastAPI\napp = FastAPI()\n@app.get(\"\/\")\nasync def root():\n return {\"greeting\":\"Hello world\"}\n<\/code><\/pre>\n<p>O snippet acima cria um endpoint b\u00e1sico do FastAPI. Abaixo est\u00e1 um resumo do que cada linha faz:<\/p>\n<ul>\n<li><code>from fastapi import FastAPI<\/code>: A funcionalidade para sua API \u00e9 fornecida pela classe FastAPI Python.<\/li>\n<li><code>app = FastAPI()<\/code>: Isso cria uma inst\u00e2ncia FastAPI.<\/li>\n<li><code>@app.get(\"\/\")<\/code>: Este \u00e9 um decorador python que especifica ao FastAPI que a fun\u00e7\u00e3o abaixo dele \u00e9 respons\u00e1vel pelo tratamento dos pedidos.<\/li>\n<li><code>@app.get(\"\/\")<\/code>: Este \u00e9 um decorador que especifica a rota. Isso cria um m\u00e9todo <code>GET<\/code> na rota do site. O resultado \u00e9 ent\u00e3o retornado pela fun\u00e7\u00e3o wrapped.<\/li>\n<li>Outras opera\u00e7\u00f5es poss\u00edveis, usadas para comunicar incluem <code>@app.post()<\/code>, <code>@app.put()<\/code>, <code>@app.delete()<\/code>, <code>@app.options()<\/code>, <code>@app.head()<\/code>, <code>@app.patch()<\/code>, e <code>@app.trace()<\/code>.<\/li>\n<\/ul>\n<p>No diret\u00f3rio de arquivos, execute o seguinte comando em seu terminal para iniciar o servidor API:<\/p>\n<pre><code class=\"language-bash\">$ uvicorn main:app --reload<\/code><\/pre>\n<p>Neste comando, <code>main<\/code> \u00e9 o nome do seu m\u00f3dulo. O objeto <code>app<\/code> \u00e9 uma inst\u00e2ncia do seu aplicativo, importado para o servidor ASGI. A flag <code>--reload<\/code> diz ao servidor para recarregar automaticamente quando voc\u00ea realizar qualquer mudan\u00e7a.<\/p>\n<p>Voc\u00ea deve ver algo assim em seu terminal:<\/p>\n<pre><code> $ uvicorn main:app --reload\nINFO: Will watch for changes in these directories: ['D:\\WEB DEV\\Eunit\\Tests\\fast-api']\nINFO: Uvicorn running on http:\/\/127.0.0.1:8000 (Press CTRL+C to quit)\nINFO: Started reloader process [26888] using WatchFiles\nINFO: Started server process [14956]\nINFO: Waiting for application startup.\nINFO: Application startup complete.\n<\/code><\/pre>\n<p>Em seu navegador, navegue at\u00e9 <code>http:\/\/localhost:8000<\/code> para confirmar que sua API est\u00e1 funcionando. Voc\u00ea deve ver o &#8220;Hello&#8221;: &#8220;World&#8221; como um objeto JSON na p\u00e1gina. Isso ilustra como \u00e9 f\u00e1cil criar uma API com FastAPI. Tudo que voc\u00ea tinha que fazer era definir uma rota e retornar seu dicion\u00e1rio Python, como visto na linha seis do snippet acima.<\/p>\n<figure style=\"width: 900px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/11\/fastapi-hello-world-in-browser.png\" alt=\"Aplicativo FastAPI Hello World em um navegador web.\" width=\"900\" height=\"340\"><figcaption class=\"wp-caption-text\">Aplicativo FastAPI Hello World em um navegador web.<\/figcaption><\/figure>\n<h3>Usando sugest\u00f5es Type<\/h3>\n<p>Se voc\u00ea usa Python, voc\u00ea est\u00e1 acostumado a anotar vari\u00e1veis com tipos de dados b\u00e1sicos como <code>int<\/code>, <code>str<\/code>, <code>float<\/code>, e <code>bool<\/code>. No entanto, a partir da vers\u00e3o 3.9 do Python, foram introduzidas estruturas de dados avan\u00e7adas. Isso permite que voc\u00ea trabalhe com estruturas de dados como <code>dictionaries<\/code>, <code>tuples<\/code>, e <code>lists<\/code>. Com as dicas de Type do FastAPI, voc\u00ea pode estruturar o schema de seus dados usando modelos <a href=\"https:\/\/pydantic-docs.helpmanual.io\/usage\/models\/\" target=\"_blank\" rel=\"noopener noreferrer\">pydantic<\/a> e ent\u00e3o, usar os modelos pydantic para digitar a dica e se beneficiar da valida\u00e7\u00e3o de dados que \u00e9 fornecida.<\/p>\n<p>No exemplo abaixo, o uso de dicas de Type em Python \u00e9 demonstrado com uma simples calculadora de pre\u00e7o de refei\u00e7\u00e3o, <code>calculate_meal_fee<\/code>:<\/p>\n<pre><code class=\"language-python\">def calculate_meal_fee(beef_price: int, meal_price: int) -&gt; int:\n total_price: int = beef_price + meal_price\n return total_price\nprint(\"Calculated meal fee\", calculate_meal_fee(75, 19))\n<\/code><\/pre>\n<p>Note que as dicas de Type n\u00e3o mudam como seu c\u00f3digo funciona.<\/p>\n<h3>Documenta\u00e7\u00e3o da API interativa FastAPI<\/h3>\n<p>FastAPI usa a <a href=\"https:\/\/github.com\/swagger-api\/swagger-ui\" target=\"_blank\" rel=\"noopener noreferrer\">Swagger UI<\/a> para fornecer documenta\u00e7\u00e3o API interativa autom\u00e1tica. Para acess\u00e1-la, navegue at\u00e9 <code>http:\/\/localhost:8000\/docs<\/code> e voc\u00ea ver\u00e1 uma tela com todos os seus endpoints, m\u00e9todos e schemas.<\/p>\n<figure style=\"width: 900px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/11\/swagger-ui-fastapi-documentation-interface.png\" alt=\"Documenta\u00e7\u00e3o da Swagger UI para FastAPI.\" width=\"900\" height=\"1013\"><figcaption class=\"wp-caption-text\">Documenta\u00e7\u00e3o da Swagger UI para FastAPI.<\/figcaption><\/figure>\n<p>Esta documenta\u00e7\u00e3o API autom\u00e1tica, baseada em navegador, \u00e9 fornecida pela FastAPI, e voc\u00ea n\u00e3o precisa fazer mais nada para tirar proveito dela.<\/p>\n<p>Uma documenta\u00e7\u00e3o API alternativa baseada em navegador, tamb\u00e9m fornecida pela FastAPI, \u00e9 a <a href=\"https:\/\/github.com\/Redocly\/redoc\" target=\"_blank\" rel=\"noopener noreferrer\">Redoc<\/a>. Para acessar a Redoc, navegue at\u00e9 <code>http:\/\/localhost:8000\/redoc<\/code>, onde lhe ser\u00e1 apresentada uma lista de seus endpoints, os m\u00e9todos e suas respectivas respostas.<\/p>\n<figure style=\"width: 900px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/11\/redoc-fastapi-documentation-interface.png\" alt=\"Documenta\u00e7\u00e3o da Redoc para FastAPI.\" width=\"900\" height=\"1112\"><figcaption class=\"wp-caption-text\">Documenta\u00e7\u00e3o da Redoc para FastAPI.<\/figcaption><\/figure>\n<h3>Configurando rotas no FastAPI<\/h3>\n<p>O decorador <code>@app<\/code> permite especificar o <a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/HTTP\/Methods\" target=\"_blank\" rel=\"noopener noreferrer\">m\u00e9todo<\/a> de rota, como <code>@app.get<\/code> ou <code>@app.post<\/code>, e suporta <code>GET<\/code>, <code>POST<\/code>, <code>PUT<\/code>, e <code>DELETE<\/code>, bem como as op\u00e7\u00f5es menos comuns, <code>HEAD<\/code>, <code>PATCH<\/code>, e <code>TRACE<\/code>.<\/p>\n<h2>Construindo seu aplicativo com FastAPI<\/h2>\n<p>Este tutorial mostra como criar um aplicativo <a href=\"https:\/\/www.codecademy.com\/article\/what-is-crud\">CRUD<\/a> usando FastAPI. O aplicativo pode:<\/p>\n<ul>\n<li>Criar um usu\u00e1rio<\/li>\n<li>Ler o registro do banco de dados de um usu\u00e1rio<\/li>\n<li>Atualizar um usu\u00e1rio existente<\/li>\n<li>Excluir um usu\u00e1rio em particular<\/li>\n<\/ul>\n<p>Para executar estas opera\u00e7\u00f5es CRUD, voc\u00ea criar\u00e1 m\u00e9todos que exp\u00f5em os endpoints da API. O resultado ser\u00e1 um banco de dados in-memory que pode armazenar uma lista de usu\u00e1rios.<\/p>\n<figure style=\"width: 864px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/11\/database-table-fastapi-crud-example.png\" alt=\"Estrutura da tabela de banco de dados para exemplos CRUD\" width=\"864\" height=\"551\"><figcaption class=\"wp-caption-text\">Estrutura da tabela do banco de dados para exemplos CRUD<\/figcaption><\/figure>\n<p>Voc\u00ea usar\u00e1 a biblioteca <a href=\"https:\/\/pydantic-docs.helpmanual.io\/\" target=\"_blank\" rel=\"noopener noreferrer\">pydantic<\/a> para realizar valida\u00e7\u00e3o de dados e gerenciamento de configura\u00e7\u00f5es usando anota\u00e7\u00f5es do Type Python. Para os prop\u00f3sitos deste tutorial, voc\u00ea ir\u00e1 declarar a forma dos seus dados como classes com atributos.<\/p>\n<p>Este tutorial utilizar\u00e1 o banco de dados in-memory. Isso \u00e9 para voc\u00ea come\u00e7ar rapidamente a usar o FastAPI para construir suas APIs. Entretanto, para a produ\u00e7\u00e3o, voc\u00ea pode recorrer a qualquer banco de dados da sua escolha, como <a href=\"https:\/\/kinsta.com\/pt\/blog\/o-que-e-postgresql\/\">PostgreSQL<\/a>, <a href=\"https:\/\/kinsta.com\/pt\/blog\/o-que-e-mysql\/\">MySQL<\/a>, <a href=\"https:\/\/kinsta.com\/pt\/blog\/sqlite-vs-mysql\/#what-is-sqlite\">SQLite<\/a>, ou mesmo a Oracle.<\/p>\n<h3>Construindo o aplicativo<\/h3>\n<p>Voc\u00ea come\u00e7ar\u00e1 criando seu modelo de usu\u00e1rio. O modelo de usu\u00e1rio ter\u00e1 os seguintes atributos:<\/p>\n<ul>\n<li><code>id<\/code>: Um Identificador \u00danico Universal (UUID)<\/li>\n<li><code>first_name<\/code>: O primeiro nome do usu\u00e1rio<\/li>\n<li><code>last_name<\/code>: O sobrenome do usu\u00e1rio<\/li>\n<li><code>gender<\/code>: O g\u00eanero do usu\u00e1rio<\/li>\n<li><code>roles<\/code>: Uma lista contendo fun\u00e7\u00f5es <code>admin<\/code> e <code>user<\/code><\/li>\n<\/ul>\n<p>Comece criando um arquivo chamado <strong>model.py<\/strong> em seu diret\u00f3rio de trabalho, depois cole o seguinte c\u00f3digo no <strong>model.py<\/strong> para criar seu modelo:<\/p>\n<pre><code class=\"language-python\">\n# models.py\nfrom typing import List, Optional\nfrom uuid import UUID, uuid4\nfrom pydantic import BaseModel\nfrom enum import Enum\nfrom pydantic import BaseModel\nclass Gender(str, Enum):\n male = \"male\"\n female = \"female\"\nclass Role(str, Enum):\n admin = \"admin\"\n user = \"user\"\nclass User(BaseModel):\n id: Optional[UUID] = uuid4()\n first_name: str\n last_name: str\n gender: Gender\n roles: List[Role]\n<\/code><\/pre>\n<p>No c\u00f3digo acima:<\/p>\n<ul>\n<li>Sua classe <code>User<\/code> estende <code>BaseModel<\/code>, sendo ent\u00e3o importada de <code>pydantic<\/code>.<\/li>\n<li>Voc\u00ea definiu os atributos do usu\u00e1rio, como discutido acima.<\/li>\n<\/ul>\n<p>O pr\u00f3ximo passo \u00e9 criar o seu banco de dados. Substitua o conte\u00fado do seu arquivo <strong>main.py<\/strong> com o seguinte c\u00f3digo:<\/p>\n<pre><code class=\"language-python\">\n# main.py\nfrom typing import List\nfrom uuid import uuid4\nfrom fastapi import FastAPI\nfrom models import Gender, Role, User\napp = FastAPI()\ndb: List[User] = [\n User(\n id=uuid4(),\n first_name=\"John\",\n last_name=\"Doe\",\n gender=Gender.male,\n roles=[Role.user],\n ),\n User(\n id=uuid4(),\n first_name=\"Jane\",\n last_name=\"Doe\",\n gender=Gender.female,\n roles=[Role.user],\n ),\n User(\n id=uuid4(),\n first_name=\"James\",\n last_name=\"Gabriel\",\n gender=Gender.male,\n roles=[Role.user],\n ),\n User(\n id=uuid4(),\n first_name=\"Eunit\",\n last_name=\"Eunit\",\n gender=Gender.male,\n roles=[Role.admin, Role.user],\n ),\n]\n<\/code><\/pre>\n<p>Em seu arquivo<strong> main.py:<\/strong><\/p>\n<ul>\n<li>Voc\u00ea inicializou <code>db<\/code> com um tipo de <code>List<\/code>, e passou no modelo <code>User<\/code><\/li>\n<li>Voc\u00ea criou um banco de dados in-memory com quatro usu\u00e1rios, cada um com os atributos necess\u00e1rios, tais como <code>first_name<\/code>, <code>last_name<\/code>, <code>gender<\/code>, e <code>roles<\/code>. Ao usu\u00e1rio <code>Eunit<\/code> s\u00e3o atribu\u00eddas as fun\u00e7\u00f5es de <code>admin<\/code> e <code>user<\/code>, enquanto aos outros tr\u00eas usu\u00e1rios \u00e9 atribu\u00edda apenas a fun\u00e7\u00e3o de <code>user<\/code>.<\/li>\n<\/ul>\n<h3>Leitura de registros do banco de dados<\/h3>\n<p>Voc\u00ea configurou com sucesso seu banco de dados in-memory e o preencheu com usu\u00e1rios, ent\u00e3o o pr\u00f3ximo passo \u00e9 configurar um endpoint que ir\u00e1 retornar uma lista de todos os usu\u00e1rios. \u00c9 aqui que entra o FastAPI.<\/p>\n<p>Em seu arquivo <strong>main.py<\/strong>, cole o seguinte c\u00f3digo logo abaixo do seu endpoint <code>Hello World<\/code>:<\/p>\n<pre><code class=\"language-python\">\n# main.py\n @app.get(\"\/api\/v1\/users\")\n async def get_users():\n return db\n<\/code><\/pre>\n<p>Este c\u00f3digo define o endpoint <code>\/api\/v1\/users<\/code>, e cria uma fun\u00e7\u00e3o assim\u00e9trica, <code>get_users<\/code>, que retorna todo o conte\u00fado do banco de dados, <code>db<\/code>.<\/p>\n<p>Salve seu arquivo, e voc\u00ea pode testar seu endpoint de usu\u00e1rio. Execute o seguinte comando em seu terminal para iniciar o servidor da API:<\/p>\n<pre><code class=\"language-bash\">$ uvicorn main:app --reload<\/code><\/pre>\n<p>Em seu navegador, navegue at\u00e9 <code>http:\/\/localhost:8000\/api\/v1\/users<\/code>. Isso deve retornar uma lista de todos os seus usu\u00e1rios, como visto abaixo:<\/p>\n<figure style=\"width: 685px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/11\/fastapi-results-read-request.png\" alt=\"Dados de usu\u00e1rio recuperados pelo banco de dados FastAPI read request.\" width=\"685\" height=\"1029\"><figcaption class=\"wp-caption-text\">Dados de usu\u00e1rio recuperados pelo banco de dados FastAPI read request.<\/figcaption><\/figure>\n<p>Neste est\u00e1gio, seu arquivo <strong>main.py<\/strong> ser\u00e1 parecido com este:<\/p>\n<pre><code class=\"language-python\">\n# main.py\nfrom typing import List\nfrom uuid import uuid4\nfrom fastapi import FastAPI\nfrom models import Gender, Role, User\napp = FastAPI()\ndb: List[User] = [\n User(\n id=uuid4(),\n first_name=\"John\",\n last_name=\"Doe\",\n gender=Gender.male,\n roles=[Role.user],\n ),\n User(\n id=uuid4(),\n first_name=\"Jane\",\n last_name=\"Doe\",\n gender=Gender.female,\n roles=[Role.user],\n ),\n User(\n id=uuid4(),\n first_name=\"James\",\n last_name=\"Gabriel\",\n gender=Gender.male,\n roles=[Role.user],\n ),\n User(\n id=uuid4(),\n first_name=\"Eunit\",\n last_name=\"Eunit\",\n gender=Gender.male,\n roles=[Role.admin, Role.user],\n ),\n]\n@app.get(\"\/\")\nasync def root():\n return {\"Hello\": \"World\",}\n@app.get(\"\/api\/v1\/users\")\nasync def get_users():\n return db\n<\/code><\/pre>\n<h3>Criando registros do banco de dados<\/h3>\n<p>O pr\u00f3ximo passo \u00e9 criar um endpoint para criar um novo usu\u00e1rio no seu banco de dados. Cole o seguinte snippet em seu arquivo <strong>main.py<\/strong><\/p>\n<pre><code class=\"language-python\">\n# main.py\n@app.post(\"\/api\/v1\/users\")\nasync def create_user(user: User):\n db.append(user)\n return {\"id\": user.id}\n<\/code><\/pre>\n<p>Neste snippet, voc\u00ea definiu o endpoint para enviar um novo usu\u00e1rio e recorreu ao decorador <code>@app.post<\/code> para criar um m\u00e9todo <code>POST<\/code>.<\/p>\n<p>Voc\u00ea tamb\u00e9m criou a fun\u00e7\u00e3o <code>create_user<\/code>, que aceita <code>user<\/code> do modelo <code>User<\/code>, e anexou (adicionado) o rec\u00e9m-criado <code>user<\/code> ao banco de dados, <code>db<\/code>. Finalmente, o endpoint retorna um objeto JSON do usu\u00e1rio rec\u00e9m-criado <code>id<\/code>.<\/p>\n<p>Voc\u00ea ter\u00e1 que usar a documenta\u00e7\u00e3o API autom\u00e1tica fornecida pela FastAPI para testar seu endpoint, como visto acima. Isso \u00e9 porque voc\u00ea n\u00e3o pode fazer uma solicita\u00e7\u00e3o de publica\u00e7\u00e3o usando o navegador da web. Navegue at\u00e9 <code>http:\/\/localhost:8000\/docs<\/code> para testar usando a documenta\u00e7\u00e3o fornecida pela <a href=\"https:\/\/github.com\/swagger-api\/swagger-ui\">SwaggerUI<\/a>.<\/p>\n<figure style=\"width: 685px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/11\/fastapi-parameters-post-request.png\" alt=\"Par\u00e2metros para uma solicita\u00e7\u00e3o FastAPI POST.\" width=\"685\" height=\"1029\"><figcaption class=\"wp-caption-text\">Par\u00e2metros para uma solicita\u00e7\u00e3o FastAPI POST.<\/figcaption><\/figure>\n<h3>Excluindo registros do banco de dados<\/h3>\n<p>J\u00e1 que voc\u00ea est\u00e1 construindo um aplicativo CRUD, seu aplicativo precisar\u00e1 ter a habilidade de <a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/HTTP\/Methods\/DELETE\">excluir<\/a> um recurso especificado. Para este tutorial, voc\u00ea ir\u00e1 criar um endpoint para excluir um usu\u00e1rio.<\/p>\n<p>Cole o seguinte c\u00f3digo em seu arquivo <strong>main.py:<\/strong><\/p>\n<pre><code class=\"language-python\">\n# main.py\nfrom uuid import UUID\nfrom fastapi HTTPException\n@app.delete(\"\/api\/v1\/users\/{id}\")\nasync def delete_user(id: UUID):\nfor user in db:\n if user.id == id:\n db.remove(user)\n return\nraise HTTPException(\n status_code=404, detail=f\"Delete user failed, id {id} not found.\"\n )\n<\/code><\/pre>\n<p>Aqui est\u00e1 uma descri\u00e7\u00e3o linha por linha de como o c\u00f3digo funciona:<\/p>\n<ul>\n<li><code>@app.delete(\"\/api\/v1\/users\/{id}\")<\/code>: O usu\u00e1rio criou o endpoint de exclus\u00e3o usando o decorador <code>@app.delete()<\/code>. O caminho ainda \u00e9 <code>\/api\/v1\/users\/{id}<\/code>, mas ele recupera o <code>id<\/code>, sendo uma vari\u00e1vel de caminho correspondente ao id do usu\u00e1rio.<\/li>\n<li><code>async def delete_user(id: UUID):<\/code>: Cria a fun\u00e7\u00e3o <code>delete_user<\/code>, que recupera o <code>id<\/code> a partir da URL.<\/li>\n<li><code>for user in db:<\/code>: Isto diz ao aplicativo para percorrer os usu\u00e1rios no banco de dados, e verificar se o <code>id<\/code> passou corresponde a um usu\u00e1rio no banco de dados.<\/li>\n<li><code>db.remove(user)<\/code>: Se o <code>id<\/code> corresponder a um usu\u00e1rio, o usu\u00e1rio ser\u00e1 exclu\u00eddo; caso contr\u00e1rio, ser\u00e1 gerado um <code>HTTPException<\/code> com um <a href=\"https:\/\/kinsta.com\/pt\/blog\/lista-codigos-status-http\/\">c\u00f3digo de status<\/a> 404.<\/li>\n<\/ul>\n<figure style=\"width: 594px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/11\/fastapi-parameters-delete-request.png\" alt=\"Par\u00e2metros para uma solicita\u00e7\u00e3o FastAPI DELETE.\" width=\"594\" height=\"1030\"><figcaption class=\"wp-caption-text\">Par\u00e2metros para uma solicita\u00e7\u00e3o FastAPI DELETE.<\/figcaption><\/figure>\n<h3>Atualizando registros do banco de dados<\/h3>\n<p>Voc\u00ea criar\u00e1 um endpoint para atualizar os detalhes de um usu\u00e1rio. Os detalhes que podem ser atualizados incluem os seguintes par\u00e2metros: <code>first_name<\/code>, <code>last_name<\/code>, e <code>roles<\/code>.<\/p>\n<p>Em seu arquivo <strong>model.py<\/strong>, cole o seguinte c\u00f3digo sob seu modelo <code>User<\/code>, ou seja, ap\u00f3s a classe <code>User(BaseModel):<\/code>:<\/p>\n<pre><code class=\"language-python\"> # models.py\n class UpdateUser(BaseModel):\n first_name: Optional[str]\n last_name: Optional[str]\n roles: Optional[List[Role]]\n<\/code><\/pre>\n<p>Neste snippet, a classe <code>UpdateUser<\/code> estende <code>BaseModel<\/code>. Voc\u00ea ent\u00e3o define os par\u00e2metros atualiz\u00e1veis do usu\u00e1rio, tais como <code>first_name<\/code>, <code>last_name<\/code>, e <code>roles<\/code>, para serem opcionais.<\/p>\n<p>Agora voc\u00ea criar\u00e1 um endpoint para atualizar os detalhes de um determinado usu\u00e1rio. Em seu arquivo <strong>main.py<\/strong>, cole o seguinte c\u00f3digo ap\u00f3s a classe <code>@app.delete<\/code>:<\/p>\n<pre><code class=\"language-python\"># main.py\n@app.put(\"\/api\/v1\/users\/{id}\")\nasync def update_user(user_update: UpdateUser, id: UUID):\n for user in db:\n if user.id == id:\n if user_update.first_name is not None:\n user.first_name = user_update.first_name\n if user_update.last_name is not None:\n user.last_name = user_update.last_name\n if user_update.roles is not None:\n user.roles = user_update.roles\n return user.id\n raise HTTPException(status_code=404, detail=f\"Could not find user with id: {id}\")\n<\/code><\/pre>\n<p>No c\u00f3digo acima, voc\u00ea fez o seguinte:<\/p>\n<ul>\n<li>Criou o endpoint de atualiza\u00e7\u00e3o <code>@app.put(\"\/api\/v1\/users\/{id}\")<\/code>. Ele tem um par\u00e2metro vari\u00e1vel <code>id<\/code> que corresponde ao id do usu\u00e1rio.<\/li>\n<li>Criou um m\u00e9todo chamado <code>update_user<\/code>, que inclui a classe <code>UpdateUser<\/code> e <code>id<\/code>.<\/li>\n<li>Usou um loop <code>for<\/code> para verificar se o usu\u00e1rio associado com o <code>id<\/code> est\u00e1 no banco de dados.<\/li>\n<li>Verificou se algum dos par\u00e2metros do usu\u00e1rio \u00e9 <code>is not None<\/code> (n\u00e3o \u00e9 nulo). Se algum par\u00e2metro, como <code>first_name<\/code>, <code>last_name<\/code>, ou <code>roles<\/code>, n\u00e3o \u00e9 nulo, ent\u00e3o ele \u00e9 atualizado.<\/li>\n<li>Se a opera\u00e7\u00e3o for bem-sucedida, o id do usu\u00e1rio \u00e9 retornado.<\/li>\n<li>Caso o usu\u00e1rio n\u00e3o foi localizado, uma exce\u00e7\u00e3o <code>HTTPException<\/code> com um c\u00f3digo de status 404 e uma mensagem <code>Could not find user with id: {id}<\/code> \u00e9 criado.<\/li>\n<\/ul>\n<p>Para testar este endpoint, certifique-se de que seu servidor Uvicorn est\u00e1 rodando. Se ele n\u00e3o estiver rodando, digite este comando:<\/p>\n<pre><code class=\"language-bash\">uvicorn main:app --reload<\/code><\/pre>\n<p>Abaixo est\u00e1 uma imagem da tela do teste.<\/p>\n<figure style=\"width: 593px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/11\/fastapi-parameters-update-request.png\" alt=\"Par\u00e2metros para uma solicita\u00e7\u00e3o de atualiza\u00e7\u00e3o FastAPI\" width=\"593\" height=\"954\"><figcaption class=\"wp-caption-text\">Par\u00e2metros para uma solicita\u00e7\u00e3o de atualiza\u00e7\u00e3o FastAPI<\/figcaption><\/figure>\n\n<h2>Resumo<\/h2>\n<p>Neste tutorial, voc\u00ea explorou sobre o framework FastAPI usando Python e viu por si mesmo a velocidade com que um aplicativo FastAPI pode ser instalado e executado. Voc\u00ea aprendeu como construir endpoints CRUD API usando a framework &#8211; criando, lendo, atualizando e apagando registros do banco de dados.<\/p>\n<p>Se voc\u00ea deseja levar o desenvolvimento do seu aplicativo da web para o pr\u00f3ximo n\u00edvel, certifique-se de verificar a plataforma Kinsta para <a href=\"https:\/\/kinsta.com\/pt\/changelog\/hospedagem-aplicativos-e-bancos-dados\/\">Hospedagem de Aplicativos e Hospedagem de Banco de Dados<\/a>. Como FastAPI, \u00e9 muito simples.<\/p>\n<kinsta-video src=\"https:\/\/www.youtube.com\/watch?v=vmNem6wxfSQ\"><\/kinsta-video>\n","protected":false},"excerpt":{"rendered":"<p>FastAPI \u00e9 um framework leve e r\u00e1pido para criar interfaces de programa\u00e7\u00e3o de aplicativos modernos usando o Python 3.6 ou superior. Neste tutorial, explicaremos o b\u00e1sico &#8230;<\/p>\n","protected":false},"author":270,"featured_media":55357,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[367,477,841,263],"topic":[951,1001],"class_list":["post-55356","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","tag-api","tag-python","tag-web-applications","tag-web-development","topic-api","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>Construindo um Aplicativo em Python usando o FastAPI - Kinsta\u00ae<\/title>\n<meta name=\"description\" content=\"\u00c9 chamado de &quot;r\u00e1pido&quot; por uma raz\u00e3o! Aqui est\u00e1 o que voc\u00ea precisa saber sobre FastAPI para construir rapidamente interfaces de programa\u00e7\u00e3o de aplicativos usando Python.\" \/>\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\/fastapi\/\" \/>\n<meta property=\"og:locale\" content=\"pt_PT\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Construindo um Aplicativo em Python usando o FastAPI\" \/>\n<meta property=\"og:description\" content=\"\u00c9 chamado de &quot;r\u00e1pido&quot; por uma raz\u00e3o! Aqui est\u00e1 o que voc\u00ea precisa saber sobre FastAPI para construir rapidamente interfaces de programa\u00e7\u00e3o de aplicativos usando Python.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinsta.com\/pt\/blog\/fastapi\/\" \/>\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=\"2022-11-29T12:07:25+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-08-21T13:11:33+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2022\/11\/fastapi.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1460\" \/>\n\t<meta property=\"og:image:height\" content=\"730\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Emmanuel Uchenna\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:description\" content=\"\u00c9 chamado de &quot;r\u00e1pido&quot; por uma raz\u00e3o! Aqui est\u00e1 o que voc\u00ea precisa saber sobre FastAPI para construir rapidamente interfaces de programa\u00e7\u00e3o de aplicativos usando Python.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2022\/11\/fastapi.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=\"Emmanuel Uchenna\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tempo estimado de leitura\" \/>\n\t<meta name=\"twitter:data2\" content=\"14 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/fastapi\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/fastapi\/\"},\"author\":{\"name\":\"Emmanuel Uchenna\",\"@id\":\"https:\/\/kinsta.com\/pt\/#\/schema\/person\/8deb20857e9f90e6cc3c2426da8f343f\"},\"headline\":\"Construindo um Aplicativo em Python usando o FastAPI\",\"datePublished\":\"2022-11-29T12:07:25+00:00\",\"dateModified\":\"2023-08-21T13:11:33+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/fastapi\/\"},\"wordCount\":2362,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/pt\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/fastapi\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2022\/11\/fastapi.jpg\",\"keywords\":[\"API\",\"python\",\"web applications\",\"web development\"],\"inLanguage\":\"pt-PT\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/kinsta.com\/pt\/blog\/fastapi\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/fastapi\/\",\"url\":\"https:\/\/kinsta.com\/pt\/blog\/fastapi\/\",\"name\":\"Construindo um Aplicativo em Python usando o FastAPI - Kinsta\u00ae\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/pt\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/fastapi\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/fastapi\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2022\/11\/fastapi.jpg\",\"datePublished\":\"2022-11-29T12:07:25+00:00\",\"dateModified\":\"2023-08-21T13:11:33+00:00\",\"description\":\"\u00c9 chamado de \\\"r\u00e1pido\\\" por uma raz\u00e3o! Aqui est\u00e1 o que voc\u00ea precisa saber sobre FastAPI para construir rapidamente interfaces de programa\u00e7\u00e3o de aplicativos usando Python.\",\"breadcrumb\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/fastapi\/#breadcrumb\"},\"inLanguage\":\"pt-PT\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinsta.com\/pt\/blog\/fastapi\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-PT\",\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/fastapi\/#primaryimage\",\"url\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2022\/11\/fastapi.jpg\",\"contentUrl\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2022\/11\/fastapi.jpg\",\"width\":1460,\"height\":730},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/fastapi\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/kinsta.com\/pt\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"API\",\"item\":\"https:\/\/kinsta.com\/pt\/topicos\/api\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Construindo um Aplicativo em Python usando o FastAPI\"}]},{\"@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\/8deb20857e9f90e6cc3c2426da8f343f\",\"name\":\"Emmanuel Uchenna\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-PT\",\"@id\":\"https:\/\/kinsta.com\/pt\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/ad8b6a83415f2708e437768feb16d3da?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/ad8b6a83415f2708e437768feb16d3da?s=96&d=mm&r=g\",\"caption\":\"Emmanuel Uchenna\"},\"description\":\"Emmanuel is an experienced, passionate, and enthusiastic software developer and technical writer with proven years of professional experience. He focuses on full-stack web development. He's fluent in ReactJS, JavaScript, VueJS, and NodeJS and familiar with industry-standard technologies such as Git, GitHub, and TDD. He helps individuals, businesses, and brands build responsive, accessible, beautiful, and intuitive websites to improve their online presence. He is also a technical writer for various websites and his own projects.\",\"url\":\"https:\/\/kinsta.com\/pt\/blog\/author\/emmanueluchenna\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Construindo um Aplicativo em Python usando o FastAPI - Kinsta\u00ae","description":"\u00c9 chamado de \"r\u00e1pido\" por uma raz\u00e3o! Aqui est\u00e1 o que voc\u00ea precisa saber sobre FastAPI para construir rapidamente interfaces de programa\u00e7\u00e3o de aplicativos usando Python.","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\/fastapi\/","og_locale":"pt_PT","og_type":"article","og_title":"Construindo um Aplicativo em Python usando o FastAPI","og_description":"\u00c9 chamado de \"r\u00e1pido\" por uma raz\u00e3o! Aqui est\u00e1 o que voc\u00ea precisa saber sobre FastAPI para construir rapidamente interfaces de programa\u00e7\u00e3o de aplicativos usando Python.","og_url":"https:\/\/kinsta.com\/pt\/blog\/fastapi\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/kinstapt\/","article_published_time":"2022-11-29T12:07:25+00:00","article_modified_time":"2023-08-21T13:11:33+00:00","og_image":[{"width":1460,"height":730,"url":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2022\/11\/fastapi.jpg","type":"image\/jpeg"}],"author":"Emmanuel Uchenna","twitter_card":"summary_large_image","twitter_description":"\u00c9 chamado de \"r\u00e1pido\" por uma raz\u00e3o! Aqui est\u00e1 o que voc\u00ea precisa saber sobre FastAPI para construir rapidamente interfaces de programa\u00e7\u00e3o de aplicativos usando Python.","twitter_image":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2022\/11\/fastapi.jpg","twitter_creator":"@kinsta_pt","twitter_site":"@kinsta_pt","twitter_misc":{"Escrito por":"Emmanuel Uchenna","Tempo estimado de leitura":"14 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinsta.com\/pt\/blog\/fastapi\/#article","isPartOf":{"@id":"https:\/\/kinsta.com\/pt\/blog\/fastapi\/"},"author":{"name":"Emmanuel Uchenna","@id":"https:\/\/kinsta.com\/pt\/#\/schema\/person\/8deb20857e9f90e6cc3c2426da8f343f"},"headline":"Construindo um Aplicativo em Python usando o FastAPI","datePublished":"2022-11-29T12:07:25+00:00","dateModified":"2023-08-21T13:11:33+00:00","mainEntityOfPage":{"@id":"https:\/\/kinsta.com\/pt\/blog\/fastapi\/"},"wordCount":2362,"commentCount":0,"publisher":{"@id":"https:\/\/kinsta.com\/pt\/#organization"},"image":{"@id":"https:\/\/kinsta.com\/pt\/blog\/fastapi\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2022\/11\/fastapi.jpg","keywords":["API","python","web applications","web development"],"inLanguage":"pt-PT","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/kinsta.com\/pt\/blog\/fastapi\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/kinsta.com\/pt\/blog\/fastapi\/","url":"https:\/\/kinsta.com\/pt\/blog\/fastapi\/","name":"Construindo um Aplicativo em Python usando o FastAPI - Kinsta\u00ae","isPartOf":{"@id":"https:\/\/kinsta.com\/pt\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinsta.com\/pt\/blog\/fastapi\/#primaryimage"},"image":{"@id":"https:\/\/kinsta.com\/pt\/blog\/fastapi\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2022\/11\/fastapi.jpg","datePublished":"2022-11-29T12:07:25+00:00","dateModified":"2023-08-21T13:11:33+00:00","description":"\u00c9 chamado de \"r\u00e1pido\" por uma raz\u00e3o! Aqui est\u00e1 o que voc\u00ea precisa saber sobre FastAPI para construir rapidamente interfaces de programa\u00e7\u00e3o de aplicativos usando Python.","breadcrumb":{"@id":"https:\/\/kinsta.com\/pt\/blog\/fastapi\/#breadcrumb"},"inLanguage":"pt-PT","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinsta.com\/pt\/blog\/fastapi\/"]}]},{"@type":"ImageObject","inLanguage":"pt-PT","@id":"https:\/\/kinsta.com\/pt\/blog\/fastapi\/#primaryimage","url":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2022\/11\/fastapi.jpg","contentUrl":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2022\/11\/fastapi.jpg","width":1460,"height":730},{"@type":"BreadcrumbList","@id":"https:\/\/kinsta.com\/pt\/blog\/fastapi\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kinsta.com\/pt\/"},{"@type":"ListItem","position":2,"name":"API","item":"https:\/\/kinsta.com\/pt\/topicos\/api\/"},{"@type":"ListItem","position":3,"name":"Construindo um Aplicativo em Python usando o FastAPI"}]},{"@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\/8deb20857e9f90e6cc3c2426da8f343f","name":"Emmanuel Uchenna","image":{"@type":"ImageObject","inLanguage":"pt-PT","@id":"https:\/\/kinsta.com\/pt\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/ad8b6a83415f2708e437768feb16d3da?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/ad8b6a83415f2708e437768feb16d3da?s=96&d=mm&r=g","caption":"Emmanuel Uchenna"},"description":"Emmanuel is an experienced, passionate, and enthusiastic software developer and technical writer with proven years of professional experience. He focuses on full-stack web development. He's fluent in ReactJS, JavaScript, VueJS, and NodeJS and familiar with industry-standard technologies such as Git, GitHub, and TDD. He helps individuals, businesses, and brands build responsive, accessible, beautiful, and intuitive websites to improve their online presence. He is also a technical writer for various websites and his own projects.","url":"https:\/\/kinsta.com\/pt\/blog\/author\/emmanueluchenna\/"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/posts\/55356","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\/270"}],"replies":[{"embeddable":true,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/comments?post=55356"}],"version-history":[{"count":13,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/posts\/55356\/revisions"}],"predecessor-version":[{"id":62394,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/posts\/55356\/revisions\/62394"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/55356\/translations\/en"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/55356\/translations\/it"},{"embeddable":true,"hreflang":"pt","title":"Portuguese","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/55356\/translations\/pt"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/55356\/translations\/fr"},{"embeddable":true,"hreflang":"de","title":"German","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/55356\/translations\/de"},{"embeddable":true,"hreflang":"ja","title":"Japanese","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/55356\/translations\/jp"},{"embeddable":true,"hreflang":"nl","title":"Dutch","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/55356\/translations\/nl"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/55356\/translations\/es"},{"embeddable":true,"hreflang":"sv","title":"Swedish","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/55356\/translations\/se"},{"embeddable":true,"hreflang":"da","title":"Danish","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/55356\/translations\/dk"},{"href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/55356\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/media\/55357"}],"wp:attachment":[{"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/media?parent=55356"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/tags?post=55356"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/topic?post=55356"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}