- libs/CoreClass.php, es la clase donde validamos los datos entrados, que vengan datos, que el JSON sea correcto, validamos si los usuarios tienen permisos correctos y en función de los atributos del JSON class y method se realizará una acción u otra, las rutas.
- libs/LoginClass.php, es la clase donde validamos los datos que vienen en el atributo LOGIN, devolvemos un true si la validación es correcta y false si es hay error.
Y en el fichero index.php añadimos en la sección donde incluimos los ficheros necesarios estas dos clases nuevas:
require_once dirname( dirname(__FILE__))."/libs/CoreClass.php";
require_once dirname( dirname(__FILE__))."/libs/LoginClass.php";
Y vamos a la línea 58-59 aproximadamente donde esta este código
/*$_core = new CoreClass();
$_core->Init ( $_data_input, $_data_server);*/
Ponemos estas otras líneas de código en su lugar
$_config = ConfigClass::get("database.cars");
PDOClass2::Connection( $_config);
$_core = new CoreClass();
$_core->Init ( $_data_input, $_data_server);
PDOClass2::Close();
Y ahora en la clase CoreClass.php creamos un nuevo método llamado init que será el punto de entrada a las funcionalidades de la API y donde validamos los datos recibidos y decidiremos si todo está correcto o devolvemos algún error.
Código de la función init de la clase CoreClass.php
# Si no nos envian información y salimos con mensaje de error
if ( trim( $data_input) == "")
{
echo ("Error: no hay datos para procesar");
die;
}
# Si el json no tiene el formato correcto devolvemos un error
if ( !json_decode( $data_input))
{
echo ("Error: el JSON no tiene el formato correcto");
die;
}
# Si todo esta validado seguimos con el proceso y pasamos el json a un array php
$data = json_decode( $data_input, true);
$_login = new LoginClass();
# Verificamos que el api user y el pass user son correctos y tienen permisos para utilizar
# esta API
$login_api = $_login->api_login( $data['LOGIN']);
if ( !$login_api)
{
# Si la llamada a comprobar los datos de la API devuelve falso
echo "La api no tiene permisos";
die;
}
$_class = ucwords( trim( $data['ACTIONS']['class'] . "Class"));
$_method = $data['ACTIONS']['method'];
# Cargamos la clase (fichero) que vamos a utilizar dinamicamente
$class_include = dirname( dirname(__FILE__))."/Modules/".$_class.".php";
if ( file_exists( $class_include))
{
require $class_include;
$action = new $_class();
$return = $action->{$_method} ( $data);
echo $return;
}
else
{
echo ( "\nClase '" . $class_include . " no existe");
die;
}
}
CoreClass es la encargada de cargar los ficheros php que se van a ejecutar en cada petición a través de este código
En el atributo ACTIONS del Json le decimos que fichero (clase) y que método queremos ejecutar
$_class = ucwords( trim( $data['ACTIONS']['class'] . "Class"));
$_method = $data['ACTIONS]['method'];
Y a través del siguiente código se carga la clase y ejecuta el método
# Cargamos la clase (fichero) que vamos a utilizar dinamicamente
$class_include = dirname( dirname(__FILE__))."/Modules/".$_class.".php";
if ( file_exists( $class_include))
{
require $class_include;
# Carga la clase y ejecuta el metodo
$action = new $_class();
$return = $action->{$_method} ( $data);
echo $return;
}
Poca cosa que comentar de la clase LoginClass.php que está para validar usuario y contraseña de la API otros usuarios si quisiéramos poner mas validaciones o diferentes.
Desde la clase CoreClass le pasamos al método api_login los datos de acceso que vienen en el atributo LOGIN
public function api_login( $data)
{
# Validamos los datos de user y pass de la API con la tabla auth_sockets
$params['query'] = "select id, token
from auth_env where api_user = ? And api_pass = ? And enabled = 1 And api_name = ?";
$params['params'] = array( $data['username'], $data['password'], $data['api']);
$rows = PDOClass2::ExecuteQuery( $params);
if ( empty( $rows['data']))
{
echo "Error validando usarios de API";
return (false);
}
return ( true);
}
Y hasta aquí la estructura base de la API. Hemos definido la arquitectura de la API con los ficheros/clases que van a ser necesarios.
Ahora 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/03/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, el fichero es ListClass.php que es el que pasamos en el atributo ACTIONS - class
Y esto es todo, y feliz programming
Saludos
Alex.
También puede interesarte:
Configurar Laravel Sail para utilizar un MySql externo existente |
||