free-elephants / rest-daemon
PHP http socket REST 服务器
0.13.0
2019-05-26 11:17 UTC
Requires
- amphp/aerys: ^0.7.1
- cboden/ratchet: 0.4
- free-elephants/di: ^2.0
- guzzlehttp/psr7: ^1.0
- monolog/monolog: ^1.21
- oscarotero/psr7-middlewares: ^3.18
- psr/container: ^1.0
- psr/log: ^1.0
- relay/middleware: ^1.1
- relay/relay: ~1.0
- symfony/console: ^4.2
- symfony/routing: ^3.1
- zendframework/zend-code: ^3.1
- zendframework/zend-diactoros: ^1.3
- zendframework/zend-http: ^2.5
- zircote/swagger-php: ^2.0
Requires (Dev)
- codeception/codeception: ^2.3
Suggests
- free-elephants/di: Simplest PHP Dependency Injector.
This package is not auto-updated.
Last update: 2024-09-14 20:25:26 UTC
README
注意:此项目使用 semver 和 变更日志。但它不是一个稳定的重大版本。任何次要更新(例如 0.5.* -> 0.6.*)都可能破坏向后兼容性!
简单的 PHP7 框架,基于中间件、PSR-7 和 react 快速构建 REST 服务。
特性
- 面向中间件请求/响应处理
- 支持 PSR 的优先级:PSR-2、-3、-4、-7、-11、-15 以及其他。
- 内置中间件支持常见的 REST 功能,如基于 HTTP 的语义、内容类型、请求解析、头部。
- 选择两个可用的 http-daemon 驱动之一:Ratchet ReactPHP 或 Aerys。
- Swagger 集成
安装
$ composer require free-elephants/rest-daemon
用法
请参阅 example/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
添加您的 RESTful API 端点
任何端点方法处理程序都可以是类似中间件的调用实现:函数或具有 __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);
请参阅如何通过单个脚本逐步构建服务器。
RestServerBuilder
您可以使用 php-di(或另一个 PSR-11 容器实现)以及路由文件配置 RestServerBuilder 进行更多配置和更少的编码。
请参阅以下示例,其中包含基于文件的 路由 和 依赖项 配置:rest-server.php
路由
您可以将处理程序链接到路由中的每个方法,并且可选地按模块组织路由。默认情况下,服务器包含一个默认模块,用于所有端点。请参阅示例: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);
自定义端点中间件
... 将实现...
调试和日志记录
... 将实现...