- libs/MessagesClass.php, es la clase que gestiona los mensajes de la aplicación y se encargará de grabar en disco, en base de datos y/o devolver a quien a iniciado la petición un resultado.
- config/messages.php, tiene formato de array par/valor y con la clase ConfigClass extraemos los datos.
require_once dirname( dirname(__FILE__))."/libs/MessagesClass.php";
Pero no la ponemos en cualquier sitio sino debajo de la clase CustomErrorLog.php ( mirar el código en el github del fichero public/index.php) . Ahora ya podemos utilizar la clase en toda la API.
En la clase creamos tres métodos sencillos que podremos ampliar y complicar todo lo que queramos:
- Response, que será el encargado de devolver los datos al quien llama a la API o devolver algún error controlado. Todos los mensajes que salen de la API irán codificados en formato JSON.
- WriteLog, escribe logs en un fichero de texto.
- WriteBBDD, escribe en la base de datos.
Vamos a empezar a codificar la clase mensajes creamos las tres funciones con la funcionalidad básica para grabar los. Os dejo aqui el código de la clase MessagesClass
class MessagesClass
{
# Metodo para grabar logs en disco
public static function WrieLog( $data)
{
# Obtenemos la ruta de los logs del fichero de configuración
$file = ConfigClass::get("config.ruta_logs")['general'] . "trace.log";
# Obtenemos la fecha actual
$date = date( "Y-m-d H:i:s");
# Grabamos log a disco
error_log ( "[".$date."] ". $data['code'] . " - " . print_r( $data['message'], true). "\n", 3, $file);
}
public static function WriteBBDD( $data)
{
# Grabamos el log en la base de datos en la tabla logs
$params['query'] = "insert into logs( type, message, code) values( ?, ?, ?)";
$params['params'] = array( $data['type'], $data['message'], $data['code']);
PDOClass2::Execute( $params);
}
public static function Response( $data)
{
# Graba log bbdd
self::WriteBBDD( $data);
# Graba log
self::WrieLog( $data);
# Devuelve datos a quien ha hecho la petición porque la salida siempre la hacemos
# por la entrada, no paramos nunca el programa a menos que sea requerimiento
return ( json_encode( $data));
}
}
Ahora que ya tenemos codificada la clase de los mensaje en el código en todas las partes que antes poníamos la siguientes líneas
echo ("Error: el JSON no tiene el formato correcto");
die;
Ahora ponemos una llamada a la nueva clase con el siguiente formato:
return ( MessagesClass::Response( array(
'success' => false,
'type' => 'ERROR',
'code' => RandomString(),
'message' => ConfigClass::get("messages.GEN00001"),
)
));
¿ Y esto ConfigClass::get("messages.GEN00001") que es ? es la llamada a la clase que decodifica los mensajes que están en el fichero config/messages.php
Ahora sí que tenemos la estructura de la API terminada y solo queda añadirle funcionalidades para que gestione los coches y las marcas.
Podemos probar la API. Podéis bajaros el código desde el github y probarlo https://github.com/depruebas/api-cars
Vais al directorio api-cars/api-cars-chapters/04/public del proyecto que os acabáis de bajar y ejecutáis el servidor web
php -S 127.0.0.1:8000
y ejecutáis el post
curl -X POST --header 'Content-Type: application/json' -d '{"LOGIN":{"username":"tEQUnCs5UdmGApjSksFkeBykC5ANVpns","password":"8A}yCehpvD5Pm26jtQZY-m;t5^G(WTd]","api":"CARS-DEV"},"ACTIONS":{"class":"List","method": "brands"},"DATA":{"params":""}}' http://127.0.0.1:8000
El resultado tiene que ser este:
Clase '/api-cars/api-cars-full/Modules/ListClass.php no existe
Da un error al no encontrar el fichero que quiere ejecutar, aun no hemos creado el fichero es ListClass.php, lo haremos en el siguiente capitulo.
Si al probarlo no graba en disco revisar los permisos del directorio logs y de sus ficheros
En el próximo y último capítulo veremos cómo ir añadiendo estas funcionalidades.
Y esto es todo, y feliz programming
Saludos
Alex.
También puede interesarte:
Configurar Laravel Sail para utilizar un MySql externo existente |
||