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 );...將被實施...
...將被實施...