Habilidade de Scaffold de API
Bootstrap Fastify/Nest com testes e Dockerfile - uma Habilidade de Agente para novos serviços Node.js 24 TypeScript.
Busque em todas as páginas da documentação
Bootstrap Fastify/Nest com testes e Dockerfile - uma Habilidade de Agente para novos serviços Node.js 24 TypeScript.
Produz uma checklist de scaffold executável: layout de pasta, scripts package.json, endpoint de saúde, logging estruturado, desligamento gracioso, Dockerfile e stub de job do GitHub Actions alinhado com o CI da equipe.
| Entrada | Por quê |
|---|---|
| Nome do serviço | Nome do pacote, campo service de log, tag da imagem Docker |
| ADR do Framework | Fastify 5 vs NestJS 11 vs Express 5 |
| Porta padrão | 3000 ou convenção da plataforma |
| Dependências de dados | Postgres, Redis, nenhuma no primeiro dia |
| Caminho do monorepo | services/orders-api vs repositório raiz |
src/, test/, Dockerfilepackage.json: dev, build, start, typecheck, test/health e /ready (ready verifica o DB se configurado).env.example com stub de módulo de ambiente validado por Zod.github/workflows/pr-checks.yml usando os mesmos scripts"type": "module" a menos que o ADR exija CommonJS..env.example.console.log em caminhos de produção.SIGTERM fecha o servidor e o pool do DB.engines.node fixado em 24.18.0.Cartão de receita de referência rápida - pronto para copiar e colar.
# Após a saída da habilidade - sequência de verificação
cd services/billing-api
npm ci
npm run typecheck
npm test
npm run build
docker build -t billing-api:local .
docker run --rm -p 3000:3000 --env-file .env.example billing-api:local &
curl -sf http://localhost:3000/health
curl -sf http://localhost:3000/ready# Árvore esperada (Fastify 5)
billing-api/
├── src/
│ ├── app.ts # factory buildApp()
│ ├── server.ts # listen + shutdown
│ ├── env.ts # process.env do Zod parse
│ └── routes/
│ └── health.ts
├── test/
│ └── health.test.ts # node:test + inject
├── Dockerfile
├── package.json
├── tsconfig.json
└── .env.example// src/app.ts
import Fastify from "fastify";
import { healthRoutes } from "./routes/health.js";
export async function buildApp() {
const app = Fastify({
logger: { level: process.env.LOG_LEVEL ?? "info" },
});
await app.register(healthRoutes);
return app;
}// src/server.ts
import { buildApp } from "./app.js";
import { env } from "./env.js";
const app = await buildApp();
const close = async () => {
app.log.info({ event: "shutdown" });
await app.close();
process.exit(0);
};
process.on("SIGTERM", close);
process.on("SIGINT", close);
await app.listen({ port: env.PORT, host: "0.0.0.0" });# Dockerfile
FROM node:24.18.0-alpine AS build
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build
FROM node:24.18.0-alpine
WORKDIR /app
ENV NODE_ENV=production
COPY package*.json ./
RUN npm ci --omit=dev
COPY --from=build /app/dist ./dist
USER node
EXPOSE 3000
CMD ["node", "dist/server.js"]Quando o ADR selecionar NestJS 11:
@nestjs/cli com TS estritomain.ts com enableShutdownHooks()@nestjs/terminusinject por supertest contra INestApplicationVeja Conceitos Básicos do NestJS para profundidade legível.
Use a Habilidade de Scaffold de API para o serviço "inventory-api":
- Fastify 5, porta 3001
- Postgres via DATABASE_URL em .env.example
- Caminho do monorepo: services/inventory-api
- Incluir GitHub Actions: npm ci, typecheck, test, auditFastify para APIs pequenas ligadas a I/O. Nest quando a equipe precisa de DI, módulos e guards GraphQL desde o primeiro dia. Siga o ADR da organização - a habilidade não decide sozinha.
Apenas quando a entrada indicar que o ADR de ORM foi aceito. Caso contrário, crie um stub da interface UserRepository e adicione o ORM em um PR subsequente.
Versões de Stack: Esta página foi escrita para Node.js 24.18.0 (LTS Ativo), npm 10+, TypeScript 5.6+, Express 5, Fastify 5 e NestJS 11.
Revisado por Chris St. John·Última atualização: 16 de jul. de 2026