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:
-
Swagger UI http://127.0.0.1:8000/docs
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
- Documentação oficial: https://fastapi.tiangolo.com
- Padrão OpenAPI
- Compatível com Docker e Kubernetes