phonetworks / pho-server-rest
Pho内核的基于REST的管理API。
Requires
- php: >=7.2.0
- danielstjules/stringy: ^3.0
- hansott/psr7-cookies: ^2.0
- react/http: ^0.8.4
- vlucas/phpdotenv: ^4.1
Requires (Dev)
- fzaninotto/faker: ^1.6
- guzzlehttp/guzzle: ^6.3
- phpunit/phpunit: ^5.7
- psy/psysh: *
- roave/security-advisories: dev-master
- squizlabs/php_codesniffer: ^2.5
README
pho-server-rest
Pho内核的事件驱动非阻塞REST API。
Pho-Server-Rest不依赖于第三方HTTP服务器,如NGINX或Apache HTTPD。但建议您在代理服务器后面运行它以处理静态资源和缓存。
需求
安装
推荐通过git安装pho-server-rest。MacOS和大多数UNIX操作系统都自带git。
git clone https://github.com/phonetworks/pho-server-rest/
如果您使用Windows或未预先安装git,您可以从https://git-scm.cn/下载并安装git,或者直接从https://github.com/phonetworks/pho-server-rest/archive/master.zip下载pho-server-rest的zip压缩包并解压。
安装REST服务器后,您需要一个Pho内核来运行它。您可以通过输入以下命令安装标准Pho内核:
git submodule init git submodule update
或者,您也可以使用自定义配方创建自己的内核,并将其复制/粘贴到内核目录下。有关创建自定义内核的说明,请参阅README.md文件。
设置内核后,您应使用Composer按以下方式安装依赖项:
composer install
不要忘记为子模块内核安装此类依赖项。您需要从预置中复制composer.json,这些预置确定了您要构建的图的结构。
cd kernel cp presets/basic ./composer.json # any preset is fine composer install cd ..
要运行服务器,您必须执行run.php文件。或者,您可以通过程序调用服务器
<?php require "vendor/autoload.php"; include("PATH/TO/YOUR/KERNEL"); $server = new \Pho\Server\Rest\Server($kernel); $server->port(8080); $server->serve();
用法
<?php /** * Returns the routes object to manipulate the behaviour of the server * @return self */ $server->routes(); /** * Returns all existing routes * @return self */ $server->routes()->all(); /** * Adds a new route: * @param string $method HTTP Method, like GET, PUT, DELETE * @param string $path HTTP Path like /some_path * @param callable $func Function to call with arguments; $request (\Psr\Http\Message\ServerRequestInterface), $response (\React\Http\Response) * @return void */ $server->routes()->add("GET", "/path/{arg:[0-9]+}", function($request, $response, $arg) { }); /** * Select no route * @return self */ $server->routes()->none() /** * Select all routes, minus the defined ones. * @return self */ $server->routes()->all()->but(...) /** * Select only the defined ones. */ $server->routes()->only(...) /** * Only admins can access the selected routes * The opposite is: `unlock()` * @return void */ $server->routes()->only(...)->lock() /** * No one can access the selected routes * The opposite is: `enable()` * @return void */ $server->routes()->only(...)->disable()
会话
<?php Session::depend(); Session::destroy(); Session::begin();
单元测试
为了运行测试,请确保REST服务器正在运行。为此,您需要在根目录中输入php run.php
,确保内核子模块已初始化并设置正确的配方,并且环境变量已正确设置。
服务器启动并运行后,您可以通过输入vendor/bin/phpunit
运行单元测试,前提是您已经安装了依赖项。
常见问题解答
如何更改端口号?
默认情况下,pho-server-rest设计为通过端口1337提供服务。您可以通过更改对应于$server->port(1337);
行的文件run.php来更改它。
如何将Pho服务器作为实时应用程序的一部分使用?
Phở Server 使用 React 的核心反应器事件循环 (React's core reactor event loop),并且可以与任何使用相同基础设施的应用程序协同工作。为了实现这一点,需要将自定义事件循环作为第二个参数构建 Phở 服务器对象;$server = new \Pho\Server\Rest\Server($kernel, $custom_loop);
一旦初始化了服务器对象,就可以通过传递 false
参数来单独启动事件循环,使用 serve()
调用如下:$server->serve(false);
。这样,服务器将以非阻塞方式启动,因此可以在应用程序的不同生命周期点和时间初始化循环。
许可协议
MIT 协议,请参阅 LICENSE。