Ir para o conteúdo

Quickstart

Crie uma API funcional em 5 minutos.

Visão Geral da Arquitetura

flowchart TB
    subgraph Client
        REQ[HTTP Request]
    end
    
    subgraph "Stride"
        MW[Middleware Stack]
        RT[AutoRouter]
        VS[ViewSet]
        MD[Model]
        DB[(Database)]
    end
    
    REQ --> MW
    MW --> RT
    RT --> VS
    VS --> MD
    MD --> DB
    
    style MW fill:#e1f5fe
    style VS fill:#fff3e0
    style MD fill:#e8f5e9

Requisitos

  • Python 3.12+
  • PostgreSQL (ou SQLite para dev)

Instalação

# Instalação global (recomendado)
pipx install stride

# Ou por projeto
pip install stride

Criar Projeto

stride init my-api
cd my-api

Isso cria:

my-api/
├── src/
│   ├── settings.py      # Configuração
│   ├── main.py          # Entry point
│   └── apps/
│       ├── models.py    # Imports de models
│       └── users/       # App de exemplo
├── migrations/
├── .env
└── pyproject.toml

Configurar

Edite src/settings.py:

from strider.config import Settings, configure

class AppSettings(Settings):
    app_name: str = "Minha API"
    
    # Auth - auto-configurado quando user_model definido
    user_model: str = "src.apps.users.models.User"
    models_module: str = "src.apps"

settings = configure(settings_class=AppSettings)

Edite .env:

DATABASE_URL=postgresql+asyncpg://user:pass@localhost/mydb
SECRET_KEY=change-me-in-production
DEBUG=true

Criar Model

# src/apps/posts/models.py
from strider import Model, Field
from sqlalchemy.orm import Mapped

class Post(Model):
    __tablename__ = "posts"
    
    id: Mapped[int] = Field.pk()
    title: Mapped[str] = Field.string(max_length=200, index=True)
    content: Mapped[str] = Field.text()
    published: Mapped[bool] = Field.boolean(default=False)

Importe no arquivo barrel:

# src/apps/models.py
from src.apps.posts.models import Post  # noqa

Criar ViewSet

# src/apps/posts/views.py
from strider import ModelViewSet
from strider.permissions import AllowAny
from .models import Post

class PostViewSet(ModelViewSet):
    model = Post
    permission_classes = [AllowAny]  # Acesso público

Criar URLs

# src/apps/posts/urls.py
from strider import path
from .views import PostViewSet

urlpatterns = [
    path("posts", PostViewSet),
]

Entry Point

# src/main.py
from strider import StrideApp

app = StrideApp()  # Auto-discovery carrega tudo automaticamente

O framework automaticamente: - Carrega settings do .env - Descobre todas as apps em installed_apps - Carrega URLs de cada urls.py - Aplica middlewares configurados - Cria tabelas (se auto_create_tables=True)

Executar

# Criar migration
stride makemigrations --name add_posts

# Aplicar migration
stride migrate

# Iniciar servidor
stride run

Testar

Abra http://localhost:8000/docs

Endpoints gerados:

Método Path Ação
GET /api/v1/posts/ Listar
POST /api/v1/posts/ Criar
GET /api/v1/posts/{id} Obter um
PUT /api/v1/posts/{id} Atualizar
PATCH /api/v1/posts/{id} Atualização parcial
DELETE /api/v1/posts/{id} Deletar

Exemplo com Auto-Configuração Completa

# src/settings.py
from strider.config import Settings, PydanticField, configure

class AppSettings(Settings):
    # ══════════════════════════════════════════════════════════════════
    # Aplicação
    # ══════════════════════════════════════════════════════════════════
    app_name: str = "Minha API"
    
    # ══════════════════════════════════════════════════════════════════
    # Auth (auto-configurado)
    # ══════════════════════════════════════════════════════════════════
    user_model: str = "src.apps.users.models.User"
    models_module: str = "src.apps"
    
    # ══════════════════════════════════════════════════════════════════
    # Middleware
    # ══════════════════════════════════════════════════════════════════
    middleware: list[str] = [
        "timing",
        "request_id",
        "auth",
    ]
    
    # ══════════════════════════════════════════════════════════════════
    # Campos customizados
    # ══════════════════════════════════════════════════════════════════
    stripe_key: str = PydanticField(default="", description="Stripe API Key")

# Configura TUDO automaticamente
settings = configure(settings_class=AppSettings)

Próximos passos

  • Criar uma aplicação — Guia completo (config, DB, ViewSet, APIView, serializers, paginação, WebSocket, SSE, validação)
  • Settings — Opções de configuração
  • Models — Tipos de campos, relacionamentos
  • ViewSets — Serializer, actions, hooks
  • Serializers — Input/Output e fluxo de validação única
  • Auth — Autenticação JWT