koded / http
Koded HTTP 组件。实现了 PSR-7、PSR-17 和 PSR-18
3.1.1
2022-01-25 11:14 UTC
Requires
- php: ^8
- ext-curl: *
- ext-fileinfo: *
- ext-json: *
- ext-mbstring: *
- koded/stdlib: ^5
- psr/http-client: ^1
- psr/http-factory: ^1
- psr/http-message: ^1
Requires (Dev)
Suggests
- ext-iconv: *
README
Koded HTTP 库实现了 PSR-7 (HTTP 消息), PSR-17 (HTTP 工厂) 和 PSR-18 (HTTP 客户端)。
为了使项目中的方法更有用,请求和响应实例扩展了 额外接口。
ServerRequest
class ServerRequest extends ClientRequest implements Request {}
此对象表示 传入的服务器端 HTTP 请求。
ClientRequest
class ClientRequest implements RequestInterface, JsonSerializable {}
此对象是 传出的客户端 HTTP 请求的表示。
ServerResponse
class ServerResponse implements Response, JsonSerializable {}
此对象表示 传出的服务器端 响应。
UploadedFile
此值对象表示通过 HTTP 请求上传的文件。
HTTP 工厂
PSR-17 (HTTP 工厂) 的实现。
<?php use Koded\Http\HttpFactory; $httpFactory = new HttpFactory; $clientRequest = $httpFactory->createRequest('GET', '/'); $serverRequest = $httpFactory->createServerRequest('GET', '/'); $response = $httpFactory->createResponse(201); $stream = $httpFactory->createStream('Hello there'); $stream = $httpFactory->createStreamFromFile('file.name', '+w'); $stream = $httpFactory->createStreamFromResource($resource); $uri = $httpFactory->createUri('/'); $uploadedFile = $httpFactory->createUploadedFile($stream);
HTTP 客户端
有 2 个 ClientRequest
接口的实现
- PHP 流
- curl
要创建 HTTP 客户端的实例,请使用 Koded\Http\Client\ClientFactory
类
<?php use Koded\Http\Client\ClientFactory; $http = new ClientFactory(ClientFactory::CURL); // or ClientFactory::PHP $http->get('/', $headers); $http->post('/', $body, $headers); $http->put('/', $body, $headers); $http->patch('/', $body, $headers); $http->delete('/', $headers); $http->head('/', $headers);
$headers
是可选的。
HTTP 客户端 (PSR-18)
PSR-18 (HTTP 客户端) 的实现。
<?php use Koded\Http\Client\ClientFactory; use Koded\Http\ClientRequest; $request = new ClientRequest('POST', 'https://...', ['foo' => 'bar']); $response = (new ClientFactory)->sendRequest($request);
额外接口
Koded\Http\Request
Koded\Http\Response
这两个接口在您的项目中可能很有用,因为它们为请求/响应对象的状态提供了额外的功能。
请求
getPath(): string
getBaseUri(): string
withAttributes(array $attributes): Request
isSecure(): bool
isSafeMethod(): bool
isXHR(): bool
响应
getContentType(): string
ExtendedMessageInterface
请求和响应都扩展了这个接口,因此提供了额外的功能
withHeaders(array $headers): static
replaceHeaders(array $headers): static
getFlattenedHeaders(): array
getCanonicalizedHeaders(array $names = []): string
HttpInputValidator
这里的想法是有一个基本的机制来验证传入的请求数据。验证是通过调用 Request::validate(HttpInputValidator $validator)
方法在 HttpInputValidator
实例中完成的。
HttpInputValidator::validate()
应返回 array
,在以下情况下
- 空数组,验证成功
- 一个哈希表 (
['key' => 'value', ...]
),包含有关验证失败的信息
错误处理由应用程序完成。一个简单的例子
class FormValidator implements HttpInputValidator { public function validate(Data $input): array { if (empty($input->get('username'))) { return ['message' => 'Username is required']; } return []; } } // Somewhere in your app, use the `Request` object to run validation if ($response = $request->validate(new FormValidator)) { // {"message":"Username is required","status":400} return $response; }
错误响应将始终在错误消息中设置状态码 (status
值)。
如果验证中没有提供状态码,则默认为 400 Bad Request
。
许可证
代码是在 3 条款 BSD 许可证 的条款下分发的。