RingPHPとは
RingPHPは、HTTP通信の複雑な詳細を抽象化し、シンプルなPHP関数呼び出しでネットワークリクエストを処理できるツールです。HTTPクライアントやサーバーの構築にかかわらず、同期・非同期の両方のワークフローをサポートする統一インターフェースを提供します。
基本的な仕組み
RingPHPは、HTTPリクエストをハッシュ配列として受け取り、Promiseで実装されたレスポンスハッシュ配列を返すAPIを提供します。この設計はClojureのRingプロジェクト、PythonのWSGI、RubyのRackからインスピレーションを受けたものです。
主要コンポーネント
ハンドラ
ハンドラは、リクエスト配列を受け取り、FutureArrayInterfaceを実装したレスポンス配列を返すPHPの可呼び出しオブジェクトです。
<?php
use GuzzleHttp\Ring\Future\CompletedFutureArray;
$sampleHandler = function(array $request) {
return new CompletedFutureArray([
'status' => 200,
'headers' => ['Content-Type' => ['text/plain']],
'body' => 'こんにちは!'
]);
};
リクエスト・レスポンス構造
リクエストは以下の形式で表現されます:
$requestData = [
'http_method' => 'GET',
'scheme' => 'https',
'uri' => '/api/data',
'headers' => [
'host' => ['example.com'],
'X-Test' => ['value1', 'value2']
],
'client' => ['timeout' => 2.5]
];
レスポンスはステータスコード、ヘッダ、ボディなどの情報を含む配列形式です。
ミドルウェア
ミドルウェアは、ハンドラの機能を拡張する高階関数です。
<?php
use GuzzleHttp\Ring\Client\CurlHandler;
use GuzzleHttp\Ring\Core;
$authMiddleware = function(callable $handler, $token) {
return function (array $request) use ($handler, $token) {
return $handler(Core::setHeader('Authorization', 'Bearer '.$token));
};
};
$baseHandler = new CurlHandler();
$secureHandler = $authMiddleware($baseHandler, 'my-secret-token');
実装例
インストール手順
git clone https://gitcode.com/gh_mirrors/ri/RingPHP
cd RingPHP
composer install
基本リクエスト
<?php
require 'vendor/autoload.php';
use GuzzleHttp\Ring\Client\CurlHandler;
$handler = new CurlHandler();
$response = $handler([
'http_method' => 'GET',
'uri' => '/search',
'headers' => [
'host' => ['api.example.com'],
'Accept' => ['application/json']
]
]);
$response->then(function (array $response) {
echo $response['body'];
});
$response->wait();
重要事項
RingPHPはGuzzle 6以降では使用されなくなりました。新しいプロジェクトでは長期的なメンテナンス状況を考慮する必要がありますが、旧版Guzzleとの互換性が必要な場合や軽量なHTTP抽象化を求める場合に適しています。