O Swagger apresenta todos os endpoints, parâmetros, schemas e respostas disponíveis em cada ambiente.
| Ambiente | Swagger | OpenAPI JSON | Health check |
|---|---|---|---|
| Local | localhost:3333/docs | localhost:3333/docs-json | localhost:3333/health |
| Desenvolvimento | dogs-api-dev.onrender.com/docs | dogs-api-dev.onrender.com/docs-json | dogs-api-dev.onrender.com/health |
| Produção | dogs-api-prod.onrender.com/docs | dogs-api-prod.onrender.com/docs-json | dogs-api-prod.onrender.com/health |
- Abra o Swagger do ambiente desejado.
- Selecione um endpoint que não exija autenticação, como
GET /v1/breeds. - Clique em Try it out.
- Preencha os parâmetros opcionais e clique em Execute.
As rotas protegidas esperam um access token emitido pelo Supabase Auth:
Authorization: Bearer <supabase_access_token>No Swagger, clique em Authorize e informe o token no formato indicado. Tokens e credenciais nunca devem ser adicionados a exemplos, documentação, issues ou commits.
No plano gratuito do Render, o primeiro acesso pode demorar enquanto o serviço é iniciado.
Este documento registra o contrato base de respostas da dogs-api.
Use para endpoints que retornam um único recurso.
{
"data": {}
}Helper:
itemResponse(data);Use para endpoints paginados.
{
"data": [],
"pagination": {
"page": 1,
"perPage": 12,
"total": 100,
"totalPages": 9
}
}Helper:
listResponse(data, pagination);Todo erro público deve seguir:
{
"error": {
"code": "VALIDATION_ERROR",
"message": "Revise os campos informados.",
"details": []
}
}Regras:
codedeve ser estável para tratamento programático.messagedeve ser segura para exibir no frontend.detailspode conter informações úteis para validação, mas nunca secrets.- erros internos não devem vazar detalhes técnicos na resposta.
BAD_REQUEST
VALIDATION_ERROR
UNAUTHORIZED
FORBIDDEN
NOT_FOUND
CONFLICT
PAYLOAD_TOO_LARGE
TOO_MANY_REQUESTS
INTERNAL_SERVER_ERRORO filtro global fica em:
src/common/filters/http-exception.filter.tsEle converte exceções Nest e exceções da aplicação para o formato { error }.
Use AppException quando precisar controlar explicitamente code, message, status HTTP e detalhes.
Exemplo:
throw new AppException(apiErrorCodes.conflict, 'Username indisponível.', HttpStatus.CONFLICT);