Publicidad

4 - Crear una API en PHP, clase de mensajes


Por Alex el 02/06/2020, Comentar el artículo

Comparte este artículo:      




Ya tenemos el esqueleto de la API casi terminado para poder ir añadiendo funcionalidades. Ahora vamos a añadir un clase para centralizar todos los mensajes que intervienen en el ciclo de vida de la aplicación.


Vamos a crear una clases más que también será parte del core de nuestra API

  • 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.
También creamos un fichero de configuración para poner los mensajes

  • config/messages.php, tiene formato de array par/valor y con la clase ConfigClass extraemos los datos.
En el fichero index.php añadiremos la siguiente referencia la nueva clase

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.
A todas las funciones les pasaremos un parámetro que será un array con todas las variables.

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.



Si te ha gustado el artículo compartelo en:      




Añadir un comentarios:

Nombre:
Email: (no se publica el email)




SIGUENOS EN

ARCHIVO

Publicidad

.