Skip to content

B04 · Convenções da API: versionamento, erros, paginação e Scramble #6

Closed

Description

@tecrodrigocastro

Contexto

Admin, site público e app consomem a mesma API. Um contrato consistente evita retrabalho nos três clientes.

Escopo

  • Prefixo /api/v1 e roteamento por módulo
  • Envelope de erro único (code, message, errors, request_id) para validação, autenticação, autorização, não encontrado e erro interno
  • Paginação por cursor para listas grandes e por página para listas administrativas, com meta e links
  • API Resources padrão e convenção de datas (ISO 8601 em UTC) e valores monetários (centavos, inteiro, mais moeda)
  • Instalar e configurar Scramble, agrupando a documentação por módulo e exigindo autenticação em ambiente de produção
  • Middleware Idempotency-Key para endpoints que criam pedido ou cobrança
  • Header X-Request-Id propagado para logs

Critérios de aceite

  • /docs/api mostra a OpenAPI gerada e é válida
  • Toda resposta de erro segue o envelope, inclusive 404 e 500
  • Teste automatizado garante que toda rota de /api/v1 aparece na documentação

Notas técnicas

  • Valores em centavos evitam erro de ponto flutuante
  • Documentar a convenção em docs/api.md

Depende de

Definição de pronto

  • Testes passando na CI
  • Lint e análise estática sem erros
  • Documentação atualizada (OpenAPI via Scramble no backend, ou README do módulo no front)
  • Revisado por pelo menos uma pessoa

Activity

  1. moved this from Todo to In Progress in PHPeste Platformon Nov 4, 2026
  2. moved this from In Progress to Done in PHPeste Platformon Nov 5, 2026
  3. tecrodrigocastro commented on Nov 5, 2026

    @tecrodrigocastro
    MemberAuthor

    Fechada no PR #86 (merged):

    • /api/v1 via Route::apiV1() — prefixo e middleware group iguais em toda rota
    • Envelope de erro único (code, message, errors, request_id) para validação, auth, authz, not found, method not allowed, rate limit e 500
    • X-Request-Id propagado pro log e pra resposta
    • Idempotency-Key opt-in (idempotent) pra rotas de pedido/cobrança
    • App\Http\Resources\ApiResource com money() e isoDate()
    • Scramble agrupado por módulo, protegido fora de local (gate viewApiDocs)
    • GET /api/v1/ping como referência + docs/api.md

    composer check (32 testes, incluindo o que garante que toda rota /api/v1 aparece no OpenAPI gerado) e composer audit passam. Marcando como Done.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Type

No type

Projects

Relationships

None yet

Development

No branches or pull requests

Issue actions