NOTA BENE: Este projeto usa Semver e Changelog. Mas não é uma versão principal estável. Qualquer atualização menor (FE 0.5.* -> 0,6.*) Pode quebrar a compatibilidade com versões anteriores!
Estrutura simples do PHP7 para serviços de descanso de construção rápida com base em middleware, PSR-7 e React.
A instância executada pode ser encontrada pelo link, também consulte o exemplo de repo.
$ composer require free-elephants/rest-daemon
Consulte Exemplo no exemplo/Rest-Server.php e documentação.
# 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
Qualquer manipulador de método de endpoint pode ser implementação chamada de middleware: função ou classe com o 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 );Veja como criar servidor para passo a passo em um script
Você pode usar o PHP-DI (ou outra implementação de contêiner PSR-11) e configuração de arquivo de roteamento com o RestServerBuilder para mais configurar e codificar menos.
Veja o exemplo com o roteamento e as dependências baseados em arquivos Configuração: Rest-Server.php
Você pode se vincular a todos os métodos na rota um manipulador e, opcionalmente, organizar rotas por módulos. Por padrão, o servidor contém 1 módulo padrão para todos os pontos de extremidade. Veja o exemplo: rotas.php
Por padrão, a instância do servidor fornece uma coleção com algum middleware útil. Você pode estendê -lo ou substituí -lo:
<?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 ); O manipulador de métodos de todo fim de extremidade será embrulhado para esta coleção e chamado entre definido como after e before do middleware. Além disso, você pode configurar a coleção de middleware padrão com acesso a todos os middleware interno por chave: esta coleção implementa a interface ArrayAccess.
<?php
$ server -> getMiddlewareCollection ()-> getBefore ()-> offsetUnset ( FreeElephants RestDaemon Middleware MiddlewareRole:: NO_CONTENT_STATUS_SETTER );... será implementado ...
... será implementado ...