Desplegando tu API de .NET Core gratis en Heroku
Tags: csharp, aspnetcore, netcore, programming
Published: 2021-04-01 07:47:09

Cuando queremos compartir, testear y/o analizar el comportamiento de nuestra APIs de .NET Core en un entorno de pruebas diferente a local, tenemos muchos proveedores en la nube con opciones gratuitas como [AWS](https://aws.amazon.com/es/free/?all-free-tier.sort-by=item.additionalFields.SortRank&all-free-tier.sort-order=asc), [Windows Azure](https://azure.microsoft.com/es-es/free/), pero en este artículo te enseñaré otra opción, mucho más fácil y rápida para realizar tu despliegue, [Heroku](https://www.heroku.com/). 

[Heroku](https://www.heroku.com/) es un PASS respaldado por Salesforce y permite a los desarrolladores desplegar sus aplicaciones de una forma fácil, gratuita (para aplicaciones de test o poco consumo), que permite el uso de diferentes lenguajes de programación y el despliegue se apoya internamente usando Github.

Para desplegar nuestra API en NET Core utilizaremos el siguiente repositorio el cual contiene una simple API desarollada en NET Core 3.1

{% github jhonmarmolejo/NetCoreApiVersionDemo %}


## Registrando tu API en Heroku

- Antes de empezar debemos registrarnos en Heroku

   https://signup.heroku.com/

- Una vez registrado, debemos crear una nueva APP desde el dashboard 

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/jecq8mda3huzp6bp8i6w.png)

- Ponemos el nombre a nuestra APP y seleccionamos la región en donde queremos desplegarla

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mswsojptefyb9hwa2vyx.png)


## Desplegando tu API 

- Clonamos el repositorio

```powershell
git clone https://github.com/jhonmarmolejo/NetCoreApiVersionDemo.git
```

- Nos situamos en el root de la solución, abrimos una consola de Powershell por ejemplo y ejecutamos el siguiente comando para restaurar todos los paquetes necesarios y ver que la solución compila correctamente

```powershell
dotnet build
```
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/p6yf4gn5pct3t0kjf5uk.JPG)

- Entramos al folder que contiene el proyecto de la API. En nuestro caso ejecutamos el siguiente comando

```powershell
cd MyApi
```

- Dentro de este folder, ejecutamos el siguiente comando

```powershell
heroku login
```
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/s824flbvokgbet12z7wi.JPG)

- Luego de ejecutar este comando, tal como dice el mensaje, pulsamos cualquier letra (menos la letra q) para autenticarnos en Heroku. En este momento se abrirá el navegador para que tu puedas loguearte en Heroku

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ajr3sut5ked0tq0oa1wo.JPG)

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/v54g0rtq5vawqpnszhhx.JPG)

- Damos click a "Log in" y ya estariamos logueados en Heroku para poder seguir el despliegue desde la consola

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/hij03nyzxdo8wtcfhdza.JPG)

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/nf5i8dc2qhinbznff8wd.png)

- Una vez logueado, ejecutamos el siguiente comando para añadir acceso remoto a heroku

```powershell
heroku git:remote -a adevintaapi
```
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5s3woovqm21vcckxdtru.JPG)


- **IMPORTANTE:** Añadimos el buildpack necesario para poder desplegar nuestra API de net Core en Heroku

```powershell
heroku buildpacks:set jincod/dotnetcore 
```

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2m9qwcz3np75z8h54jno.JPG)



- Subimos el repositorio a heroku con el siguiente comando

```powershell
git push heroku main
```

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/g2smpvr596izes1hp6sl.png)

**NOTA**: Actualmente Heroku da error ejecutando este comando ya que necesita que tengamos seteado el stack de heroku-16 o heroku-18.

Para solucionar esto ejecutamos el siguiente comando y establecemos por defecto el stack de heroku-18

```powershell
heroku stack:set heroku-18
```
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3z1mct3ly7brvvj5zc3i.JPG)

- Una vez solucionado esto, volvemos a ejecutar el comando

```powershell
git push heroku main
```
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4aaer3rz4ddpysfn6z96.JPG)

Y si has seguido correctamente todas las instrucciones ya tenemos desplegada nuestra API en Heroku en la siguiente URL

https://adevintaapi.herokuapp.com/

Y para verificar que está desplegada correctamente, llamamos al único endpoint disponible que tiene esta API de ejemplo

https://adevintaapi.herokuapp.com/api/demo

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xakynzb0u1j4md5ildy3.JPG)

Y como podemos ver, la api ya nos está devolviendo respuesta

## Desplegando nuevos cambios

Si queremos modificar nuestra API y desplegar los nuevos cambios es tan simple como subir los cambios a github

```powershell
git add .
git commit -m "New changes"
git push
```
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wdlln2y64l4w9jffqige.png)

Y una vez subido a github, ejecutar el comando para loguearnos en heroku 

```powershell
heroku login
```

Y luego lo subimos a heroku nuevamente ejecutando el siguiente comando

```powershell
git push heroku main
```

Una vez ejecutado, volvemos a llamar al único endpoint disponible de la API y vemos que la respuesta ha cambiado

https://adevintaapi.herokuapp.com/api/demo

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vn9ufg2rn5m45ghheobw.JPG)

Hasta la próxima!