nestjs-api-standards
Skill2 starsChanged 4 months agoMITView on GitHub
Padroes de API NestJS - envelope de resposta, checklist de controller e endpoint, tratamento de erro, conversao snake_case para camelCase e RBAC por endpoint. Use ao criar/revisar controller ou service, ou ao definir contrato de endpoint novo.
In this repository18 other files it gives its agents.
- agents/AGENTS.mdAGENTS.md
- ai-operating-protocolSkill
- angular-feature-architectureSkill
- angular-primeng-auditSkill
- angular-primeng-uiSkill
- angular-testing-patternsSkill
- commit-and-branch-conventionsSkill
- frontend-auth-bootstrapSkill
- generating-backend-moduleSkill
- generating-data-layerSkill
- generating-dumb-createSkill
- generating-dumb-editSkill
- generating-dumb-listSkill
- generating-smart-pageSkill
- monorepo-workspace-standardsSkill
- prisma-migration-disciplineSkill
- rbac-security-auditorSkill
- shared-contracts-librarySkill
The file
Files
Padroes de API NestJS
Regras transversais do backend. Complementa generating-backend-module, que traz os templates.
Envelope de resposta
Todo endpoint retorna ApiResponse<T>:
interface ApiResponse<T> {
message: string; // mensagem legivel, pronta para exibir
statusCode: number;
type: 'success' | 'error';
data: T;
}Motivo: o frontend tem um unico ponto de desembrulho e uma unica forma de exibir feedback. Endpoint que devolve o payload cru quebra esse contrato e obriga tratamento especial no cliente.
O tipo do envelope vive na lib compartilhada, nao em cada app.
Checklist do controller
@ApiTags('nome-do-modulo')@ApiBearerAuth('JWT-auth')(mais@ApiSecurityse houver outro esquema)@UseGuards(JwtAuthGuard)(e o guard de permissao quando houver RBAC)@Controller('rota')com nome no plural, kebab-case
Checklist do endpoint
@ApiOperation({ summary, description })@ApiResponse({ status, type })para cada status possivel@ApiParam(...)quando a rota tem:id@ApiBody({ type })em POST/PUT/PATCH- Decorator de permissao quando aplicavel
ParseIntPipe(ou equivalente) em parametro numerico
Tratamento de erro
- Proibido
throw new Error(...): vira 500 generico e some com a causa. - Usar
HttpExceptioncom status correto, ou o helper central doBaseService. - Mapear erro do Prisma para status HTTP:
| Codigo | Significado | Status |
P2002 | violacao de unique | 409 |
P2025 | registro nao encontrado | 404 |
P2003 | violacao de FK | 400 ou 409 |
- Mensagem de erro nunca expoe stack, SQL ou caminho de arquivo.
snake_case no banco, camelCase na API
A conversao acontece no service (mapeamento explicito) ou no response DTO (@Expose +
@Transform). Nunca vazar union_code ou created_at para o consumidor da API.
Serializacao com excludeExtraneousValues: true: sem isso, campo novo do banco vaza para
a resposta sem ninguem decidir.
Paginacao
- Sempre no banco (
skip/take), nunca em memoria. - Resposta paginada carrega metadados: total, pagina atual, tamanho da pagina.
- Definir tamanho maximo de pagina e recusar valores acima.
RBAC
Formato recurso:acao. Mapeamento: POST -> create, GET -> read,
PUT/PATCH -> update, DELETE -> delete. Sem acao guarda-chuva.
Ver rbac-security-auditor para o protocolo completo.
Anti-patterns
- Regra de autorizacao hardcoded dentro do service (
if (!isAdmin) throw): autorizacao pertence ao guard. Service filtra visibilidade de dados, nao nega acesso por papel. selectimplicito no Prisma (retornar a linha inteira).- DTO de resposta declarado no app quando o contrato e publico: pertence a lib compartilhada.
- Endpoint sem
@ApiOperationutil ("cria" nao explica nada). - Logar payload inteiro em endpoint que recebe dado pessoal.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

