phpnova / rest
Library para el manejo de solocitudes HTTP
This package's canonical repository appears to be gone and the package has been frozen as a result.
Requires (Dev)
- composer/composer: ^2.5
This package is auto-updated.
Last update: 2023-12-29 15:22:55 UTC
README
- PHP ^8.2.0
- Servidor local, pueder xammp, wanserver, symfony
Se recomienda utilizar symfony para arrancar el servidor de pruebas
Configuiación
app.json
El archivo app.config
contiene la configuración base del aplicactivo
{ "version": "1.0.0.BETA", "src": "src/", "files": "files/", "databases": { "my_db": { "type": "mysql", "timezone": "+00:00" } } }
app.env.json
El archivo app.env.json
contiene la cofiguiración de entorno al momento de ejecutar la apliación por lo tanto no se recomienda guardar este archivo en el repositorio, debido a que los datos varian en base al lugar donde se depliegue la apliacción.
El contenido hace referencias a los cors de la API y datos de conexión de la base de datos.
Si al momento de ejecutar al aplicación se detecta que el archiovo app.env.json
no existe automaticamete se creara el archivo en base a la configuración inicial del app.json
.
{ "cors": { "/": "*" }, "databases": { "my_db": { "host": "localhost", "user": "root", "password": "", "database": "db_name" } } }
Index.php
Entrada de la aplicación
Recuerde configurar su archivo .htaccess para apuntar las entradas de la url al index.php
Ejemplo basico
RewriteEngine On
RewriteRule ^(.*) index.php [L,QSA
<?php use Phpnova\Rest\AppConfig; use Phpnova\Rest\Application; use Phpnova\Rest\Routing\Router; require_once __DIR__ . '/vendor/autoload.php'; $app = new Application(); $app->use('/', fn() => require __DIR__ . '/app/router.php'); $app->setHandleRequest(require __DIR__ . '/app/Config/HandleResponse.php'); $app->setHandleError(require __DIR__ . '/app/Config/HandleErrors.php'); $app->setHandleException(require __DIR__ . '/app/Config/HandleException.php'); $app->run();
Definir rutas
Las rutas se definen mediante los metódos estaticos de la classe Phpnova\Rest\Routing\Router::class
.
use Phpnova\Rest\Http\Request; use Phpnova\Rest\Http\Response; use Phpnova\Rest\Routing\Router; Router::get(path: 'hola-mundo', function(){ return "Hola mundo"; }); Router::post(path: 'hola-mundo', function(){ return "Hola mundo POST"; }); # Sub rutas Router::use('/saludar', function(){ Router::get('/', function() { return "Hola, ¿Como estas?"; }); # Con parametros en la ruta utilizaremos : mas el nombre Router::get('/:name', function(string $name){ return "Hola $name, ¿Como estas?"; }); });
Controladores
Los controladores son las funciones a ejecturtar por cada ruta, puden ser definidas al mometento de registar una ruta o hacer referencia a una clase que alamacena el metodo.
Ejemplo de una función
# En este haca la función se ejecutar para entrada `/saludar/:name/` # Ruta ingresada de prueba `/saludar/Johan/` function(){ return "Hola, ¿Como estas?"; } # Salia resultante: "Hola, ¿Como estas?"
Para acceder a los parametros de las definidos en la URL
# Si quicerarmos haceder al parametro de la ruta `:name`, # basta un parametro en la función con el mismo nombre function(string $name){ return "Hola $name, ¿Como estas?"; } # Salida resultante: "Hola Johan, ¿como estar?"
Para acceder a mas información de la consulta tendremos que definir un parametro con el tipo Phpnova\Rest\Http\Request
.
function(Phpnova\Rest\Http\Request $req){ return "Hola"; }
Para cargar el contendio del body en un parametro de la función autilizaremos el atributo Phpnova\Rest\Http\Body
antes del parametro al cual desamos cargar el contenido.
use Phpnova\Rest\Http\Body function(#[Body]mixed $body){ return $body; }
Cualquier parametro que haga referencia a una clase se se instaciara automaticamente por lo cual se recomienda no solicitar parametros en el constructor de la clase el corrector funcionamiento.