arnapou / psr-http
库 - PSR-7, PSR-15, PSR-17, PSR-18。
v1.0.0
2024-09-09 19:33 UTC
Requires
- php: ~8.2.0 || ~8.3.0
- arnapou/psr-event: ^1.0
- nyholm/psr7: ^1.8
- nyholm/psr7-server: ^1.1
- psr/http-client: ^1.0
- psr/http-factory: ^1.0
- psr/http-message: ^1.1 || ^2.0
- psr/http-server-handler: ^1.0
- symfony/http-client: ^5.4 || ^6.4
Requires (Dev)
- arnapou/dto: ^2.0 || ^3.0 || ^4.0
- friendsofphp/php-cs-fixer: ^3.52
- phpstan/extension-installer: ^1.3
- phpstan/phpstan: ^1.10
- phpstan/phpstan-deprecation-rules: ^1.1
- phpstan/phpstan-phpunit: ^1.3
- phpstan/phpstan-strict-rules: ^1.5
- phpunit/php-code-coverage: ^11.0
- phpunit/phpunit: ^11.0
README
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-client 和 nyholm/psr7 工厂之上的组合。
$client = new \Arnapou\Psr\Psr18HttpClient\HttpClient();
$request = $client->createRequest('GET', 'https://arnapou.net/ip');
$response = $client->sendRequest($request);
echo $response->getBody();
PHP 版本
日期 | 参考 | 8.3 | 8.2 |
---|---|---|---|
09/09/2024 | 1.0.x, 主要 | × | × |