FastAPI em Python: Como Criar APIs Rápidas

Tempo de leitura: 13 minutos
logo da FastAPI

O FastAPI é uma das ferramentas mais populares para criar APIs em Python. Ele combina simplicidade, velocidade e recursos modernos que facilitam o desenvolvimento de aplicações web robustas.

Recomendo conferir o vídeo abaixo do canal Hashtag Programação que te ensina sobre como usar o FastAPI:

YouTube player

Se você já trabalha com Python e quer criar APIs de forma eficiente, este guia completo vai te ensinar tudo que precisa saber sobre FastAPI.

O Que É FastAPI e Por Que Escolhê-lo

FastAPI é um framework web moderno e de alto desempenho para construir APIs com Python. Criado por Sebastián Ramírez, ele se destaca por usar recursos modernos da linguagem, como as type hints do Python 3.6+, para oferecer validação automática de dados e documentação interativa.

O nome FastAPI não é por acaso. Ele é um dos frameworks mais rápidos disponíveis para Python, competindo diretamente com soluções em Node.js e Go. Isso acontece porque ele foi construído sobre Starlette para a parte web e Pydantic para validação de dados.

Principais características que tornam o FastAPI especial:

  • Velocidade excepcional de execução, próxima a NodeJS e Go
  • Desenvolvimento mais rápido, aumentando a produtividade em até 300%
  • Menos bugs graças à validação automática de tipos
  • Documentação automática com Swagger UI e ReDoc
  • Baseado em padrões abertos como OpenAPI e JSON Schema
  • Suporte nativo a operações assíncronas

Empresas como Microsoft, Uber e Netflix já utilizam FastAPI em produção. A popularidade do framework cresce exponencialmente, e ele já supera até mesmo o Django em algumas métricas de crescimento no GitHub.

Como Instalar e Configurar o FastAPI

Antes de começar, você precisa ter o Python 3.7 ou superior instalado no seu computador. A instalação do FastAPI é extremamente simples e pode ser feita em poucos minutos.

Primeiro, crie um ambiente virtual para manter suas dependências organizadas. Abra seu terminal e execute os seguintes comandos:

Bash
python -m venv venv
source venv/bin/activate  # No Windows: venv\Scripts\activate

Agora instale o FastAPI e o Uvicorn, que é o servidor ASGI usado para rodar a aplicação:

Bash
pip install fastapi uvicorn[standard]

Pronto! Com apenas esses dois comandos, você já tem tudo necessário para começar a desenvolver. O Uvicorn é fundamental porque o FastAPI precisa de um servidor ASGI para funcionar, diferente do Flask que pode usar WSGI.

Para verificar se a instalação foi bem-sucedida, você pode usar o comando pip list e confirmar que tanto o fastapi quanto o uvicorn aparecem na lista de bibliotecas instaladas.

Criando Sua Primeira API com FastAPI

Vamos criar uma API simples para você entender como o FastAPI funciona na prática. Crie um arquivo chamado main.py e adicione o seguinte código:

Python
from fastapi import FastAPI

app = FastAPI()

@app.get("/")
def read_root():
    return {"mensagem": "Olá, FastAPI!"}

@app.get("/items/{item_id}")
def read_item(item_id: int, q: str = None):
    return {"item_id": item_id, "query": q}

Esse código cria duas rotas básicas. A primeira responde na raiz da aplicação e a segunda aceita um parâmetro de caminho. Repare como usamos type hints para indicar que item_id deve ser um número inteiro.

Para executar sua API, use o comando:

Bash
uvicorn main:app --reload

O parâmetro --reload faz com que o servidor reinicie automaticamente sempre que você modificar o código. Isso é extremamente útil durante o desenvolvimento, similar ao que você teria em um projeto Flask.

Acesse http://127.0.0.1:8000 no seu navegador e você verá a resposta JSON. Mas a mágica acontece quando você acessa http://127.0.0.1:8000/docs. Ali está a documentação automática da sua API, completamente interativa!

Entendendo os Métodos HTTP no FastAPI

APIs RESTful utilizam diferentes métodos HTTP para diferentes operações. O FastAPI facilita muito a implementação desses métodos através de decoradores intuitivos.

GET: Usado para buscar dados. É o método mais comum e não modifica informações no servidor.

Python
@app.get("/usuarios")
def listar_usuarios():
    return {"usuarios": ["João", "Maria", "Pedro"]}

POST: Serve para criar novos recursos. Você envia dados no corpo da requisição.

Python
from pydantic import BaseModel

class Usuario(BaseModel):
    nome: str
    email: str
    idade: int

@app.post("/usuarios")
def criar_usuario(usuario: Usuario):
    return {"mensagem": f"Usuário {usuario.nome} criado com sucesso"}

PUT e PATCH: Atualizam recursos existentes. PUT substitui completamente, PATCH modifica parcialmente.

Python
@app.put("/usuarios/{usuario_id}")
def atualizar_usuario(usuario_id: int, usuario: Usuario):
    return {"mensagem": f"Usuário {usuario_id} atualizado"}

DELETE: Remove recursos do sistema.

Python
@app.delete("/usuarios/{usuario_id}")
def deletar_usuario(usuario_id: int):
    return {"mensagem": f"Usuário {usuario_id} removido"}

Validação Automática com Pydantic

Uma das características mais poderosas do FastAPI é a validação automática de dados usando Pydantic. Você define modelos de dados como classes Python, e o framework cuida do resto.

Quando você cria um modelo Pydantic, está definindo exatamente quais campos são obrigatórios, seus tipos e até regras de validação mais complexas:

Python
from pydantic import BaseModel, EmailStr, validator

class Produto(BaseModel):
    nome: str
    preco: float
    descricao: str = None
    em_estoque: bool = True
    
    @validator('preco')
    def preco_positivo(cls, v):
        if v <= 0:
            raise ValueError('O preço deve ser positivo')
        return v

Se alguém enviar dados inválidos para sua API, o FastAPI automaticamente retorna uma mensagem de erro clara explicando o problema. Isso economiza muito tempo que você gastaria escrevendo código de validação manual.

O sistema de validação também funciona com tipos complexos. Você pode usar listas, dicionários, valores opcionais e até modelos aninhados. Tudo é validado automaticamente.

Trabalhando com Banco de Dados

Conectar sua API FastAPI a um banco de dados é essencial para aplicações reais. A integração mais comum é com SQLAlchemy, mas você também pode usar outros ORMs ou trabalhar diretamente com drivers de banco de dados.

Primeiro, instale as dependências necessárias:

Bash
pip install sqlalchemy databases

Aqui está um exemplo básico de configuração com SQLite:

Python
from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker

SQLALCHEMY_DATABASE_URL = "sqlite:///./app.db"

engine = create_engine(SQLALCHEMY_DATABASE_URL)
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
Base = declarative_base()

class Usuario(Base):
    __tablename__ = "usuarios"
    
    id = Column(Integer, primary_key=True, index=True)
    nome = Column(String)
    email = Column(String, unique=True, index=True)

Para usar o banco em suas rotas, crie uma dependência que gerencia a sessão:

Python
from fastapi import Depends
from sqlalchemy.orm import Session

def get_db():
    db = SessionLocal()
    try:
        yield db
    finally:
        db.close()

@app.get("/usuarios")
def listar_usuarios(db: Session = Depends(get_db)):
    usuarios = db.query(Usuario).all()
    return usuarios

Se preferir trabalhar com MySQL, basta alterar a string de conexão. O FastAPI também suporta PostgreSQL, MongoDB e outros bancos de dados populares.

Autenticação e Segurança

Proteger sua API é fundamental. O FastAPI oferece diversos recursos de segurança integrados, incluindo suporte a OAuth2, JWT tokens e autenticação básica.

Um exemplo simples de autenticação com token Bearer:

Python
from fastapi import Depends, HTTPException, status
from fastapi.security import HTTPBearer, HTTPAuthorizationCredentials

security = HTTPBearer()

def verificar_token(credentials: HTTPAuthorizationCredentials = Depends(security)):
    token = credentials.credentials
    if token != "meu-token-secreto":
        raise HTTPException(
            status_code=status.HTTP_401_UNAUTHORIZED,
            detail="Token inválido"
        )
    return token

@app.get("/protegido")
def rota_protegida(token: str = Depends(verificar_token)):
    return {"mensagem": "Acesso autorizado"}

Para implementações mais robustas, você pode usar JWT (JSON Web Tokens):

Python
from datetime import datetime, timedelta
from jose import JWTError, jwt

SECRET_KEY = "sua-chave-secreta-super-segura"
ALGORITHM = "HS256"

def criar_token(data: dict):
    to_encode = data.copy()
    expire = datetime.utcnow() + timedelta(hours=24)
    to_encode.update({"exp": expire})
    return jwt.encode(to_encode, SECRET_KEY, algorithm=ALGORITHM)

Sempre use HTTPS em produção e nunca exponha suas chaves secretas no código. Use variáveis de ambiente para guardar informações sensíveis.

Operações Assíncronas e Performance

O FastAPI brilha quando falamos de operações assíncronas. Ele foi construído pensando em alto desempenho desde o início, e usar async/await é extremamente simples.

Você pode definir rotas assíncronas adicionando async antes da definição da função:

Python
import asyncio
from fastapi import FastAPI

@app.get("/async")
async def rota_assincrona():
    await asyncio.sleep(1)
    return {"mensagem": "Operação assíncrona concluída"}

Isso é especialmente útil quando você precisa fazer múltiplas requisições externas ou operações de I/O. Com asyncio, sua aplicação pode processar outras requisições enquanto aguarda respostas.

Um exemplo prático fazendo requisições HTTP assíncronas:

Python
import httpx

@app.get("/dados-externos")
async def buscar_dados():
    async with httpx.AsyncClient() as client:
        response = await client.get("https://api.exemplo.com/dados")
        return response.json()

A diferença de performance entre rotas síncronas e assíncronas pode ser significativa em aplicações que fazem muitas chamadas externas ou acessam bancos de dados frequentemente.

Testando Sua API FastAPI

Testes são essenciais para garantir que sua API funcione corretamente. O FastAPI facilita muito a criação de testes automatizados usando pytest.

Instale as dependências de teste:

Bash
pip install pytest httpx

Crie um arquivo test_main.py com seus testes:

Python
from fastapi.testclient import TestClient
from main import app

client = TestClient(app)

def test_read_root():
    response = client.get("/")
    assert response.status_code == 200
    assert response.json() == {"mensagem": "Olá, FastAPI!"}

def test_criar_usuario():
    response = client.post(
        "/usuarios",
        json={"nome": "João", "email": "joao@email.com", "idade": 25}
    )
    assert response.status_code == 200

Execute os testes com o comando pytest. O TestClient simula requisições HTTP sem precisar rodar o servidor, tornando os testes muito mais rápidos.

Você também pode testar autenticação, validações e comportamentos de erro. Quanto mais testes você escrever, mais confiável sua API será.

Documentação Automática e Interativa

Uma das funcionalidades mais impressionantes do FastAPI é a geração automática de documentação. Sem escrever uma linha de código adicional, você tem acesso a duas interfaces de documentação completas.

O Swagger UI está disponível em /docs e oferece uma interface interativa onde você pode testar todos os endpoints diretamente no navegador. É perfeito para desenvolvimento e demonstrações.

O ReDoc está em /redoc e oferece uma apresentação mais limpa e focada em leitura. É ideal para compartilhar com outras equipes ou documentar APIs públicas.

Você pode personalizar a documentação adicionando descrições, exemplos e metadados:

Python
@app.post("/usuarios", 
    summary="Criar novo usuário",
    description="Cria um novo usuário no sistema com nome, email e idade",
    response_description="Usuário criado com sucesso"
)
def criar_usuario(usuario: Usuario):
    return {"mensagem": f"Usuário {usuario.nome} criado"}

Todos os parâmetros, tipos de retorno e validações que você define aparecem automaticamente na documentação. Isso economiza horas de trabalho manual e garante que a documentação esteja sempre atualizada.

Deploy e Produção

Colocar sua API em produção exige alguns cuidados adicionais. O Uvicorn que usamos no desenvolvimento não é ideal para ambientes de produção com alto tráfego.

Para produção, é recomendado usar Gunicorn com workers Uvicorn:

Bash
pip install gunicorn
gunicorn main:app --workers 4 --worker-class uvicorn.workers.UvicornWorker --bind 0.0.0.0:8000

Outras boas práticas para produção incluem:

  • Usar variáveis de ambiente para configurações sensíveis
  • Implementar logging adequado para rastrear erros
  • Configurar CORS se sua API for acessada por frontends
  • Adicionar rate limiting para prevenir abuso
  • Usar HTTPS com certificados SSL/TLS válidos
  • Implementar monitoramento e alertas

Você pode fazer deploy em diversas plataformas como Heroku, AWS, Google Cloud, Digital Ocean ou Vercel. O FastAPI funciona perfeitamente em containers Docker também:

Dockerfile
FROM python:3.9
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]

Diferenças Entre FastAPI e Outros Frameworks

Quando comparamos o FastAPI com outros frameworks Python como Flask e Django, as diferenças ficam claras. O Flask é mais simples e flexível, mas exige muitas bibliotecas adicionais para ter os recursos que o FastAPI oferece nativamente.

O Django é um framework completo com muitas funcionalidades, mas é mais pesado e focado em aplicações web tradicionais, não especificamente em APIs. O FastAPI foi pensado desde o início para construir APIs modernas.

Vantagens do FastAPI:

  • Performance superior a Flask e Django
  • Validação automática de dados com Pydantic
  • Documentação gerada automaticamente
  • Suporte nativo a operações assíncronas
  • Menos código necessário para mesmas funcionalidades
  • Type hints obrigatórios melhoram qualidade do código

Quando usar cada framework:

  • FastAPI: APIs modernas, microsserviços, aplicações que exigem alta performance
  • Flask: Projetos pequenos, APIs simples, quando você precisa de máxima flexibilidade
  • Django: Aplicações web completas com admin, ORM robusto e muitas funcionalidades prontas

A escolha depende das necessidades do seu projeto. Para APIs puras, o FastAPI geralmente é a melhor opção atualmente disponível no ecossistema Python.

Recursos Avançados e Boas Práticas

Conforme sua aplicação cresce, você precisará conhecer recursos mais avançados do FastAPI. A organização do código em múltiplos arquivos é essencial para manter a manutenibilidade.

Use o sistema de APIRouter para modularizar suas rotas:

Python
from fastapi import APIRouter

router = APIRouter(prefix="/usuarios", tags=["usuarios"])

@router.get("/")
def listar_usuarios():
    return {"usuarios": []}

@router.post("/")
def criar_usuario():
    return {"mensagem": "Usuário criado"}

No arquivo principal, importe e inclua o router:

Python
from routers import usuarios

app.include_router(usuarios.router)

Outras boas práticas importantes:

  • Use injeção de dependências para compartilhar lógica entre rotas
  • Implemente tratamento de erros personalizado com exception handlers
  • Configure CORS adequadamente para APIs públicas
  • Use background tasks para operações demoradas
  • Implemente paginação em endpoints que retornam listas
  • Adicione rate limiting para proteger contra abuso

O FastAPI também suporta WebSockets, Server-Sent Events e GraphQL através de bibliotecas adicionais. A flexibilidade do framework permite adaptar sua API para praticamente qualquer necessidade.

Perguntas Frequentes (FAQ)

1. O que é FastAPI?

FastAPI é um framework moderno para criar APIs em Python com alta performance e validação automática de dados.

2. Como posso começar com FastAPI?

Instale com pip install fastapi uvicorn e crie um arquivo Python com suas rotas usando decoradores como @app.get().

3. FastAPI é mais rápido que Flask?

Sim, FastAPI é significativamente mais rápido que Flask, especialmente para operações assíncronas e validação de dados.

4. Preciso conhecer programação assíncrona para usar FastAPI?

Não é obrigatório. FastAPI funciona com funções síncronas normais, mas oferece suporte completo para async/await quando necessário.

5. Como o FastAPI gera documentação automática?

Usa os type hints do Python e modelos Pydantic para gerar automaticamente documentação OpenAPI, disponível em /docs e /redoc.

6. Posso usar FastAPI com bancos de dados?

Sim, FastAPI funciona com qualquer ORM ou biblioteca de banco de dados, incluindo SQLAlchemy, Tortoise ORM e MongoDB.

7. FastAPI é adequado para produção?

Absolutamente. É usado em produção por empresas como Netflix, Uber e Microsoft. Oferece alta performance e recursos empresariais.

8. Como implementar autenticação no FastAPI?

FastAPI oferece suporte nativo para JWT, OAuth2, cookies e outros métodos de autenticação através de dependências.

Compartilhe:

Facebook
WhatsApp
Twitter
LinkedIn

Conteúdo do artigo

    Artigos relacionados

    Logo do Python ao lado do logo da bilioteca Selenium
    Desenvolvimento WebBibliotecas
    Foto do Leandro Hirt

    Selenium no Python: Automação Web Completa

    A automação web se tornou uma habilidade essencial para programadores que desejam economizar tempo em tarefas repetitivas. O Selenium é

    Ler mais

    Tempo de leitura: 17 minutos
    18/12/2025
    logo do BeautifulSoup em um fundo branco
    BibliotecasDesenvolvimento Web
    Foto do Leandro Hirt

    Introdução ao Web Scraping com BeautifulSoup e Requests

    O que é Web Scraping? Web scraping é uma técnica para extrair informações de sites da internet de forma automática.

    Ler mais

    Tempo de leitura: 19 minutos
    04/05/2025
    Logo do Flask em um fundo branco
    Desenvolvimento WebFrameworks
    Foto do Leandro Hirt

    Tutorial em Flask: Do Zero ao Primeiro Projeto

    Este tutorial em Flask vai mostrar como criar uma aplicação web simples. Você não precisa de conhecimento prévio em programação

    Ler mais

    Tempo de leitura: 9 minutos
    17/04/2025
    texto escrito "o que é Django", com a logo do Django
    Desenvolvimento WebFrameworks
    Foto do Leandro Hirt

    Django: Conheça o Framework Web de Alto Nível

    Se você está começando a aprender Python e quer desenvolver aplicações web profissionais, o Django é o framework ideal. Usado

    Ler mais

    Tempo de leitura: 16 minutos
    06/04/2025