arnapou/psr-http

库 - PSR-7, PSR-15, PSR-17, PSR-18。

v1.0.0 2024-09-09 19:33 UTC

This package is auto-updated.

Last update: 2024-09-09 17:56:33 UTC


README

pipeline coverage

KISS(Keep It Simple Stupid)PSR(PHP 标准建议)类。

安装

composer require arnapou/psr-http

packagist 👉️ arnapou/psr-http

何时使用此库

  • 您需要简单的装饰器、代理、适配器等 PSR 相关内容
  • 您需要简单的实现,涵盖基础内容

示例 PSR-7 Http 消息

我们没有自己的 PSR-7 类,只有装饰器。

该项目使用 nyholm/psr7,这是一个非常轻量级的 PSR-7 实现,严格且快速。

在这里重新发明轮子并不会带来任何简化。

发送(及更多)的装饰器

$response = new \Arnapou\Psr\Psr7HttpMessage\Response($decoratedPsr7Response);
$response->withHeader(\Arnapou\Psr\Psr7HttpMessage\Header\CacheControl::sharedMaxAge(600))
$response->send();

示例 PSR-15 Http 处理器

我们可以实现 PSR 的方式非常广泛。

我基本上构建了一个“路由处理器”,它内部使用我的 PSR-14 事件调度器。

我不必告诉你,这对于没有数百个路由的小型项目来说已经足够简单了。

如果您在大项目中需要性能,您可能不需要这些东西。

这非常简单,100% 依赖 PSR。

$handler = new \Arnapou\Psr\Psr15HttpHandlers\HttpRouteHandler();

// Add routes
$handler
    ->addRoute(
        '/users/{id}', 
        function (int $id) {
            return ['user'=> $id]
        }
    )
    ->setRequirement('id', '\d+');

// Get the server Request (here from global by lazyness)
$request = (new \Arnapou\Psr\Psr17HttpFactories\HttpFactory())->createServerRequestFromGlobals();

// Handle and get the response, a NoResponseFound will be thrown if no match
try {
    $response = $handler->handle($request);
} catch (\Arnapou\Psr\Psr15HttpHandlers\Exception\NoResponseFound) {
    $response = new \Arnapou\Psr\Psr7HttpMessage\HtmlResponse('Not Found', 404);
}

// Use the response decorator to send it
(new \Arnapou\Psr\Psr7HttpMessage\Response($response))->send();

示例 PSR-17 Http 工厂

该项目使用 nyholm/psr7,这是一个非常轻量级的 PSR-7 实现,严格且快速。

在这里重新发明轮子并不会带来任何简化。

我们的 PSR-17 类是建立在 nyholm/psr7 工厂之上的组合。

$factory = new \Arnapou\Psr\Psr17HttpFactories\HttpFactory();
$serverRequest = $factory->createServerRequestFromGlobals();

示例 PSR-18 Http 客户端

该项目使用 symfony/http-client,这是最好的客户端之一,而不会像其他鲸鱼那样过于沉重。在这里重新发明轮子并不会带来任何简化。

我们的 PSR-18 类是建立在 symfony/http-clientnyholm/psr7 工厂之上的组合。

$client = new \Arnapou\Psr\Psr18HttpClient\HttpClient();
$request = $client->createRequest('GET', 'https://arnapou.net/ip');
$response = $client->sendRequest($request);
echo $response->getBody();

PHP 版本

日期参考8.38.2
09/09/20241.0.x, 主要××