rest daemon
1.0.0
Nota Bene:此项目使用SEMVER和CHAMPELOG。但这不是稳定的主要版本。任何次要更新(Fe 0.5。* - > 0.6。*)都可以使后兼容性!
简单的PHP7框架,用于基于中间件,PSR-7和REACT的快速构建REST服务。
可以通过链接找到运行的实例,另请参见示例repo。
$ composer require free-elephants/rest-daemon
请参阅示例/retherser.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 );...将被实施...
...将被实施...