Skip to main content

Introdução | Fast API

  • Introdução | Fast API

Visão Geral

FastAPI é um framework moderno para construção de APIs HTTP com Python 3.8+, baseado em:

  • Starlette (ASGI)
  • Pydantic (validação de dados)
  • Tipagem estática do Python

Principais características:

  • Alta performance (ASGI)
  • Validação automática via type hints
  • Documentação automática (Swagger e ReDoc)
  • Suporte nativo a async/await

Instalação

Crie um ambiente virtual:

python -m venv venv

Ative no Windows (Git Bash):

source venv/Scripts/activate

Instale as dependências:

pip install fastapi uvicorn

Estrutura mínima do projeto

project/

├── main.py
└── requirements.txt

Gerar requirements:

pip freeze > requirements.txt

Criando sua primeira API

Arquivo main.py:

from fastapi import FastAPI

app = FastAPI()

@app.get("/")
def read_root():
return {"message": "API funcionando"}

Executar:

uvicorn main:app --reload

Acessar:

http://127.0.0.1:8000

Documentação automática

FastAPI gera documentação automaticamente:

A documentação é baseada em OpenAPI.


Criando rotas com parâmetros

Path Parameters

@app.get("/users/{user_id}")
def get_user(user_id: int):
return {"user_id": user_id}

Se for enviado texto no lugar de inteiro → erro 422 automático.


Query Parameters

from fastapi import Query

@app.get("/search")
def search(q: str = Query(min_length=3)):
return {"query": q}

Exemplo:

/search?q=python

Recebendo dados no corpo da requisição

FastAPI utiliza Pydantic para validação.

from pydantic import BaseModel

class User(BaseModel):
name: str
email: str
age: int

@app.post("/users")
def create_user(user: User):
return user

Exemplo de JSON:

{
"name": "Adolfo",
"email": "adolfo@email.com",
"age": 30
}

Validação é automática.


Organização em camadas

Estrutura recomendada:

app/

├── main.py
├── database.py
├── models.py
├── schemas.py
├── crud.py
└── routes/

Separação de responsabilidades:

  • models → ORM (SQLAlchemy)
  • schemas → validação Pydantic
  • crud → operações de banco
  • routes → endpoints HTTP

Integração com Banco de Dados (PostgreSQL)

Instalação:

pip install sqlalchemy psycopg[binary]

Conexão básica:

from sqlalchemy import create_engine

DATABASE_URL = "postgresql+psycopg://user:password@localhost:5432/db"

engine = create_engine(DATABASE_URL)

Criar tabelas:

Base.metadata.create_all(bind=engine)

Execução em produção

Para produção:

uvicorn main:app --host 0.0.0.0 --port 8000

Parâmetros importantes:

  • --host 0.0.0.0 → permite acesso externo
  • --port → define porta
  • --workers → múltiplos processos

Exemplo:

uvicorn main:app --host 0.0.0.0 --port 8000 --workers 4

Boas práticas

  • Use tipagem forte
  • Separe schemas de models
  • Utilize migrations (Alembic)
  • Use variáveis de ambiente para credenciais
  • Implemente autenticação (JWT)
  • Estruture logs

Recursos úteis