Es una API para centralizar y cachear las consultas a otras APIs de Mercado Libre.

Es una API para centralizar y cachar las consultas a otras APIs de Mercado Libre.

Requerimientos

NodeJS v8.X

MySQL v5.7

Redis v4.X

Docker

Instalacion

Instalar depencias con yarn install en el repositorio.

en el repositorio. Crear base de datos con node_modules/.bin/sequelize db:create

Ejecutar migraciones con node_modules/.bin/sequelize db:migrate

Descripcion

Breve descripcion de las cosas mas importantes.

La API es una aplicacione express que conecta dos APIs de mercado libre, la de items https://api.mercadolibre.com/items/:item_id y la de los hijos de los items https://api.mercadolibre.com/items/:item_id/children , luego con la informacion que estas APIs proveen se responde la infomacion unificada.

Para mejorar la performace se utilizan el patron Cache Aside, cachenado todos los pedidos que sean exitosos en la base de datos, evitando que pedidos sucesivos se vuelvan a ejecutar. Para ver la implementacion mirar app/services/item-finder.js .

Este servicio utiliza el patron Gateway para consultar y componer respuestas de multiples APIs, para ver su implementacion ver app/services/item-gateway.js .

Para medir la performance se la aplicacion se registran ciertas metricas que puden ser consultadas en /health . Para hacer mas eficiente el tracking de las metricas se utiliza el patron Pub/Sub (a travez de Redis) para enviar mensajes a un Worker que las procesa en un proceso independiente para no blocker el Event Loop the la aplicacion principal.

Suposiciones que se realizaron

El endpoint /health retorna el resultado para los ultimos 5 minutos agrupando los datos por minuto. Sin embargo en Redis se encuentra toda la informacion. Se puede configurar para retornar mas resultados.

Development

Ejecutar yarn start-development , esto levanta la aplicacion y el worker.

Tests

Se utilizo mocha con las assertions de chai para testear.

Se agregaron algunos tests muy basicos (por falta de tiempo) para verificar ciertas cosas.

Crear base de datos con NODE_ENV=test node_modules/.bin/sequelize db:create

Ejecutar migraciones con NODE_ENV=test node_modules/.bin/sequelize db:migrate

Para ejecutar los tests correr yarn test

Produccion (entre comillas)

Para levantr todo en "produccion" se utliza docker-compose. Se creo el ejecutable bin/run que levanta toda la infraestructura necesaria, crea la base de datos y corre migraciones. Todo se hace en detched mode, por lo que no se ve el output en consola.

Ademas utilzando pm2 se levantan tantas instancias de la web como cores tengas la maquina, permitiendo responder los requests mas eficientemente.

Forma detached

Ejecutar bin/run

Para bajar los services ejecutar docker-compose stop

Forma standard

docker-compose up

docker-compose exec web node_modules/.bin/sequelize db:create

docker-compose exec web node_modules/.bin/sequelize db:migrate

Cosas a mejorar

Comentarios

Entradas populares de este blog

Unnofficial Python wrapper for the unite-db.com REST API.

bybit-api