CarlaSanchezCorrea / REG003-burger-queen-api

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Burger Queen - API con Node.js

Banner

Índice

1. Reto

Un pequeño restaurante de hamburguesas, que está creciendo, necesita un sistema a través del cual puedan tomar pedidos usando una tablet, y enviarlos a la cocina para que se preparen ordenada y eficientemente.

Este proyecto tiene dos áreas: interfaz web (cliente) y API (servidor). Nuestra clienta nos ha solicitado desarrollar la API que se debe integra con la interfaz, que otro equipo de desarrolladoras está trabajando simultáneamente.

2. Proyecto

Con una API en este caso nos referimos a un servidor web, nuestro servidor web debe manejar consultas entrantes y producir respuestas a esas consultas que serán enviadas de vuelta al cliente. Cuando hablamos de aplicaciones de servidor. donde el cliente es un programa que hace consultas a través de una red (por ejemplo el navegador, cURL, ...), y el servidor es el programa que recibe estas consultas y las responde.

Partimos de un boilerplate que ya contiene una serie de endpoints (puntos de conexión o URLs).

La clienta nos ha dado un link a la documentación que especifica el comportamiento esperado de la API que expondremos por HTTP. Ahí puedes encontrar todos los detalles de qué endpoints debe implementar la aplicación, qué parámetros esperan, qué deben responder, etc.

Las herramientas para desarrollar esta aplicación de servidor son:

  • Node.js
  • Express como framework
  • MongoDB como base datos
  • Contenedores de Docker.

Este proyecto es un servidor web que debe estar en JSON sobre HTTP, y también cuenta con un despliegue en la nube..

3. Requisitos

3.1 HTTP/JSON API

Especificación de endpoints

auth

users

products

orders

Según lo establecido por la documentación entregada por nuestra clienta, la API debe exponer los siguientes endpoints:

3.1.1 /

  • GET /

3.1.2 /auth

  • POST /auth

3.1.3 /users

  • GET /users
  • GET /users/:uid
  • POST /users
  • PUT /users/:uid
  • DELETE /users/:uid

3.1.4 /products

  • GET /products
  • GET /products/:productid
  • POST /products
  • PUT /products/:productid
  • DELETE /products/:productid

3.1.5 /orders

3.2 Test

Los tests deben cubrir un mínimo del 90% de statements, functions, lines y branches.

Otro requerimiento del equipo de QA de nuestra clienta es realizar pruebas end-to-end, que usaremos para verificar el comportamiento desde el punto de vista de HTTP, desde afuera del servidor.

  • GET /orders
  • GET /orders/:orderId
  • POST /orders
  • PUT /orders/:orderId
  • DELETE /orders/:orderId

4.1 Interfaz de linea de comandos

La clienta nos ha solicitado que la aplicación cuente un comando npm start que se debe encargar de ejecutar nuestra aplicación node y que además pueda recibir información de configuración, como el puerto en el que escuchar, a qué base datos conectarse, etc. Estos datos de configuración serán distintos entre diferentes entornos (desarrollo, producción, ...). El boilerplate ya implementa el código necesario para leer esta información de los argumentos de invocación y el entorno.

4.1.1 Argumentos de línea de comando

Podemos especificar el puerto en el que debe arrancar la aplicación pasando un argumento a la hora de invocar nuestro programa:

# Arranca la aplicación el puerto 8888 usando npm
npm start 8888

5. Variables de entorno

Nuestra aplicación usa las siguientes variables de entorno:

  • PORT: Valor por defecto 8080.
  • DB_URL: Conexión de MongoDB. Cuando ejecutemos la aplicación en nuestra computadora (en entorno de desarrollo), podemos usar el una base de datos local, pero en producción deberemos utilizar las instancias configuradas con docker-compose (mas sobre esto en la siguiente sección de Deployment)
  • JWT_SECRET: Implementamos la autenticación usando JWT (JSON Web Tokens). Para poder firmar (cifrar) y verificar (descifrar) los tokens, nuestra aplicación necesita un secreto. En local puedes usar el valor por defecto (xxxxxxxx), pero es muy importante que uses un secreto de verdad en producción.
  • ADMIN_EMAIL: Valor por defecto admin@localhost.
  • ADMIN_PASSWORD: Valor por defecto: changeme.

About


Languages

Language:JavaScript 99.7%Language:Shell 0.3%