Workshop contruyendo una API Rest con Node.js + Koa.js

Overview

Workshop contruyendo una API Rest con Node.js + Koa.js

Tabla de Contenido

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 en github 😃

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.

Ciclo de vida de cada solicitud http

Requisitos

Antes de empezar revisa que cumplas con los siguientes requisitos:

Súper importante

Recomendado

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:

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

You might also like...

Workshop: Crafting Human Friendly CLIs with Node.js Core

$ Crafting Human Friendly CLIs with Node.js Core █ A workshop by Simon Plenderleith & Kevin Cunningham. Getting ready for the workshop 1. Required sof

Dec 26, 2022

La extensión web que muestra el precio de los juegos de la web de Xbox, PlayStation, Nintendo y Epic Games Store con los impuestos de Argentina incluidos. Conocé cuanto vas a pagar por tus juegos 💚💙❤️

La extensión web que muestra el precio de los juegos de la web de Xbox, PlayStation, Nintendo y Epic Games Store con los impuestos de Argentina incluidos. Conocé cuanto vas a pagar por tus juegos 💚💙❤️

Conocido anteriormente como Xboxito Impuestito - Conocé el precio real de los juegos Impuestito calcula y muestra el precio de los juegos de la web de

Dec 4, 2022

Questi sono i miei plugin del cazzo, scritti col culo, ma con tanto amore. 50 euro.

ReaperianiJS Questi sono i miei plugin del cazzo, scritti col culo, ma con tanto amore. 50 euro. Spiegone: Il fuorilavoce è un plugin di eq M/S (mid s

Feb 11, 2022

Codigo del Webinar de Organizador de Tareas con autenticación

Webinar Organizador de Tareas con autenticación Bienvenido al repositorio 📂️ del Webinar donde podrás encontrar el codigo expuesto 🤓️ Para comenzar

Jun 24, 2022

Breve explicacion de Mongoose, asi como un codigo con las operaciones CRUD

Breve explicacion de Mongoose, asi como un codigo con las operaciones CRUD

Introduccion a Mongoose ¿Qué es MongoDB? MongoDB es una base de datos NoSQL (Not Only SQL) y por ende no relacional que es utilizado para proyectos we

Mar 17, 2022

Un experimento personal con el portal del Centro de Documentación de la Imagen de Santander.

Un experimento personal con el portal del Centro de Documentación de la Imagen de Santander.

Retrosantander Un experimento personal con el portal del Centro de Documentación de la Imagen de Santander (CDIS) y sus contenidos. Por Jaime Gómez-Ob

Dec 11, 2022

Este repositorio contendrá el proyecto final de Angular con temática de Pokemon Unite

ProyectoFinal This project was generated with Angular CLI version 14.0.2. Development server Run ng serve for a dev server. Navigate to http://localho

Jun 19, 2022

📂 Listado de empresas con trabajos tecnológicos dentro de la Región de Murcia.

📂 Murcia Tech Hub Listado de empresas con trabajos tecnológicos dentro de la Región de Murcia. Si conoces alguna empresa más o puedes poner algún dat

Jun 30, 2022

Repositorio sobre arrays con información y ejemplos.

Arrays Repositorio sobre arrays con información y ejemplos. 1)Para poder utilizar el repositorio correctamente es necesario que se eliminen los coment

Sep 14, 2022
Owner
Jhony Rivero
Nodejs Developer ▪︎ AWS Certified Developer ▪︎ Focusing on Event Architectures ▪︎ Microservices ▪︎ Serverless ▪︎ Elasticsearch ▪︎ Lifelong Learning
Jhony Rivero
Una mejor mirada a tu perfil de GitHub. ¡Con gráficos!

GithubProfile Este proyecto esta realizado para que tu puedas apreciar de manera simple y sencilla los datos de tu perfil de github. Este proyecto con

Bryan Herrera ~ ርᚱ1ናተᛰ ᚻህᚥተპᚱ 5 Oct 31, 2022
Haciendo una aplicación del tiempo ☁️ con #Angular 13 🅰️

Angular Boilerplate Boilerplate para trabajar con Angular, este proyecto listo para trabajar las pruebas unitarias con Jestjs y eslint. Este proyecto

DOMINICODE 4 Apr 20, 2022
Run REST APIs in Node.js applications frameworks (Express, Koa, Hapi and Fastify) on top of any Serverless Cloud.

?? Serverless Adapter Install | Usage | Support | Architecture | Credits Run REST APIs and other web applications using your existing Node.js applicat

Vinicius Lourenço 45 Jan 1, 2023
Konbini Otaku, Web E-Commerce del proyecto Estación Otaku, desarrollada con Next.js y desplegada con Vercel

Konbini Otaku ?? ?? ⛩️ ?? - Reto Final (parte 2) Este proyecto constó de proponer "Konbini Otaku", la cual es una tienda virtual en la que podrás adqu

null 2 Apr 28, 2022
This is a vanilla Node.js rest API created to show that it is possible to create a rest API using only vanilla Node.js

This is a vanilla Node.js rest API created to show that it is possible to create a rest API using only vanilla Node.js. But in most cases, I would recommend you to use something like Express in a production project for productivity purposes.

Eduardo Dantas 7 Jul 19, 2022
REST API for a rudimentary blog - from Prisma Day 22 NestJS workshop

NestJS Workshop Prisma Day 22 - Let's build a REST API with NestJS and Prisma! Welcome to the code repository for the Prisma Day 2022 NestJS Workshop!

Tasin Ishmam 13 Jan 3, 2023
Differences between Node + Koa and Deno + Oak

Node + Koa VS Deno + Oak Differences between Node + Koa and Deno + Oak About This is a project that aims to observe the differences between a simple R

Ronald Guilherme P. dos Santos 3 Jun 28, 2022
An unofficial, simplified version of the @Shopify/koa-shopify-auth middleware library.

simple-koa-shopify-auth https://www.npmjs.com/package/simple-koa-shopify-auth NOTE: This package is not maintained by or affiliated with Shopify. Desc

David 20 Nov 7, 2022
Repositorio del video de YouTube sobre creación y generación de imágenes de docker con Node

Importante Tener instalado Docker Desktop!!! Comandos usados Login de Docker Hub docker login Generar la imagen, especificar el TAG (-t) y el punto s

Fernando 5 Oct 27, 2022
Portuguese version of the Cassandra driver javascript node.js workshop

Versão em Português do workshop Cassandra driver javascript node.js Olá e bem-vindo! Este é o repositório complementar para a apresentação prática dos

DataStax Developers 2 Mar 17, 2022