1: | <?php declare(strict_types=1); |
2: | |
3: | namespace Salient\Contract\Http; |
4: | |
5: | use Psr\Http\Message\MessageInterface; |
6: | use Psr\Http\Message\RequestInterface; |
7: | use Psr\Http\Message\ResponseInterface; |
8: | use Salient\Contract\Core\Immutable; |
9: | use InvalidArgumentException; |
10: | use JsonSerializable; |
11: | use Stringable; |
12: | |
13: | /** |
14: | * @api |
15: | */ |
16: | interface HttpMessageInterface extends |
17: | MessageInterface, |
18: | Stringable, |
19: | JsonSerializable, |
20: | Immutable |
21: | { |
22: | /** |
23: | * Get an instance of the class from a compatible PSR-7 message |
24: | * |
25: | * @template T of MessageInterface |
26: | * |
27: | * @param T $message |
28: | * @return T&HttpMessageInterface |
29: | * @throws InvalidArgumentException if the class cannot be instantiated from |
30: | * `$message`, e.g. if the class implements {@see RequestInterface} and |
31: | * `$message` is a {@see ResponseInterface}. |
32: | */ |
33: | public static function fromPsr7(MessageInterface $message): HttpMessageInterface; |
34: | |
35: | /** |
36: | * Get the HTTP headers of the message |
37: | */ |
38: | public function getHttpHeaders(): HttpHeadersInterface; |
39: | |
40: | /** |
41: | * Get the value of a message header as a list of values, splitting any |
42: | * comma-separated values |
43: | * |
44: | * @return string[] |
45: | */ |
46: | public function getHeaderValues(string $name): array; |
47: | |
48: | /** |
49: | * Get the first value of a message header after splitting any |
50: | * comma-separated values |
51: | */ |
52: | public function getFirstHeaderLine(string $name): string; |
53: | |
54: | /** |
55: | * Get the last value of a message header after splitting any |
56: | * comma-separated values |
57: | */ |
58: | public function getLastHeaderLine(string $name): string; |
59: | |
60: | /** |
61: | * Get the only value of a message header after splitting any |
62: | * comma-separated values |
63: | * |
64: | * An exception is thrown if the header has more than one value. |
65: | */ |
66: | public function getOneHeaderLine(string $name, bool $orSame = false): string; |
67: | |
68: | /** |
69: | * Get the message as an HTTP payload |
70: | */ |
71: | public function getHttpPayload(bool $withoutBody = false): string; |
72: | |
73: | /** |
74: | * Get the message as an HTTP Archive (HAR) object |
75: | * |
76: | * @return array{httpVersion:string,cookies:array<array{name:string,value:string,path?:string,domain?:string,expires?:string,httpOnly?:bool,secure?:bool}>,headers:array<array{name:string,value:string}>,headersSize:int,bodySize:int} |
77: | */ |
78: | public function jsonSerialize(): array; |
79: | } |
80: |