Repositorio Open Source de documentación en nuevas tecnologías
En el siguiente link encontrará el repositorio creado para este ejemplo práctico: https://github.com/tfg2021-escinf-una/covid-info/ . En caso de tener alguna duda con el código, puede revisar directamente en el repositorio, o bien, clonarlo y modificarlo.
Abrir el repositorio microservices-tutorial/covid-info-microservice
en el editor de texto
En este momento la lista de archivos en el proyecto es la siguiente:
microservices-tutorial
│
└─── covid-info-microservice
│ │ README.md
│ │ .gitignore
│ │ LICENSE
Para inicializar el proyecto de Go es necesario crear un módulo para manejar las dependencias
go mod init covid-info
En este archivo se pueden ver todas las dependencias que se instalan para el proyecto. Un ejemplo del archivo go.mod es el siguiente: go.mod
Cree el archivo main.go y copie el contenido del siguiente link: main.go.
import (
docs "covid-info/docs"
"encoding/json"
"io/ioutil"
"net/http"
"os"
"fmt"
"github.com/gin-gonic/gin"
"github.com/swaggo/files"
"github.com/swaggo/gin-swagger"
)
os
permite la utilización de features del Sistema Operativo.net/http
se utiliza para hacer llamados HTTP.io/ioutil
permite el manejo de operaciones de Entrada y Salida.fmt
permite el manejo de operaciones de Entrada y Salida.github.com/gin-gonic/gin
Framework para la creación de APIs.github.com/swaggo/gin-swagger
Facilita la creación de documentación para los endpoints del API.var API_HOST string
var API_KEY string
var API_URL string
func main() {
router := gin.Default()
router.Use(CORS)
docs.SwaggerInfo.BasePath = "/api/v1"
v1 := router.Group("/api/v1")
API_HOST = os.Getenv("API_HOST")
API_KEY = os.Getenv("API_KEY")
router.GET("/vaccines", getVaccines)
router.GET("/worldData", getWorldData)
router.GET("/news", getCovidNews)
router.GET("/liveness", liveness)
router.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler))
router.Run("0.0.0.0:8080")
}
func getVaccines(c *gin.Context) {
url := fmt.Sprintf("%s/vaccines/get-all-vaccines", API_URL)
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-RapidAPI-Host", API_HOST)
req.Header.Add("X-RapidAPI-Key", API_KEY)
res, err := http.DefaultClient.Do(req)
errorValidation(err, c)
defer res.Body.Close()
body, _ := ioutil.ReadAll(res.Body)
var data any
json.Unmarshal(body, &data)
c.IndentedJSON(http.StatusOK, data)
}
func getWorldData(c *gin.Context) {
...
}
func getCovidNews(c *gin.Context) {
...
}
go get .
Declarar las variables de entorno API_HOST y API_KEY con la información obtenida de RapidAPI.
go run .
Una vez realizados todos estos pasos, el servidor está listo para recibir peticiones HTTP en el puerto 8080.