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!