Creando una API Rest lista para producción con Go
En este artículo vamos a realizar una API Rest con Golang preparada para ejecutar en producción y ambientada a los microservicios.
Todo el contenido mostrado en este artículo se encuentra disponible como plantilla de Github en el siguiente enlace:
Prerrequisitos:
Antes de comenzar, debes de tener instalado Golang en tu entorno de desarrollo, por lo que dejo aquí unos enlaces que explican como instalarlo:
- Windows 10: https://www.digitalocean.com/community/tutorials/how-to-install-go-and-set-up-a-local-programming-environment-on-windows-10-es
- Ubuntu 18.04 LTS: https://www.digitalocean.com/community/tutorials/como-instalar-go-en-ubuntu-18-04-es
- Mac OS: https://www.digitalocean.com/community/tutorials/how-to-install-go-and-set-up-a-local-programming-environment-on-macos-es
Frameworks y Librerías utilizadas:
- github.com/swaggo/gin-swagger
- github.com/gin-gonic/gin
- github.com/dgrijalva/jwt-go
- github.com/jinzhu/gorm
- github.com/spf13/viper
Cómo utilizar la plantilla:
Puedes crear un nuevo proyecto en Github si accedes al repositorio de la plantilla (https://github.com/antonioalfa22/go-rest-template) utilizas el botón “Use this template”:
Al usar el botón nos llevará a la página para crear un nuevo repositorio, donde nos deja elegir la opción de si queremos incluir todas las ramas o no.
El proyecto está formado siguiendo las buenas prácticas para la estructuración de proyectos en Golang especificadas en https://github.com/golang-standards/project-layout
- /cmd: En esta carpeta se encuentran los ficheros de entrada al proyecto (main.go) así como otros ficheros que dependen del tipo de ejecución (Por ejemplo database.db, config.yml, etc)
- /docs: En esta carpeta se guardan los ficheros de configuración de swagger para generar automáticamente la documentación de la API (disponible en http://localhost:3000/docs/index.html)
- /internal: Código propio de la aplicación, está dividido en dos carpetas: api y pkg:
- /internal/api: Aplicación principal, controladores, middlewares y router.
- /internal/pkg: Modelos, persistencia y database.
- /pkg: Módulos reutilizables en otras aplicaciones (Por ejemplo: crypto, handlers, etc)
- /test: Pruebas unitarias del proyecto
- Makefile: Facilita el uso de la aplicación, tiene el siguiente formato
- Dockerfile: