Creando una API Rest lista para producción con Go

Antonio Payá González
2 min readSep 25, 2020

--

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:

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
Makefile go-rest-template
  • Dockerfile:

--

--