Memory
Memory se usa para poder leer y escribir valores de cualquier tipo en una directiva y tener acceso a ellos desde cualquier otra directiva.
Un par de ejemplos para entenderlo:
- La directiva
LoadAndValidateModel, valida un body que entra a un endpoint y lo carga en memory. Luego, desde otra directiva, podrás acceder al objeto recibido usando memory. - Imagina que tienes dos directivas: una para conseguir datos de un usuario accediendo a otro servicio, y otra para almacenar todos los datos, incluyendo los recibidos en la primera directiva. En la primera directiva escribirás los datos en memory, y en la segunda los leerás.
Uso desde api.yaml con alias
Las directivas pueden leer de memory a través de alias:
key: poems
endpoints:
post /user:
LoadUser:
directive: LoadAndValidateModel
source: $.message.bodyAsArray
target: user
SaveUser:
directive: SaveUser
user: $.memory.user
En el caso anterior, LoadUser escribe internamente en memory, en la key user (un array con los datos de un usuario). Este dato luego se pasa a la directiva SaveUser a través del alias: $.memory.user.
Lectura y escritura en PHP
Puedes escribir a memory usando el estado, desde dentro de una directiva:
$state->memory()->set('day', 'monday');
Y luego leer, desde dentro de otra directiva:
$state->memory()->get('day'); // devolvería 'monday'
O acceder a esa misma variable usando un alias en tu yaml:
key: poems
endpoints:
post /day:
CalculateDay:
directive: CalculateDay
SaveDay:
directive: SaveDay
user: $.memory.day
El método set admite cualquier tipo de dato: string, integer, array, etc.
Variables globales del sistema
Memory también se usa de forma predeterminada para acceder a las siguientes variables globales dentro de Hefesto:
$state->memory()->get('hefesto-localhost')→ un string con el valor del host local de Hefesto, que incluye organización y entorno. Si quieres hacer llamadas a otra API en el mismo virtual-host, deberías usar esta constante.$state->memory()->get('hefesto-pathcode')→ un string con el path absoluto a la API desplegada. Si quieres acceder a algún fichero desplegado en tu API, deberías usar esta constante.$state->memory()->get('hefesto-pathstorage')→ un string con el path al espacio en disco para esa API. Si quieres almacenar ficheros en tiempo de ejecución y acceder luego a ellos, deberías usar esta constante.$state->memory()->get('hefesto-org')→ un string con el dominio/organización del virtual-host.$state->memory()->get('hefesto-env')→ un string con el entorno del virtual-host.$state->memory()->get('hefesto-api')→ un string con la key (nombre) de la API actual.