fernandogutierrez27 / copper-consumption-api

API de Consumo de Cobre Mundial

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

CopperConsumption API

Build Status

El presente proyecto tiene por objetivo crear un microservicio que exponga un CRUD a modo de ejemplo.

Dicho microservicio expone datos desde una BD alimentada con datos obtenidos desde registros públicos, el registro en particular corresponden al reporte de Consumo mundial de cobre expuesto por el Ministerío de Minería de Chile en el año 2020, no obstante contiene información de entre 2007 y 2016.

Demo

Para ver la ejecución en vivo de la API, junto a su especificación, es posible acceder a la versión Demo hospedada en Azure.

Arquitectura de la solución

Entre los elementos a implementar en esta PoC tenemos:

  • Creación del servicio con tecnología C# (.NET 5)
  • Creación de Swagger o Open API 3.0
  • Manejo de Errores a través de filtro de excepciones
  • Uso de Docker
  • Despliegue automatizado en Azure
  • Pruebas Unitarias

La solución se divide en los siguientes componentes, los cuales detallamos a continuación:

API REST

Se desarrolla proyecto de API en .NET 5, considerando una arquitectura de n-capas, donde se buscar separar el acceso a la API propiamente tal (Api), la capa de negocio donde se realiza todo el procesamiento necesario (Application), otra capa con la definición de las entidades del dominio (Domain) y finalmente una capa de integración con dependencias externas (Infrastructure).

Dicha distribución se ajusta al principio de bajo acoplamiento y alta cohesión, facilitando la ejecución de test unitarios, por ejemplo. En este proyecto en particular se realizan test unitarios sobre la capa Application.

Otro aspecto importante de la API se refiere al manejo de excepciones, implementando filtros que posibilitan entregar siempre un mensaje significativo a los consumidores.

Finalmente, la API propiamente tal se documenta a través de la utilización de Swagger, generando la especificación de OpenApi 3.0 correspondiente.

Contenerización en Docker

La propia solución es contenerizada a través de Docker, procurando su despliegue a través de diferentes tecnologías de orquestación en caso de ser necesario.

Además, la imagen compilada se encuentra hospedada en nuestro repositorio de Docker Hub.

Integración y Entrega Continua

La solución ejecuta tareas automatizadas a través de un proceso de CI/CD. El flujo comienza cuando se realiza un push al código hospedado en GitHub, dicha acción desencadena la ejecución de un pipeline proporcionado por Azure Pipelines. Dentro de esta instancia se identifican 3 etapas principales:

  1. Testing: Se restauran las dependencias, el código es compilado y se ejecutan las pruebas unitarias.
  2. Build: Una vez aprobada la etapa anterior (validando la ejecución de las pruebas), se procede a compilar la imagen de docker y se realiza la publicación en Docker Hub.
  3. Deployment: Finalmente, se realiza el despliegue de la imagen recientemente publicada sobre una instancia de Azure App Service. La cual ya se encuentra configurada para conectarse a una BBDD de Azure SQL, administrada a través de modalidad PaaS.

Instalación

Generación de Database

Es posible generar manualmente la base de datos, ya sea para su utilización local o en la nube, ejecutando el script adjunto en data/database.sql

Ejecución desde docker

En caso de querer compilar el Dockerfile, se debe ejecutar el siguiente comando desde la carpeta src:

docker build -f Api\Dockerfile --force-rm -t <nombre_repositorio>/<nombre_imagen> .

Otra alternativa, es simplemente descargar la imagen desde el repositorio de Docker Hub.

docker push fgutierrezdocker/copper-consumption-api

Para generar el contenedor a partir de la imagen se debe ejecutar el siguiente comando:

docker run -it -e "SQL_SERVER=<direccion_sql_server>" -e "DB_NAME=<nombre_db>" -e "SQL_USER=<usuario_sql>" -e 'SQL_PASSWORD=<password_sql>' -p <puerto_contenedor>:80 fgutierrezdocker/copper-consumption-api

About

API de Consumo de Cobre Mundial

License:MIT License


Languages

Language:C# 85.4%Language:TSQL 12.9%Language:HTML 1.1%Language:Dockerfile 0.6%