clue/viewvc-api-react

简单、异步访问 ViewVC 网页界面(Subversion/CVS 浏览器)

v0.4.0 2016-04-16 07:51 UTC

This package is auto-updated.

Last update: 2024-09-06 08:57:23 UTC


README

简单、异步API-like访问您的 ViewVC 网页界面(Subversion/CVS 浏览器),基于 React PHP 构建。

目录

快速入门示例

安装后,您可以使用以下代码从给定的 ViewVC URL 获取目录列表

$loop = React\EventLoop\Factory::create();
$browser = new Clue\React\Buzz\Browser($loop);
$client = new Client($browser->withBase('http://example.com/viewvc/'));

$client->fetchDirectory('/')->then(function ($files) {
    echo 'Files: ' . implode(', ', $files) . PHP_EOL;
});

$loop->run();

请参阅示例

使用方法

客户端

Client 负责组装并发送 HTTP 请求到远程 ViewVC 网页界面。它需要一个绑定到主 EventLoopBrowser 对象以处理异步请求

$loop = React\EventLoop\Factory::create();
$browser = new Clue\React\Buzz\Browser($loop);

$client = new Client($browser->withBase('http://example.com/viewvc/'));

Client API 使用相对 URI 来引用您的 ViewVC 安装中的文件和目录,因此请确保按照上述说明应用基本 URI。

如果您需要自定义 DNS 或代理设置,您可以显式传递一个自定义的 Browser 实例。

操作

ViewVC 并没有官方公开 API。但是,它的 REST-like URL 使构建正确请求并从其 HTML 输出中抓取结果变得容易。所有公共方法都类似于 ViewVC 网页界面中可用的相应操作。

$client->fetchDirectory($path, $revision = null);
$client->fetchFile($path, $revision = null);
$client->fetchPatch($path, $r1, $r2);
$client->fetchLog($path, $revision = null);

// many more…

所有操作都通过返回 承诺 来支持异步操作。

此处不列出所有可用的操作,请参阅 类概要

承诺

发送请求是异步(非阻塞)的,因此您可以实际并行发送多个请求。ViewVC 将对每个请求使用响应消息进行响应,顺序没有保证。发送请求使用基于 Promise 的接口,这使得在请求完成时(即成功解决或因错误而拒绝)进行响应变得容易。

$client->fetchFile($path)->then(
    function ($contents) {
        // file contents received
    },
    function (Exception $e) {
        // an error occured while executing the request
    }
});

如果您对此感到奇怪,您还可以使用更传统的 阻塞 API

阻塞

如上所述,此库默认提供强大的异步 API。

但是,如果您想将其集成到传统的阻塞环境中,您还应该考虑使用 clue/block-react

生成的阻塞代码可能如下所示

use Clue\React\Block;

$loop = React\EventLoop\Factory::create();
$browser = new Clue\React\Buzz\Browser($loop);

$client = new Client($browser->withBase($uri /* change me */));
$promise = $client->fetchFile($path /* change me */);

try {
    $contents = Block\await($promise, $loop);
    // file contents received
} catch (Exception $e) {
    // an error occured while executing the request
}

有关详细信息,请参阅 clue/block-react

流式传输

以下 API 端点解析为字符串形式的文件内容

$client->fetchFile($path);

请注意,这意味着整个字符串必须保留在内存中。这对于启动来说很容易,并且对于较小的文件来说表现良好。

对于大文件,通常更好的做法是使用流式传输方法,其中只需保留少量内存。这对于任意大小的(任何数量的)文件都适用。

以下API端点补充了默认的基于Promise的API,并返回一个实现ReadableStreamInterface的实例

$stream = $client->fetchFileStream($path);

$stream->on('data', function ($chunk) {
    echo $chunk;
});

$stream->on('error', function (Exception $error) {
    echo 'Error: ' . $error->getMessage() . PHP_EOL;
});

$stream->on('close', function () {
    echo '[DONE]' . PHP_EOL;
});

安装

推荐通过Composer来安装此库。 初识Composer?

这将安装最新支持的版本

$ composer require clue/viewvc-api-react:^0.4

有关版本升级的详细信息,请参阅变更日志

许可证

MIT