- 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";
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));
  }
 }
echo ("Error: el JSON no tiene el formato correcto");
die;
return ( MessagesClass::Response( array(
          'success' => false,
          'type' => 'ERROR',
          'code' => RandomString(),
          'message' => ConfigClass::get("messages.GEN00001"),
        )
 ));
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.






















