API REST Moderna com FastAPI e Python
API REST Moderna com FastAPI e Python
O FastAPI se consolidou como a framework mais moderna e rapida para desenvolvimento de APIs em Python. Com suporte nativo a async/await e validacao automatica, ele revolutionou a forma como construimos endpoints REST.
Por Que FastAPI?
- Performance: Ate 300% mais rapido que Flask
- Type Safety: Validacao automatica com type hints
- Async Nativo: Suporte completo a operacoes assincronas
- Documentacao Automatica: Swagger e ReDoc gerados automaticamente
Estrutura do Projeto
meu-projeto/
âââ app/
â âââ main.py
â âââ config.py
â âââ database.py
â âââ models/
â âââ schemas/
â âââ routers/
â âââ services/
âââ tests/
âââ requirements.txt
Configuracao Base
from pydantic_settings import BaseSettings
from functools import lru_cache
class Settings(BaseSettings):
APP_NAME: str = "Minha API"
DATABASE_URL: str
SECRET_KEY: str
class Config:
env_file = ".env"
@lru_cache()
def get_settings():
return Settings()
Modelos de Dados
from pydantic import BaseModel, EmailStr
from datetime import datetime
class UserCreate(BaseModel):
email: EmailStr
name: str
password: str
class UserResponse(BaseModel):
id: int
email: str
name: str
created_at: datetime
class Config:
from_attributes = True
Servicos de Negocio
from sqlalchemy.orm import Session
from sqlalchemy import select
class UserService:
def __init__(self, db: Session):
self.db = db
async def create_user(self, user_data: UserCreate) -> User:
user = User(**user_data.dict())
self.db.add(user)
await self.db.commit()
return user
async def get_user(self, user_id: int) -> User | None:
result = await self.db.execute(
select(User).where(User.id == user_id)
)
return result.scalar_one_or_none()
Routers com Autenticacao
from fastapi import APIRouter, Depends, HTTPException
router = APIRouter(prefix="/users")
@router.post("/", response_model=UserResponse)
async def create_user(user_data: UserCreate, db = Depends(get_db)):
service = UserService(db)
try:
return await service.create_user(user_data)
except ValueError as e:
raise HTTPException(status_code=400, detail=str(e))
@router.get("/{user_id}", response_model=UserResponse)
async def get_user(user_id: int, db = Depends(get_db)):
service = UserService(db)
user = await service.get_user(user_id)
if not user:
raise HTTPException(status_code=404)
return user
Conclusao
O FastAPI e a escolha ideal para APIs modernas em Python. Comece seu projeto hoje!
Este artigo foi escrito com carinho para ajudar nossos leitores a compreender melhor o tema abordado. Ao longo do texto, apresentamos informacoes relevantes, dicas praticas e orientacoes que podem ser aplicadas no dia a dia.
Agradecemos por ler este artigo e esperamos que tenha sido util. Nao esqueça de compartilhar com seus amigos e familiares que tambem podem se beneficiar dessas informacoes. Sua opiniao e muito importante para nos!
Se voce tem alguma duvida ou sugestao, deixe nos comentarios abaixo. Estamos sempre dispostos a ajudar e aprender mais sobre os assuntos que interessam ao nosso publico. Ate a proxima!
Continue acompanhando nosso blog para mais conteudos como este. Temos artigos sobre diversas categorias, sempre com informacoes atualizadas e de qualidade. Siga-nos nas redes sociais para nao perder nenhuma atualizacao!