En está sección se especificarán los lineamientos y el proceso para definir las varialbes de entorno en un API CRUD beego.
Repositorio: test_api_crud
- Generar API Beego
- Refactorizar API Beego (Contol de Errores)
- Versionar BD en API Beego (Beego Migrations)
Existen 8 variables de entorno con que toda API CRUD desarrollada en la OAS debe contar. Dos pertenecen al dominio del comportamiento del api y las 6 restantes consolidan la cadena de conexión con la base de datos.
Las variables de entorno esta definidas en mayuscula.
Se debe establecer inicialmente el nombre que contenga el repositorio o API, separado por un guión bajo _
seguido del nombre del parametro.
NOMBRE_API_PARAMETRO
Los parámetros que normalmente ingresan en un API CRUD desarrollada en la OAS son las siguientes:
# parametros de api
_HTTP_PORT=[Puerto de exposición del API]
_RUN_MODE=[Modo de ejecución del API]
# paramametros de bd
_PGUSER=[Usuario de BD]
_PGPASS=[Contraseña del usaurio de BD]
_PGHOST=[URL, Dominio o EndPoint de la BD]
_PGPORT=[Puerto de la BD]
_PGDB=[Nombre de Base de Datos]
_PGSCHEMA=[Nombre del Esquema de Base de Datos]
El archivo conf/app.conf
de un API CRUD por defecto debe contener la siguiente estructura:
appname = test_api_crud
httpport = 8080
runmode = dev
autorender = false
copyrequestbody = true
EnableDocs = true
sqlconn = postgres://postgres:1234@127.0.0.1/bd_oas?sslmode=disable&search_path=public
Las variables de entorno “definidas en MAYÚSCULAS” alimentarán la definición de las variables del api “definidas en minúscula”.
appname = test_api_crud
httpport = ${TEST_API_CRUD_HTTP_PORT}
runmode = ${TEST_API_CRUD_RUN_MODE}
autorender = false
copyrequestbody = true
EnableDocs = true
# sqlconn = postgres://postgres:1234@127.0.0.1/bd_oas?sslmode=disable&search_path=public
# cadena de conexion fragmentado
PGuser = ${TEST_API_CRUD_PGUSER}
PGpass = ${TEST_API_CRUD_PGPASS}
PGhost = ${TEST_API_CRUD_PGHOST}
PGport = ${TEST_API_CRUD_PGPORT}
PGdb = ${TEST_API_CRUD_PGDB}
PGschema = ${TEST_API_CRUD_PGSCHEMA}
Aquí podemos evidenciar como en las primeras dos variables de entorno se definen para el puerto del api y el modo de ejecución.
Para el segmento de la cadena de conexión se han definido 6 variables del api “las que inicia con PG” que serán alimentadas por el paso de variables de entorno.
Ahora se reemplaza el llamado de la variable sqlconn
por las variables fragmentadas que concatenadas establecerán la cadena de conexión.
- Código Original:
package main
import (
_ "github.com/udistrital/test_api_crud/routers"
"github.com/astaxie/beego"
"github.com/astaxie/beego/orm"
"github.com/astaxie/beego/plugins/cors"
_ "github.com/lib/pq"
"github.com/udistrital/utils_oas/customerrorv2"
)
func main() {
orm.RegisterDataBase("default", "postgres", beego.AppConfig.String("sqlconn"))
if beego.BConfig.RunMode == "dev" {
beego.BConfig.WebConfig.DirectoryIndex = true
beego.BConfig.WebConfig.StaticDir["/swagger"] = "swagger"
}
beego.InsertFilter("*", beego.BeforeRouter, cors.Allow(&cors.Options{
AllowOrigins: []string{"*"},
AllowMethods: []string{"PUT", "PATCH", "GET", "POST", "OPTIONS", "DELETE"},
AllowHeaders: []string{"Origin", "x-requested-with",
"content-type",
"accept",
"origin",
"authorization",
"x-csrftoken"},
ExposeHeaders: []string{"Content-Length"},
AllowCredentials: true,
}))
beego.ErrorController(&customerrorv2.CustomErrorController{})
beego.Run()
}
- Linea a reemplazar:
orm.RegisterDataBase("default", "postgres", beego.AppConfig.String("sqlconn"))
- Nuevo llamado de parametros para cadena de conexion
orm.RegisterDataBase("default", "postgres", "postgres://"+
beego.AppConfig.String("PGuser")+":"+
beego.AppConfig.String("PGpass")+"@"+
beego.AppConfig.String("PGhost")+":"+
beego.AppConfig.String("PGport")+"/"+
beego.AppConfig.String("PGdb")+"?sslmode=disable&search_path="+
beego.AppConfig.String("PGschema")+"")
- Código incorporando configuración:
package main
import (
_ "github.com/udistrital/test_api_crud/routers"
"github.com/astaxie/beego"
"github.com/astaxie/beego/orm"
"github.com/astaxie/beego/plugins/cors"
_ "github.com/lib/pq"
"github.com/udistrital/utils_oas/customerrorv2"
)
func main() {
orm.RegisterDataBase("default", "postgres", "postgres://"+
beego.AppConfig.String("PGuser")+":"+
beego.AppConfig.String("PGpass")+"@"+
beego.AppConfig.String("PGhost")+":"+
beego.AppConfig.String("PGport")+"/"+
beego.AppConfig.String("PGdb")+"?sslmode=disable&search_path="+
beego.AppConfig.String("PGschema")+"")
if beego.BConfig.RunMode == "dev" {
beego.BConfig.WebConfig.DirectoryIndex = true
beego.BConfig.WebConfig.StaticDir["/swagger"] = "swagger"
}
beego.InsertFilter("*", beego.BeforeRouter, cors.Allow(&cors.Options{
AllowOrigins: []string{"*"},
AllowMethods: []string{"PUT", "PATCH", "GET", "POST", "OPTIONS", "DELETE"},
AllowHeaders: []string{"Origin", "x-requested-with",
"content-type",
"accept",
"origin",
"authorization",
"x-csrftoken"},
ExposeHeaders: []string{"Content-Length"},
AllowCredentials: true,
}))
beego.ErrorController(&customerrorv2.CustomErrorController{})
beego.Run()
}
Para utilizar las variables de entorno previamente debemos asignarle su valor correspondiente.
En una terminal del sistema operativo GNU/linux se defien los valores correspondientes a las variables de entorno.
Definición de valores
export TEST_API_CRUD_HTTP_PORT=8080
export TEST_API_CRUD_RUN_MODE=dev
export TEST_API_CRUD_PGUSER=postgres
export TEST_API_CRUD_PGPASS=1234
export TEST_API_CRUD_PGHOST=127.0.0.1
export TEST_API_CRUD_PGPORT=5432
export TEST_API_CRUD_PGDB=bd_oas
export TEST_API_CRUD_PGSCHEMA=public
Validar la asignación
env | grep TEST_API_CRUD_
Se obtiene lo siguiente
TEST_API_CRUD_HTTP_PORT=8080
TEST_API_CRUD_RUN_MODE=dev
TEST_API_CRUD_PGUSER=postgres
TEST_API_CRUD_PGPASS=1234
TEST_API_CRUD_PGHOST=127.0.0.1
TEST_API_CRUD_PGPORT=5432
TEST_API_CRUD_PGDB=bd_oas
TEST_API_CRUD_PGSCHEMA=public
Si deseas eliminar las variables de entorno
unset TEST_API_CRUD_HTTP_PORT
unset TEST_API_CRUD_RUN_MODE
unset TEST_API_CRUD_PGUSER
unset TEST_API_CRUD_PGPASS
unset TEST_API_CRUD_PGHOST
unset TEST_API_CRUD_PGPORT
unset TEST_API_CRUD_PGDB
unset TEST_API_CRUD_PGSCHEMA
Ejecutar APIS
bee run
Podemos definir uno a uno los valores de cada variable de entorno en el llamado al bee run
TEST_API_CRUD_HTTP_PORT=8080 TEST_API_CRUD_RUN_MODE=dev TEST_API_CRUD_PGUSER=postgres TEST_API_CRUD_PGPASS=1234 TEST_API_CRUD_PGHOST=127.0.0.1 TEST_API_CRUD_PGPORT=5432 TEST_API_CRUD_PGDB=bd_oas TEST_API_CRUD_PGSCHEMA=public bee run