Como subir una API desarrollada con el lenguaje GO a Heroku
Tags: go, heroku, api, spanish
Published: 2020-03-23 16:15:33

Cuando se está en el proceso de desarrollo de una API, se realizan pruebas internas para verificar el funcionamiento de los distintos componentes de la misma. Luego que la fase de pruebas haya concluido se debe subir a un servidor, desde donde los usuarios para la cual fue desarrollada puedan consumir sus servicios. Existen muchas empresas las cuales ofrecen alojar la API, pero cada una ofrece diferentes paquetes de funcionabilidades, dependiendo de los requerimientos se decidirá cual empresa se adapta mejor. En este tutorial se indicaran los pasos necesarios para subir la API a Heroku. 

La API constara de una única función, debido a que el objetivo de este tutorial  es indicar  como debe configurarse un proyecto localmente para que esté en condiciones de ser aceptado por el servicio heroku.

Para el proyecto se utilizó el lenguaje [GO](https://golang.org/)  versión: **_go1.13.7_**

![version-go](https://dev-to-uploads.s3.amazonaws.com/i/xeuo72nfvamg60nqqyll.png)

{% gist https://gist.github.com/gonzalezlrjesus/71617aacb01bf5b7293d45b4a2c12d07 %}

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

La función **_ListenAndServe_** inicia un servidor HTTP con la dirección **_:8000_** cuando se trabaja localmente se utiliza el puerto 8000, pero cuando ya se encuentre alojada en el servicio el puerto lo decidirá Heroku por ende tiene esa validación, un único endpoint de acceso **_/hello_** por el cual se pueden hacer peticiones el cual devolverá el mensaje: **_“Hello, World!”_**.

A pesar de que el proyecto no posee ninguna dependencia como: [Gorilla](https://www.gorillatoolkit.org/), [bcrypt](https://pkg.go.dev/golang.org/x/crypto/bcrypt?tab=doc) , entre otras. Lo normal es que los servicios web  tengan dependencias para propósitos específicos. Para su manejo es necesario instalar una herramienta que las administrara, algunas de ellas son [Godep](https://github.com/tools/godep), [Dep](https://github.com/golang/dep) y  [Go Modules](https://blog.golang.org/using-go-modules).

El manejador seleccionado a utilizar es **_Godep_**. Para su instalación se debe cumplir los siguientes pasos:

Dentro de la carpeta del proyecto se deberá abrir la consola y ejecutar el siguiente comando:
 **_go get -u github.com/tools/godep_**

El cual lo descargara e instalara, para validar su instalación se ejecuta: **_godep version_**
Debería mostrar la versión que se instaló.

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/3nm7xvdlw4en91vcdjt9.png)

De lo contrario mostrara un error como el siguiente: 
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/03qcgt2tcrpgh1cosh7d.png)

Para corregir ese error se necesita agregar la dirección de la carpeta donde se almacenan los archive BIN a la variable PATH de Windows.

Ahora se ejecutara Godep que organizara las dependencias.
**_godep save ./..._**

De no mostrar ningún mensaje de error, se generaran dos carpetas: Godeps y Vendor, la API no cuenta con dependencias por lo cual no se generara la carpeta Vendor. En el caso de la carpeta Godeps se creara un archivo JSON automáticamente donde se almacenara la lista de las dependencias que se utilizan en la aplicación.

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

Las nuevas carpetas deben ser almacenadas en un repositorio [GIT](https://git-scm.com/downloads). Se iniciara con el comando : **_git init_**

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/3wesnsxf2aq25gdwpnu2.png)

Se debe hacer commit a los cambios, primero el comando **_git add_** . , luego  **_git commit –m “Agregando dependencias”_**

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

Lo siguiente es crearse una cuenta en heroku a través de este link: [Registrarse](https://signup.heroku.com/)

Y luego descargar e instalar el CLI con el cual se podrá subir el código a la recién creada cuenta de Heroku: [Descargar CLI](https://devcenter.heroku.com/articles/heroku-cli#download-and-install).
Para verificar que la instalación del CLI fue exitosa se ingresa el comando: **_heroku –versión_** se deberá mostrar la versión de heroku instalada en la computadora.

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/8jheu5jgm6lqgn27jtbu.png)

Para continuar con el proceso se debe iniciar sesión sincronizando el proyecto con la cuenta. La sincronización se hace con el comando  **_heroku login_**  el cual abrirá una ventana en un navegador para que se inicie sesión  en la cuenta de heroku.

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

Si desea conocer si la autenticación fue exitosa se ejecuta el comando 
**_heroku auth:token_** le deberá mostrar el token asignado.

Para este siguiente paso se debe crear una aplicación en Heroku la cual será la que recibirá el código y se generara automáticamente un repositorio GIT específico para la nueva aplicación en heroku. **_heroku create [nombre-app]_**

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

Se puede observar la recién creada aplicación en el panel de la cuenta de heroku. 

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

Y el nuevo repositorio GIT con **_git remote –v_**

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

Ahora para finalizar se debe  enviar el código a la aplicación en heroku: 
**_git push heroku master_**

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


Si todo fue enviado correctamente a partir desde este momento  los usuarios pueden hacer uso de la API.

Nota: Ese mismo comando se debe ejecutar cada vez que se  realice un cambio en el código localmente y se desee enviar a la aplicación en heroku.

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/1b40ohut9jnhajo0or3a.png)

Si desea conocer cuántas versiones tiene la aplicación en heroku, se puede observar con **_heroku releases_** y para conocer con más detalle a una específica versión se utiliza **_heroku releases:info [versión-release]_**

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/3sta89nrtf4z3ev7arqy.png)

Heroku implementa una medida de protección de sus servicios, limita la cantidad de envíos de código a la aplicación que se encuentra en sus servicios de un número de 75 peticiones por usuario, por aplicación y por hora. Si desea conocer más acerca de una implementación de la medida en el lenguaje GO lo puede leer aquí:
[Como limitar las peticiones a una api](https://dev.to/gonzalezlrjesus/como-limitar-las-peticiones-a-una-api-750).

Si usted tiene alguna pregunta, sugerencia o corrección, ¡estaría encantado conocerla!