Workshop contruyendo una API Rest con Node.js + Koa.js
Tabla de Contenido
- Acerca de
- Introducción
- Explicación del caso de uso
- Ciclo de vida de las solicitudes HTTP en nuestra API
- Requisitos
- Episodios
- Stack
- Estructura del proyecto
Acerca de
Hola gente!! Si te fijas en el nombre del repositorio nodejs-learning-path-api-using-koa-workshop
. Mi idea es ir creando una serie de repositorios acompañados de documentación los cuales sirvan para aquellas personas que desean profundizar su conocimiento en Node.js y desean conocer algunas herramientas, prácticas, frameworks para convertirse un desarrollador backend pro. Próximamente estaré creando más contenido que aborde temas que hoy dia son necesarios en el campo laboral del mundo real.
Espero que encuentres este contenido útil y si lo aprecias te invito a darle una
Introducción
En este Workshop está dirigido a desarrolladores que quieren aprender o reforzar como construir una API Rest
usando Node.js y Koa.js.
Por si aun no conoces Koa.js, te cuento que se trata de un web framework es decir es una alternativa mas ligera a Express.js (incluso construido por el mismo team de Express).
Dividiremos este taller en 6 partes que llamaremos Episodios
, en cada uno agregaremos algún complemento que nos ayudará a entender cómo nuestra API irá evolucionando con el fin de añadirle funcionalidades técnicas que vas a necesitar en el mundo real.
Quieres saber el contenido de los episodios? ve a la sección Episodios
Explicación del caso de uso
Esta API de ejemplo es muy simple, expondrá algunos métodos para poder obtener (GET) un contacto que tenemos en una base de datos de MongoDB. También nos permitirá crear nuevos contactos (POST) o actualizar sus datos (PUT).
Ciclo de vida de las solicitudes HTTP en nuestra API
Cada vez que un usuario realiza una petición por ejemplo a http://localhost:3000/contacts ya sea que realiza un GET o un POST (con los parámetros adecuados), nuestra aplicación escucha a través de los enrutamientos (routes) que hemos definido y esto dispara todo el flujo de invocaciones necesarias para finalizar el procesamiento de cada solicitud. En la siguiente imagen se muestra como es el flujo de la petición que pasa entre los elementos más importantes de nuestro api.
Requisitos
Antes de empezar revisa que cumplas con los siguientes requisitos:
Súper importante
- Node.js puede ser la versión LTS o la actual
- Git
- Visual Studio Code
- Acceso a una base de datos MongoDB en caso de que no tengas una, este link te ayudará a crear una BD Docker
Recomendado
- Extensión de VS Code EditorConfig for VS Code
- Extensión de VS Code ESLint
- Extensión de VS Code Path Intellisense
- Extensión de VS Code Visual Studio IntelliCode
- Extensión de VS Code YAML
- Extensión de VS Code Prettier
- Extensión de VS Code npm Intellisense
- Extensión de VS Code gitignore
Episodios
Como se mencionó anteriormente la idea es implementar una API Rest para cubrir las necesidades de indicadas en el Caso de Uso. Pero la idea es ofrecer varios enfoques:
- Episodio 1: Creando un API rest con Node.js, Koa.js y MongoDB
- Episodio 2: Protegiendo el acceso del API
- Episodio 3: Validando los Requests
- Episodio 4: Manejo de Errores
- Episodio 5: Unit Tests + Integration Tests
- Episodio 6: Evaluando el Código usando SonaQube
Stack
- Koa - Web framework. Esta librería esta hecha por el equipo de express, y es más ligera que express.
- Mongoose - proporciona una solución directa basada en esquemas para modelar los datos de su aplicación con MongoDB
- EsLint - ESLint es una herramienta para identificar e informar sobre ruptura de estándares encontrados en el código ECMAScript / JavaScript.
- Prettier - Formateador de código, que nos ayuda a mantener limpio y alienado a los estándares.
- joi - Nos permite definir esquemas de validación, lo cual nos da la oportunidad de validar los parámetros que recibamos en las solicitudes http.
- winston - Un logger poderoso y popular en node.js
- yenv - Nos permite manejar variables de entorno desde un archivo YAML
- jest - Un framework muy popular para Testing
- @shopify/jest-koa-mocks. - Librería para mocks http para testing en koa
- supertest - Modulo que nos permite realizar pruebas de solicitudes http
- cross-env - Facilita establecer el valor de la variable de entorno NODE_ENV
Estructura del proyecto
nodejs-learning-path-api-using-koa-workshop
├─ .editorconfig
├─ .eslintrc.yml
├─ .gitignore
├─ .prettierrc.js
├─ LICENSE
├─ README.md
├─ jest.config.js
├─ package-lock.json
├─ package.json
├─ sonar-project.js
├─ src
│ ├─ app.js
│ ├─ controllers
│ │ ├─ auth.controller.js
│ │ └─ contacts.controller.js
│ ├─ middleware
│ │ ├─ auth.js
│ │ ├─ error-handler.js
│ │ └─ schema-validator.js
│ ├─ models
│ │ ├─ contact.model.js
│ │ └─ user.model.js
│ ├─ routes
│ │ ├─ auth.route.js
│ │ └─ contacts.route.js
│ ├─ routes.js
│ ├─ schemas
│ │ └─ contacts.schema.js
│ ├─ server.js
│ └─ utils
│ └─ logging
│ ├─ app-error.js
│ ├─ common-errors.js
│ ├─ error-factory.js
│ └─ log-manager.js
└─ tests
├─ integration
│ ├─ auth.spec.js
│ └─ contacts.spec.js
├─ mock-data
│ ├─ contact.json
│ ├─ contacts-invalid-cases.json
│ ├─ token.json
│ └─ user.json
└─ unit
├─ auth.controller.spec.js
├─ auth.middleware.spec.js
├─ contacts.controller.spec.js
└─ schema-validator.middleware.spec.js