free-elephants/rest-daemon

PHP http socket REST 服务器

0.13.0 2019-05-26 11:17 UTC

README

Build Status codecov Installs Releases

注意:此项目使用 semver 和 变更日志。但它不是一个稳定的重大版本。任何次要更新(例如 0.5.* -> 0.6.*)都可能破坏向后兼容性!

简单的 PHP7 框架,基于中间件、PSR-7 和 react 快速构建 REST 服务。

可以通过链接找到运行实例,也请参阅示例仓库

特性

  • 面向中间件请求/响应处理
  • 支持 PSR 的优先级:PSR-2、-3、-4、-7、-11、-15 以及其他。
  • 内置中间件支持常见的 REST 功能,如基于 HTTP 的语义、内容类型、请求解析、头部。
  • 选择两个可用的 http-daemon 驱动之一:Ratchet ReactPHPAerys
  • 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);

每个端点的方法处理程序将包装在这个集合中,并在定义的 afterbefore 中间件之间调用。您还可以通过键访问每个内置中间件来配置默认中间件集合:此集合实现 ArrayAccess 接口。

<?php
$server->getMiddlewareCollection()->getBefore()->offsetUnset(\FreeElephants\RestDaemon\Middleware\MiddlewareRole::NO_CONTENT_STATUS_SETTER);

自定义端点中间件

... 将实现...

调试和日志记录

... 将实现...