Programador Leigo
FastAPI 15 min leitura 01 FEV 2026

APIs REST com FastAPI: do zero ao deploy

Crie APIs modernas com tipagem, validação automática e documentação integrada.


O que é FastAPI?

FastAPI é um framework Python moderno para construir APIs. Ele foi criado por Sebastian Ramirez e se destaca por três motivos: performance comparável a Node.js e Go, validação automática de dados e documentação interativa gerada sem esforço.

O FastAPI usa type hints do Python para validar requisições e gerar documentação. Isso significa que o mesmo código que define seus endpoints também serve como contrato da API.

pip install fastapi uvicorn

Sua primeira API

Vamos criar uma API simples para gerenciar tarefas:

from fastapi import FastAPI

app = FastAPI(title="API de Tarefas", version="1.0.0")

@app.get("/")
def raiz():
    return {"mensagem": "API de Tarefas funcionando!"}

@app.get("/status")
def status():
    return {"status": "online", "versao": "1.0.0"}

Para rodar o servidor:

uvicorn main:app --reload

Acesse http://localhost:8000/docs para ver a documentação interativa gerada automaticamente pelo Swagger UI.

Modelos com Pydantic

O FastAPI usa o Pydantic para validação de dados. Você define um modelo e o framework garante que os dados recebidos estão no formato correto:

from pydantic import BaseModel
from typing import Optional

class TarefaCriar(BaseModel):
    titulo: str
    descricao: Optional[str] = None
    concluida: bool = False

class TarefaResposta(BaseModel):
    id: int
    titulo: str
    descricao: Optional[str]
    concluida: bool

Se alguém enviar um JSON sem o campo titulo, o FastAPI retorna automaticamente um erro 422 com a descrição do problema.

Endpoints CRUD

Agora vamos implementar as operações completas de criar, ler, atualizar e deletar:

from fastapi import FastAPI, HTTPException

app = FastAPI()

tarefas = {}
contador_id = 0

@app.post("/tarefas", response_model=TarefaResposta, status_code=201)
def criar_tarefa(tarefa: TarefaCriar):
    global contador_id
    contador_id += 1
    nova_tarefa = TarefaResposta(id=contador_id, **tarefa.model_dump())
    tarefas[contador_id] = nova_tarefa
    return nova_tarefa

@app.get("/tarefas", response_model=list[TarefaResposta])
def listar_tarefas(concluida: Optional[bool] = None):
    resultado = list(tarefas.values())
    if concluida is not None:
        resultado = [t for t in resultado if t.concluida == concluida]
    return resultado

@app.get("/tarefas/{tarefa_id}", response_model=TarefaResposta)
def buscar_tarefa(tarefa_id: int):
    if tarefa_id not in tarefas:
        raise HTTPException(status_code=404, detail="Tarefa nao encontrada")
    return tarefas[tarefa_id]

@app.put("/tarefas/{tarefa_id}", response_model=TarefaResposta)
def atualizar_tarefa(tarefa_id: int, tarefa: TarefaCriar):
    if tarefa_id not in tarefas:
        raise HTTPException(status_code=404, detail="Tarefa nao encontrada")
    tarefa_atualizada = TarefaResposta(id=tarefa_id, **tarefa.model_dump())
    tarefas[tarefa_id] = tarefa_atualizada
    return tarefa_atualizada

@app.delete("/tarefas/{tarefa_id}", status_code=204)
def deletar_tarefa(tarefa_id: int):
    if tarefa_id not in tarefas:
        raise HTTPException(status_code=404, detail="Tarefa nao encontrada")
    del tarefas[tarefa_id]

Middlewares e CORS

Para permitir que um frontend acesse sua API, você precisa configurar o CORS:

from fastapi.middleware.cors import CORSMiddleware

app.add_middleware(
    CORSMiddleware,
    allow_origins=["http://localhost:3000"],
    allow_credentials=True,
    allow_methods=["*"],
    allow_headers=["*"],
)

Você também pode criar middlewares personalizados para logging ou autenticação:

import time
from fastapi import Request

@app.middleware("http")
async def medir_tempo(request: Request, call_next):
    inicio = time.time()
    response = await call_next(request)
    duracao = time.time() - inicio
    response.headers["X-Tempo-Processamento"] = str(round(duracao, 4))
    return response

Deploy com Uvicorn e Docker

Para colocar sua API em produção, crie um Dockerfile simples:

# Dockerfile
FROM python:3.12-slim

WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

COPY . .

CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]

E o requirements.txt:

fastapi==0.115.0
uvicorn==0.30.0

Para rodar:

docker build -t api-tarefas .
docker run -p 8000:8000 api-tarefas

Conclusão

O FastAPI combina performance, validação e documentação de forma elegante. Com type hints e Pydantic, você escreve menos código e ganha mais segurança. A documentação interativa acelera o desenvolvimento e a comunicação com o time de frontend. Para projetos que precisam de uma API robusta e moderna, o FastAPI é uma escolha excelente.

Continue lendo

Compartilhar