rest-api-node.md 3.2 KB


name: rest-api-node category: api public: false database: optional hosting_hints:

  • vps
  • docker
  • k8s
  • render
  • railway
  • fly audit_stack:
  • analyze
  • code-clean
  • cso
  • perf
  • doc plugins: context7: yes ui-ux-pro-max: no gstack: no ---

REST API (Node.js)

API backend Node.js pure (Express / Fastify / Koa / Hapi / NestJS), sans frontend inclus.

Detection signals

Strong signals (×3)

  • DEP: package.json contient l'un de : "express", "fastify", "koa", "@hapi/hapi", "@nestjs/core"
  • FILE: src/app.ts OR src/server.ts OR src/main.ts AVEC STRING "listen(" OR "createServer"

Medium signals (×2)

  • FILE: src/routes/ OR src/controllers/ OR src/handlers/
  • DEP: ORM — prisma, typeorm, sequelize, drizzle-orm, mongoose, knex
  • DEP: Validation — zod, joi, yup, class-validator

Weak signals (×1)

  • DEP: jsonwebtoken, passport, bcrypt, argon2
  • DEP: pino, winston, morgan (logging)
  • FILE: Dockerfile
  • DIR: tests/ OR src/__tests__/

Counter-signals (exclusion)

  • DEP: react, next, astro, vue → frontend présent, c'est un fullstack (archetype à créer plus tard) ou SPA+API séparé (monorepo)
  • DEP: react-native → mobile

Implications

  • Hébergement : VPS, Docker (Render, Railway, Fly.io), K8s, AWS ECS/Lambda
  • Base de données : FORTEMENT PROBABLE — la plupart des API backend ont une DB
  • SEO/GEO : N/A (API non indexée)
  • Surface sécurité : GRANDE — point d'entrée principal pour attaques (injections, auth, rate limit)
  • UI/UX : N/A

Typical pain points

  • Pas de versioning API (/api/v1/) — flag CLAUDE.md : "Web APIs always versioned"
  • Validation input absente (pas de Zod/Joi/class-validator)
  • SQL injections (string concat dans queries brutes)
  • Auth faible (pas de hash password, ou MD5/SHA1)
  • JWT secret en dur / faible / court
  • CORS * en production
  • Pas de rate limiting (express-rate-limit, @fastify/rate-limit)
  • Pas de helmet / CSP
  • Secrets dans le repo (.env committé)
  • Logs qui fuient PII / tokens
  • Pas de health check (/healthz) pour load balancer
  • Pas d'observability (Sentry / OTel)
  • Pas de tests (intégration absente)
  • Deps obsolètes (npm audit non exécuté)

Interview questions (adaptive)

En plus du set minimum business :

  • Framework : Express / Fastify / NestJS / Koa / Hapi ?
  • Base de données : PostgreSQL / MySQL / MongoDB / SQLite / autre / aucune ?
  • ORM : Prisma / Drizzle / TypeORM / Sequelize / Mongoose / raw SQL ?
  • Auth : JWT / OAuth / session / API key / aucun ?
  • Consommateurs : frontend propre / mobile / tierce partie / interne ?
  • Rate limiting en place ? (oui + comment / non)
  • Observability : Sentry / OpenTelemetry / logs seulement / aucun ?
  • Tests : unitaires + intégration ? couverture cible ?
  • Déploiement : VPS / Docker / Lambda / autre ?
  • Documentation API : OpenAPI/Swagger / Postman / aucune ?

Plugin recommendations

  • context7 : ON — Prisma/Drizzle/Fastify évoluent vite
  • ui-ux-pro-max : OFF
  • gstack : OFF (API non navigable)

Example project layout

src/
  app.ts
  server.ts
  routes/
    v1/
      users.ts
      orders.ts
  controllers/
  services/
  middlewares/
  schemas/   (Zod / Joi)
tests/
Dockerfile