phonetworks/pho-server-rest

Pho内核的基于REST的管理API。

4.1.2 2020-03-24 18:15 UTC

README

pho-server-rest

Pho内核的事件驱动非阻塞REST API。

Pho-Server-Rest不依赖于第三方HTTP服务器,如NGINXApache 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