Contenido del curso

Dominios en detalle de la certificación JSNAD

Dominio Server and Services en JSNSD con Fastify

Resumen

El dominio Server and Services representa el 70% de la prueba JSNSD, así que aquí se decide tu certificación. Si dominas un framework web de Node como Fastify y su ecosistema de plugins, vas a resolver los cuatro ejercicios (task 2.1 al 2.4) con menos fricción y mucho más rápido.

¿Qué evalúa el dominio Server and Services en JSNSD?

Este dominio mide tu capacidad para construir aplicativos web con Node.js, APIs REST y servicios HTTP que respondan a requisitos específicos de rutas, métodos y códigos de estado.

  • Cuatro ejercicios prácticos con código extenso.
  • Validación de query parameters, headers y body.
  • Manejo correcto de status codes HTTP.
  • Configuración de environment variables y scripts en package.json.

¿Cuánto pesa Server and Services en el examen JSNSD? Pesa el 70% de la nota final, distribuido en cuatro tareas. Fallar una sola condición de un ejercicio puede costarte el examen completo.

¿Por qué conviene usar un framework como Fastify?

Un framework maduro te ahorra código repetitivo y resuelve casos límite por defecto. Por ejemplo, Fastify devuelve 404 automáticamente cuando una ruta no existe, así que no tienes que escribir esa lógica.

La única documentación oficial permitida durante el examen es la del framework que elijas. Por eso necesitas conocerlo a fondo, junto con los módulos de NPM compatibles que pueden resolverte un requisito con una sola línea.

¿Cómo se monta un servidor base con Fastify?

El punto de partida siempre es el mismo: importar Fastify, activar el logger y poner el servidor a escuchar en el puerto definido por la variable de entorno.

js const fastify = require('fastify')({ logger: true })

fastify.listen({ port: process.env.PORT || 3000 })

El fallback al puerto 3000 te protege si la variable de entorno no llega, pero la prioridad siempre es process.env.PORT. Si ignoras esta regla, la calificación del ejercicio será cero.

¿Cómo construir un endpoint GET con validaciones múltiples?

El ejercicio de ejemplo pide un único endpoint /users que responda a GET, lea un query parameter llamado username y devuelva distintos códigos según el escenario.

La estrategia es leer el README línea por línea y traducir cada instrucción en una validación dentro del handler.

  • 400 si falta username.
  • 406 si llegan parámetros extra en la query.
  • 500 si la función searchUser retorna null.
  • 200 con un JSON estructurado si todo es válido.

¿Cómo se leen y validan los query parameters en Fastify?

En Fastify accedes a los query parameters a través de request.query, que es un objeto plano. Desde ahí puedes desestructurar y validar.

js fastify.get('/users', (request, reply) => { const { username } = request.query

if (!username) return reply.code(400).send()

if (Object.keys(request.query).length > 1) { return reply.code(406).send() }

const user = searchUser(username) if (!user) return reply.code(500).send()

reply.send({ username, result: user }) })

Fíjate en el orden: primero lo más restrictivo (ausencia del parámetro), luego parámetros extra, después la búsqueda. Si inviertes el orden, puedes responder con un código incorrecto.

¿Qué status code devuelvo si llegan parámetros extra en la URL? El código 406 Not Acceptable. Lo detectas comparando Object.keys(request.query).length contra el número de parámetros esperados.

¿Cómo se estructura la respuesta JSON exitosa?

El README pide un objeto con dos propiedades: username (el valor recibido) y result (el objeto que retorna searchUser). La notación abreviada de JavaScript te ayuda a escribir { username, result: user } sin repetir nombres.

El 200 es el código por defecto en Fastify, así que no necesitas declararlo explícitamente al usar reply.send().

¿Cómo configurar package.json para que npm start funcione?

El examen exige que npm start levante el servicio respetando la variable de entorno PORT. Esta configuración va en la sección scripts del package.json.

{ "scripts": { "start": "node src/index.js" } }

Para verificar que la variable de entorno funciona, ejecuta PORT=4000 npm start y confirma en el log que aparece server listening on 4000. Si solo escucha en 3000 ignorando la variable, el ejercicio se califica con cero.

¿Cómo se prueba el endpoint paso a paso?

Como es un GET, no necesitas Postman ni Insomnia. El navegador es suficiente para recorrer todos los escenarios.

  • localhost:3000/algo debe devolver 404 (lo hace Fastify solo).
  • localhost:3000/users sin query devuelve 400.
  • localhost:3000/users?username=node devuelve 500 si el usuario no existe.
  • localhost:3000/users?username=admin devuelve 200 con el JSON.
  • localhost:3000/users?username=admin&extra=1 devuelve 406.

Un detalle a vigilar: cuando uses asistentes como Copilot, revisa que la variable que pasas a searchUser sea realmente username y no un nombre inventado por el autocompletado. Ese tipo de error silencioso te puede costar puntos completos.

¿Qué habilidades clave debes dominar para este dominio?

Más allá del código, hay competencias transversales que marcan la diferencia en el examen.

  • Lectura técnica: traducir cada línea del README en una verificación concreta.
  • Dominio del framework elegido: rutas, reply API, manejo de errores y respuestas por defecto.
  • Conocimiento de status codes HTTP: 400, 404, 406, 500 y cuándo aplica cada uno.
  • Manejo de variables de entorno: leer process.env y configurar scripts en package.json.
  • Testing manual sistemático: probar cada condición antes de dar por cerrado el ejercicio.

Los cuatro ejercicios del dominio se resuelven con la misma metodología: instrucción, implementación, prueba. Cuéntame en los comentarios qué framework vas a usar tú para presentar el JSNSD.