liquidrazor/http-contracts provides the public HTTP request and response contracts in include/ and immutable default implementations in lib/.
Contract:
LiquidRazor\HttpContracts\Include\Contract\HttpRequestInterface
Default implementation:
LiquidRazor\HttpContracts\Lib\Request\HttpRequest
Implemented request accessors:
method(): stringuri(): UriInterfacepath(): stringqueryParams(): arrayheaders(): HeaderBagInterfacecookies(): arraybody(): ?stringrequestBody(): RequestBodyInterfaceuploadedFiles(): arrayattributes(): arrayprotocolVersion(): string
The request object does not:
- read PHP globals
- read
php://input - perform routing
- perform validation
- perform authorization
Contract:
LiquidRazor\HttpContracts\Include\Contract\HttpResponseInterface
Default implementation:
LiquidRazor\HttpContracts\Lib\Response\HttpResponse
Implemented response accessors:
statusCode(): intreasonPhrase(): stringheaders(): HeaderBagInterfacebody(): ?stringcookies(): arrayprotocolVersion(): stringattributes(): array
The response object does not:
- emit headers
- write output
- terminate execution
<?php
declare(strict_types=1);
use LiquidRazor\HttpContracts\Include\Enum\RequestBodyType;
use LiquidRazor\HttpContracts\Lib\Request\HeaderBag;
use LiquidRazor\HttpContracts\Lib\Request\HttpRequest;
use LiquidRazor\HttpContracts\Lib\Request\RequestBody;
use LiquidRazor\HttpContracts\Lib\Request\Uri;
use LiquidRazor\HttpContracts\Lib\Response\HttpResponse;
$request = new HttpRequest(
method: 'POST',
uri: new Uri(path: '/contracts'),
path: '/contracts',
headers: new HeaderBag(['Content-Type' => 'application/json']),
requestBody: new RequestBody(
type: RequestBodyType::JSON_ASSOCIATIVE,
raw: '{"name":"LiquidRazor"}',
parameters: ['name' => 'LiquidRazor'],
),
);
$response = new HttpResponse(
statusCode: 201,
reasonPhrase: 'Created',
body: '{"ok":true}',
);