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.

dev-main 2023-04-29 13:50 UTC

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.