Padrão API
Tecnologia principal: Ruby on Rails 8 (
ActionController::API). Cobre o ciclo completo de uma requisição — roteamento, autenticação, autorização, erro — com o padrão que uma API Rails bem estruturada segue na prática.
Visão geral
Esta área documenta o padrão de API usado como referência para os sistemas do How to Dev: como uma requisição é roteada, tratada, autenticada, autorizada e respondida — o ciclo completo, do jeito que uma API Rails madura faz isso. O escopo é deliberadamente a camada de API: contrato HTTP, controllers, serialização, autenticação, autorização, erros. Modelagem de dado (schema, migration, associação ActiveRecord) fica fora daqui de propósito — é assunto do Padrão Banco de Dados próprio, pra não misturar duas camadas que merecem cada uma sua própria régua.
Stack
Rails (ActionController::API, sem view), Devise + devise-jwt
(autenticação), CanCanCan (autorização, orientada a dado — não
can :manage, X hardcoded por model), ActiveModelSerializers
(serialização), Pagy (paginação), Ransack (filtro/busca), Rack::Attack
(rate limiting), Rack::Cors (CORS), Solid Queue (job assíncrono),
RuboCop + Brakeman (qualidade e segurança estática). Testes em Minitest,
não RSpec.
PaperTrail (auditoria) e paranoia (soft delete) também fazem parte da
stack, mas são gems que atuam na camada de model — documentadas em
detalhe no Padrão Banco de Dados,
não aqui. O que aparece do lado da API por causa delas: um destroy
continua devolvendo o mesmo envelope 200 de sempre (ver
Envelope de resposta),
mas por baixo o registro é marcado como removido, não apagado da tabela
(paranoia); e existe uma rota só-leitura pro histórico de mudança de
qualquer registro (GET /api/v1/admin/versions, alimentada pelo
PaperTrail).
Envelope de resposta
Toda resposta — sucesso ou erro, inclusive destroy — sai no mesmo
formato:
{ "status": "success", "message": "Papeis listados com sucesso", "data": { "...": "..." } }
{ "status": "error", "message": "Registro não encontrado", "errors": null }
Detalhe completo, com o código que gera isso, em Envelope de resposta.
Roteamento e versionamento
Roteamento e versionamento
documenta como toda rota vive sob /api/v1/..., a separação
admin/auth, e uma pegadinha comum de configurar uma rota catch-all no
lugar errado.
Tratamento de erros
Tratamento de erros
documenta o mapa rescue_from central e o payload exato de cada código
de status (404, 422, 401, 403, 500).
Paginação
Paginação documenta como o Pagy é configurado, o teto de itens por página, e o formato de metadado que volta pro front.
Filtros e busca
Filtros e busca documenta o padrão Ransack usado em toda listagem admin, e a lista de atributo sensível que nunca pode ser filtrável.
Padrão de service
Service e ServiceResult
documenta por que o controller nunca decide sucesso/erro na mão — todo
service devolve um ServiceResult só, controller só chama render_result.
Segurança
Segurança cobre autenticação (JWT via devise-jwt), autorização (CanCanCan orientado a dado), força bruta e bloqueio (Rack::Attack) e CORS — mesma régua de documentação completa do Padrão Frontend: o que cada camada protege e como configurar, em detalhe, não resumo.

