Api Gateway desarrollado en Laravel y MySQL .
Explorar el repo »
Reportar un Bug
·
Sugerencias
El proyecto busca desarrollar un Api Gateway sencillo de administrar que se consituya como único ingreso de los distintos endpoints que se pudieran definir, permitiendo homogeneizar sus url y brindando flexibilidad en los servicios backend.
Se encuentra desarrollado con Laravel y MySQL utilizando Docker como gestor de contenedores.
Posee incorporado la captura de errores y monitoreo de Sentry
El stack se compone de los siguientes elementos:
- Un servidor web Apache con PHP 8. Por defecto, se utiliza la imagen oficial de PHP: php:8-apache
- Se incorporó Laravel en su version 8.
- Monitoreo de Errores integrado con Sentry.
- La gestión de dependencias mediante composer se encuentra integrada al servidor web por lo que no es necesaria su instalación en el entorno local.
- Por último, se inicia un contendor de Base de Datos: MySQL 8.0
A continuación, se describe brevemente la utilización del proyecto.
Solo es necesario tener instalado el Docker y el Docker Compose
/mysql
Contiene el Dockerfile de MySQL y la carpeta de datos de la base de datos./web-server
Contiene el Dockerfile del servidor web. Si necesitas instalar una extensión del php o incorporar una librería, vas a tener que modificar el archivo de esta carpeta./web-server/config
Contiene los directorios de configuración de Apache y PHP. Los archivos de configuración de esta carpeta se copian al contenedor al momento de generarlos. Si se modifican, será necesario regenerar los contenedores./web-server/www/
Es la carpeta para los archivos Web. Es donde se encuentra la aplicación del Gateway.
En el directorio raíz, existe un archivo .env, el cual contiene los siguientes parámetros configurados.
COMPOSE_PROJECT_NAME
: Es el nombre del stack de contenedores que se generarán.
WEB_WERVER_NAME
: El nombre que le daremos al contenedor del servidor Web.PHP_PORT
: El puerto por medio del cual se accederá al contenedor web.PHP_VERSION
: versión de PHP que se va a utilizar. Por defecto, se utiliza la versión 8. Se pueden ver más versiones disponibles
DB_SERVER_NAME
: El nombre que tendrá el contenedor MySQL.MYSQL_VERSION
: Versión de MySQL que se va a instalar.MYSQL_DATABASE
: Nombre de la base de datos a generar en el contenedor.MYSQL_USER
: Usuario por defecto a generar durante la instalación del contenedor.MYSQL_PASSWORD
: La contraseña del usuario generado.DB_ROOT_PASSWORD
: La contraseña de root.DB_PORT
: Puerto en el cual se publicará la Base de Datos.
Una vez cambiado los parámetros deseados, se debe ejecutar el archivo build.sh
Una vez finalizado la generación del contenedor, se deberá configurar la aplicación del Gateway.
-
Copiar el archivo www/.env.example a un archivo /www/.env.
-
Configurar el .env. Tener en cuenta que si se cambiaron los nombre del contenedor MySQL se deberá modificar este archivo para apuntar al contenedor correcto.
-
Como nos encontramos dentro del stack de docker, en DB_HOST se puede ingresar el nombre del contenedor y el puerto real (no el publicado en la máquina host). Ej:
DB_CONNECTION=mysql
DB_HOST=db
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=user
DB_PASSWORD=1234
-
Incorporar la clave DSN de Sentry en el archivo .env a fin de activar la captura de errores.
Una vez instalado y levantado los contenedores, ingresar al contenedor y ejecutar los siguientes comandos:
composer install
: Descarga las dependencias de la carpeta vendor que no forman parte del repositorio.php artisan key:generate
: Genera la App Key en el .envphp artisan storage:link
: Genera el Link Simbólicophp artisan migrate
: Crea las Tablas Básicas del Sistemaphp artisan db:seed
: Inicializa los datos con los servicios propios del gateway y el usuario Administrador
Si estas montando este contenedor en el WSL, puede ocurrir que tengan problemas de permisos entre el usuario del WSL y el usuario de los contenedores. Si es necesario, se deben ejecutar los siguientes comandos desde el terminal de la máquina host (correrlo desde el directorio www):
- sudo chown [owner]:www-data storage -R
- sudo chmod 775 storage -R
- sudo chown www-data:www-data bootstrap/cache -R
El gateway recibirá las peticiones entrantes y las redirigirá al destino configurado Cada endpoint que se quiera consumir, deberá ser dado de alta, al igual que los clientes que podrán realizar las solicitudes. Cada cliente deberá tener una o varias Keys generadas, las cuales podrán ser asignadas a uno o más servicios.
Para la administración de la configuración, se deberá ingresar al contenedor y hacer uso de la consola de artisan. Los comandos disponibles se encuentran bajo el grupo gateway:
gateway:createService
=> Inicia el proceso de registrar un servicio. Se solicita el ingreso de los datos de manera interactiva.- Si el endpoint debe recibir parámetros por URL (Ej.
/servicio/{param1}/{param2}
), se deberá especificar de la siguiente manera:servicio/[:alpha:]
. La cadena [:alpha:] indica el inicio de la sección de parámetros. En este caso, dichos parámetros son reenviados al out_route de manera automática, por lo que no es necesario especificarlos. Se puede ver el servicio preconfigurado /dogs como ejemplo.
- Si el endpoint debe recibir parámetros por URL (Ej.
gateway:showServices
=> Lista los servicios registrados y que pueden ser consumidos.gateway:createClient {name}
=> Da de alta un cliente. Es obligatorio pasarle un nombre.gateway:showClients
=> Lista los clientes registrados en el api gateway.gateway:createApiKey
=> Genera una clave API para un cliente. Se listarán los clientes disponibles y se solicitará que se seleccione a quien asignar la key generada.gateway:showClientKeys {client_id?}
=> Muestra las Apis Keys asignadas a los clientes o al Id de cliente especificado (opcional).gateway:assignService
=> Inicia el proceso interactivo en el cual se seleccionará el servicio que se desea habilitar y se deberá ingresa el Id de la api key del cliente a quien relacionarlo. (Es el id mostrado en el comando showClientKeys)
Servicios básicos configurados
El gateway viene con servicios básicos que permiten registrar usuarios para las aplicaciones, generar Token JWT entre otros servicios.
A continuación, se listan los servicios básicos habilitados para el cliente Administrador
Distribuido bajo Licencia MIT. Para más información, ver el archivo LICENSE
Ricardo Urdinola - ricurdinola@gmail.com - Mis Repositorios
El conocimiento y las herramientas se contruyen sobre la base y el trabajo de la comunidad. Es por eso que agradecemos a los colaboradores que mantienen los siguientes recursos.