FastAPI Python: como criar sua primeira API do zero

Rocketseat

Rocketseat

5 min de leitura
https://prod-files-secure.s3.us-west-2.amazonaws.com/08f749ff-d06d-49a8-a488-9846e081b224/9860ce08-4c85-43ff-9aa1-ee5368504d5f/ChatGPT_Image_Jul_1_2026_02_30_18_PM.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=ASIAZI2LB466XLZ6NXVQ%2F20260726%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20260726T021126Z&X-Amz-Expires=3600&X-Amz-Security-Token=IQoJb3JpZ2luX2VjEGIaCXVzLXdlc3QtMiJHMEUCIQCcIM4dic6n3zTQL%2BDJ%2FxEm28cREpt3%2BTfguOsevhpjtgIgLO8S5ea4lonr51KODdwL2lRY78dlS28bKTj9rTxlRrUq%2FwMIKxAAGgw2Mzc0MjMxODM4MDUiDGOjAV%2F2FPD%2FeUuzTircAyCzrZln%2FFa3Akd4AVd0Wx7wVIGyQ4HlZDc%2B9Jb6na2LWoW9LzDMkE2r4jd%2B0YRkwmLIdRG9rkPZA%2B2jFz9P0pPoD%2BbqaUGZzcQP695PsZABCVGqAHqsVsjMT79csG5g1ifByABRZ%2FJx053068NMTm8GIfNPXLHBE3lWS1%2FrdTEHlxQxnhhM8L5eUnDMYNLY5PKPSMjAXaYfuj1BtrBi%2FjEcHjnyqRV0s6YdRkFQi2yN7%2FNqINLcFb9HONGKTmTmHYn3p2LC2kLCxmOF%2BaxDPSxbEUQvKnBK9ovWaIwckieWwAFWr0Zk19jKiFfzfE%2Fsy2AS1vIIkS2tK3OthAmgbCkiR6ZYllR85B%2Fa7tcrJn0MGQjbJEB7hchXr7xtBrgyDYuzwPnERtzk3QkzeQslfoHQ7tZqPfB%2FU5Q7shen95wkTVRY1n02Cb9ocChJdKWjPTF3qE9zqV%2FbTaRb7mNEfGDoWsm4vcQ4eesw80gIy%2B2oGyb%2BvAKr2YNUcD1XrQfaxfBGo87%2Bo5SKQmZMJ1raPiBuP%2FJ20gjOdKIO04TXFFphNVXV7NZ0siOpgxxYDCMWlhr9b8UvCKY%2Bk%2F0zK7lbSh2hBb8n9Ye4VSmIcjEzeeCSimgi9TCHZciTQyo1MNTKldMGOqUB0quoeb05iPgHWB4NwGfIdaOeOP4Ff4ymvTrM8rlwLwxf6p7CjGQ%2FGmkXjHC%2BMWRYt9JomT1H4ZEaYxVj6oyCHEV7qpITpeDSYgHmboymt7aAI0AIb%2FXZhdNAPBBvaO2gNv%2BKHF1J8GuSGSsXy6UYD%2FNrY1BJL7wGE2Qj7tz8oXNgA63WCKvbv8TCa4%2B%2F8ry52qJ0CyRWCrI6apmZt5neBGpCFKg2&X-Amz-Signature=71900434367b1aaa59c2fb364993a1de9ba15efa82ef9a309b3eeab58bf1870c&X-Amz-SignedHeaders=host&x-amz-checksum-mode=ENABLED&x-id=GetObject
Chega um momento no aprendizado de Python em que surge a pergunta natural: e se essa lógica que eu escrevi precisasse ser acessada por um app mobile, por um frontend em React ou por outro serviço? É nesse momento que entra a necessidade de expor código Python como uma API, e é aí que o FastAPI se tornou uma das primeiras escolhas de quem está começando.
A dúvida comum é por onde começar. Existem várias formas de criar uma API em Python, e é fácil se perder entre tutoriais que misturam conceitos de frameworks diferentes ou que pulam etapas importantes, como validação de dados e documentação automática.
Vem comigo entender o FastAPI, como criar uma API funcional desde o primeiro endpoint até rotas assíncronas e validação de dados, e como organizar esse projeto de um jeito que já nasce próximo do que se usa em produção.

O que é o FastAPI e por que ele ganhou espaço

FastAPI é um framework para construção de APIs em Python que se apoia em dois pilares: tipagem estática (via type hints do próprio Python) e suporte nativo a código assíncrono. Isso permite que ele valide dados automaticamente, gere documentação interativa sem esforço extra e tenha uma performance próxima de frameworks escritos em linguagens compiladas, quando usado com um servidor ASGI como o Uvicorn.
Diferente de frameworks mais antigos, o FastAPI foi desenhado depois que o ecossistema Python já tinha suporte maduro a async/await, então ele aproveita isso desde a base, em vez de adicionar suporte assíncrono como uma camada extra.

Criando sua primeira API com FastAPI

O primeiro passo é instalar o framework e um servidor ASGI para rodar a aplicação.
# Instala o FastAPI e o Uvicorn (servidor que executa a aplicação) pip install fastapi uvicorn
Com as dependências instaladas, o próximo passo é criar o primeiro endpoint.
# arquivo: main.py # Aplicação mínima com um único endpoint from fastapi import FastAPI app = FastAPI() @app.get("/") def ler_raiz(): """Endpoint inicial, só para confirmar que a API está no ar.""" return {"mensagem": "API rodando com FastAPI"}
Para rodar essa aplicação localmente:
# --reload reinicia o servidor automaticamente a cada alteração no código uvicorn main:app --reload
A partir daí, a aplicação já responde em http://127.0.0.1:8000 e a documentação interativa fica disponível automaticamente em http://127.0.0.1:8000/docs, gerada a partir do próprio código, sem necessidade de escrever nada a mais.

Validação de dados com Pydantic

Um dos motivos do FastAPI ser tão usado é a integração com o Pydantic para validar o formato dos dados recebidos e enviados pela API, evitando checagens manuais de tipo e formato.
# arquivo: main.py # Endpoint que recebe dados de um usuário e valida o formato automaticamente from fastapi import FastAPI from pydantic import BaseModel, EmailStr app = FastAPI() class UsuarioCriacao(BaseModel): """Define o formato esperado para criar um usuário.""" nome: str email: EmailStr idade: int @app.post("/usuarios") def criar_usuario(usuario: UsuarioCriacao): """Recebe os dados já validados pelo Pydantic e retorna uma confirmação.""" return { "mensagem": f"Usuário {usuario.nome} criado com sucesso", "email": usuario.email, }
Se o corpo da requisição não seguir o formato de UsuarioCriacao, como um e-mail em formato inválido ou a idade enviada como texto, o FastAPI retorna automaticamente um erro 422 explicando qual campo está incorreto, sem precisar escrever essa validação manualmente.

Rotas assíncronas e por que isso importa

Nem todo endpoint precisa ser assíncrono, mas quando a API depende de operações de entrada e saída, como chamadas a um banco de dados ou a outro serviço externo, declarar a rota como async permite que o servidor atenda outras requisições enquanto aguarda essa resposta, em vez de ficar bloqueado.
# arquivo: main.py # Exemplo de rota assíncrona simulando uma consulta externa import asyncio from fastapi import FastAPI app = FastAPI() async def buscar_dados_externos(): """Simula uma chamada a um serviço externo que leva um tempo para responder.""" await asyncio.sleep(1) return {"status": "dados recebidos"} @app.get("/dados") async def obter_dados(): """Rota assíncrona que aguarda o resultado sem bloquear o servidor.""" resultado = await buscar_dados_externos() return resultado
Vale destacar que declarar uma rota como async def só traz ganho real se o código dentro dela também for assíncrono, usando bibliotecas compatíveis com await. Para entender melhor o funcionamento de corrotinas e do módulo asyncio, a documentação oficial do Python é a referência mais completa sobre o assunto.

Documentação automática (Swagger e OpenAPI)

Um dos diferenciais do FastAPI é gerar, a partir do próprio código, uma documentação interativa seguindo o padrão OpenAPI. Isso significa que qualquer pessoa do time, incluindo quem não escreveu o backend, consegue testar os endpoints diretamente pelo navegador, em /docs, sem precisar de ferramentas externas para simular requisições.
Essa documentação é montada automaticamente com base nos type hints e nos modelos Pydantic definidos no código, então mantê-la atualizada é consequência de manter o código bem tipado, e não um trabalho manual separado.

FastAPI vs Flask: quando escolher cada um

É comum comparar FastAPI com Flask, já que os dois são frameworks leves e bastante usados no ecossistema Python.
O Flask tende a fazer mais sentido em projetos simples, onde não há necessidade de validação de dados complexa nem de operações assíncronas, e onde a flexibilidade de não impor uma estrutura é uma vantagem.
O FastAPI costuma se destacar quando a API vai crescer, quando existe integração com múltiplos serviços externos (bancos de dados, filas, outras APIs) que se beneficiam de chamadas assíncronas, ou quando a validação automática de dados e a documentação gerada sozinha economizam tempo real do time ao longo do projeto.

Boas práticas para organizar um projeto FastAPI

Conforme o projeto cresce além de um único arquivo main.py, algumas práticas ajudam a manter o código organizado:
  • Separar rotas por domínio usando APIRouter, em vez de deixar todos os endpoints no mesmo arquivo.
  • Isolar os modelos Pydantic de entrada e saída dos modelos usados para persistência no banco de dados.
  • Usar o sistema de injeção de dependências do próprio FastAPI para lidar com autenticação, conexão com banco de dados e outras dependências compartilhadas entre rotas.
  • Escrever testes automatizados usando o TestClient, que já vem integrado ao framework.
Essas práticas evitam que o projeto vire um único arquivo gigante conforme o número de endpoints aumenta, o que é um problema comum em quem está criando sua primeira API.

Próximos passos

Criar o primeiro endpoint é só o começo. Entender como estruturar rotas assíncronas, integrar autenticação JWT, conectar a bancos de dados relacionais e NoSQL, e organizar um projeto FastAPI pronto para produção exige uma base sólida em Python e em conceitos de arquitetura de software. A Formação Python da Rocketseat cobre esse caminho completo, da introdução à linguagem até um módulo dedicado a FastAPI, passando por design de código, autenticação e segurança, e integração com bancos como MongoDB e Redis.

Conheça o Rocketseat Para Empresas

Oferecemos soluções personalizadas para empresas de todos os portes.

Rocketseat

Rocketseat

Ecossistema de educação contínua referência em programação e Inteligência Artificial.

Imagem contendo uma carta e um símbolo de check
NewsletterReceba conteúdos inéditos e novidades gratuitamente