NOTA BENE: Este proyecto usa Semver y ChangeLog. Pero no es una versión principal estable. Cualquier actualización menor (FE 0.5.* -> 0.6.*) ¡Puede romper la compatibilidad hacia atrás!
Marco PHP7 simple para servicios de descanso rápido basados en middleware, PSR-7 y React.
La instancia ejecutada se puede encontrar por enlace, ver también el repositorio de ejemplo.
$ composer require free-elephants/rest-daemon
Vea el ejemplo en Ejemplo/REST-Server.php y documentación.
# your rest-server.php script
$server = new RestServer('127.0.0.1', 8080, '0.0.0.0', ['*']); // <- it's default arguments values
$server->run();
# can be runned as
$ php ./rest-server.php
Cualquier manejador de métodos de punto final puede ser una implementación llamable de middleware: función o clase con el método __invoke ().
<?php
class GetAttributeHandler extends AbstractEndpointMethodHandler
{
public function __invoke ( ServerRequestInterface $ request , ResponseInterface $ response , callable $ next )
{
$ name = $ request -> getAttribute ( ' name ' , ' World ' );
$ response -> getBody ()-> write ( ' {
"hello": " ' . $ name . ' !"
} ' );
return $ next ( $ request , $ response );
}
}
$ greetingAttributeEndpoint = new BaseEndpoint ( ' /greeting/{name} ' , ' Greeting by name in path ' );
$ greetingAttributeEndpoint -> setMethodHandler ( ' GET ' , new GetAttributeHandler ());
$ server -> addEndpoint ( $ greetingAttributeEndpoint );Vea cómo crear servidor para pasar paso a paso en un script
Puede usar PHP-DI (u otra implementación del contenedor PSR-11) y la configuración del archivo de enrutamiento con RestServerBuilder para configurar y codificar más menos.
Consulte el ejemplo con la configuración de enrutamiento y dependencias basados en archivos: REST-SERVER.PHP
Puede vincular con cada método en la ruta A controlador y organizar opcionalmente rutas por módulos. Por defecto, el servidor contiene 1 módulo predeterminado para todos los puntos finales. Ver ejemplo: rutas.php
Por defecto, la instancia del servidor proporciona una colección con algún middleware útil. Puede extenderlo o anularlo:
<?php
$ requestCounter = function (
ServerRequestInterface $ request ,
ResponseInterface $ response ,
callable $ next
) {
static $ requestNumber = 0 ;
printf ( ' [%s] request number #%d handled ' . PHP_EOL , date ( DATE_ISO8601 ), ++ $ requestNumber );
return $ next ( $ request , $ response );
};
$ extendedDefaultMiddlewareCollection = new DefaultEndpointMiddlewareCollection ([], [ $ requestCounter ]);
$ server -> setMiddlewareCollection ( $ extendedDefaultMiddlewareCollection ); El controlador de métodos de cada punto final se envolverá a esta colección y se llamará entre el middleware definido como after y before del middleware. También puede configurar la colección de middleware predeterminada con acceso a cada middleware incorporado por clave: esta colección implementa la interfaz ArrayAccess.
<?php
$ server -> getMiddlewareCollection ()-> getBefore ()-> offsetUnset ( FreeElephants RestDaemon Middleware MiddlewareRole:: NO_CONTENT_STATUS_SETTER );... se implementará ...
... se implementará ...