Nota Bene: В этом проекте используется Semver и ChangeLog. Но это не стабильная главная версия. Любое незначительное обновление (Fe 0,5.* -> 0,6.*) Может сломаться назад!
Простая структура PHP7 для быстрого строительства услуг REST на основе промежуточного программного обеспечения, PSR-7 и React.
Забеганный экземпляр можно найти по ссылке, также см. Пример репо.
$ composer require free-elephants/rest-daemon
См. Пример в примере/rest-server.php и документация.
# 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
Любой обработчик метода конечной точки может быть промежуточной, подобной вызовой реализации: функция или класс с помощью метода __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 );Посмотрите, как построить сервер для шага за шагом в одном сценарии
Вы можете использовать PHP-DI (или другую реализацию контейнера PSR-11) и конфигурацию файла маршрутизации с RestServerBuilder для получения дополнительной настройки и кодирования меньше.
См. Пример с маршрутизацией на основе файлов и конфигурации зависимостей: rest-server.php
Вы можете связаться с каждым методом в маршруте обработчика и, необязательно организовать маршруты с помощью модулей. По умолчанию сервер содержит 1 модуль по умолчанию для всех конечных точек. См. Пример: routes.php
По умолчанию экземпляр сервера предоставьте коллекцию с некоторым полезным промежуточным программным обеспечением. Вы можете расширить или переопределить:
<?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 ); Каждый обработчик метода конечной точки будет обернут в эту коллекцию и называется между определением как after и before промежуточного программного обеспечения. Также вы можете настроить коллекцию промежуточного программного обеспечения по умолчанию с доступом к каждому встроенному промежуточному программному обеспечению по ключу: эта коллекция реализует интерфейс Arrayaccess.
<?php
$ server -> getMiddlewareCollection ()-> getBefore ()-> offsetUnset ( FreeElephants RestDaemon Middleware MiddlewareRole:: NO_CONTENT_STATUS_SETTER );... будет реализован ...
... будет реализован ...