1 | <?php
|
---|
2 |
|
---|
3 | namespace Psr\Http\Message;
|
---|
4 |
|
---|
5 | /**
|
---|
6 | * Representation of an outgoing, client-side request.
|
---|
7 | *
|
---|
8 | * Per the HTTP specification, this interface includes properties for
|
---|
9 | * each of the following:
|
---|
10 | *
|
---|
11 | * - Protocol version
|
---|
12 | * - HTTP method
|
---|
13 | * - URI
|
---|
14 | * - Headers
|
---|
15 | * - Message body
|
---|
16 | *
|
---|
17 | * During construction, implementations MUST attempt to set the Host header from
|
---|
18 | * a provided URI if no Host header is provided.
|
---|
19 | *
|
---|
20 | * Requests are considered immutable; all methods that might change state MUST
|
---|
21 | * be implemented such that they retain the internal state of the current
|
---|
22 | * message and return an instance that contains the changed state.
|
---|
23 | */
|
---|
24 | interface RequestInterface extends MessageInterface
|
---|
25 | {
|
---|
26 | /**
|
---|
27 | * Retrieves the message's request target.
|
---|
28 | *
|
---|
29 | * Retrieves the message's request-target either as it will appear (for
|
---|
30 | * clients), as it appeared at request (for servers), or as it was
|
---|
31 | * specified for the instance (see withRequestTarget()).
|
---|
32 | *
|
---|
33 | * In most cases, this will be the origin-form of the composed URI,
|
---|
34 | * unless a value was provided to the concrete implementation (see
|
---|
35 | * withRequestTarget() below).
|
---|
36 | *
|
---|
37 | * If no URI is available, and no request-target has been specifically
|
---|
38 | * provided, this method MUST return the string "/".
|
---|
39 | *
|
---|
40 | * @return string
|
---|
41 | */
|
---|
42 | public function getRequestTarget(): string;
|
---|
43 |
|
---|
44 | /**
|
---|
45 | * Return an instance with the specific request-target.
|
---|
46 | *
|
---|
47 | * If the request needs a non-origin-form request-target — e.g., for
|
---|
48 | * specifying an absolute-form, authority-form, or asterisk-form —
|
---|
49 | * this method may be used to create an instance with the specified
|
---|
50 | * request-target, verbatim.
|
---|
51 | *
|
---|
52 | * This method MUST be implemented in such a way as to retain the
|
---|
53 | * immutability of the message, and MUST return an instance that has the
|
---|
54 | * changed request target.
|
---|
55 | *
|
---|
56 | * @link http://tools.ietf.org/html/rfc7230#section-5.3 (for the various
|
---|
57 | * request-target forms allowed in request messages)
|
---|
58 | * @param string $requestTarget
|
---|
59 | * @return static
|
---|
60 | */
|
---|
61 | public function withRequestTarget(string $requestTarget): RequestInterface;
|
---|
62 |
|
---|
63 |
|
---|
64 | /**
|
---|
65 | * Retrieves the HTTP method of the request.
|
---|
66 | *
|
---|
67 | * @return string Returns the request method.
|
---|
68 | */
|
---|
69 | public function getMethod(): string;
|
---|
70 |
|
---|
71 | /**
|
---|
72 | * Return an instance with the provided HTTP method.
|
---|
73 | *
|
---|
74 | * While HTTP method names are typically all uppercase characters, HTTP
|
---|
75 | * method names are case-sensitive and thus implementations SHOULD NOT
|
---|
76 | * modify the given string.
|
---|
77 | *
|
---|
78 | * This method MUST be implemented in such a way as to retain the
|
---|
79 | * immutability of the message, and MUST return an instance that has the
|
---|
80 | * changed request method.
|
---|
81 | *
|
---|
82 | * @param string $method Case-sensitive method.
|
---|
83 | * @return static
|
---|
84 | * @throws \InvalidArgumentException for invalid HTTP methods.
|
---|
85 | */
|
---|
86 | public function withMethod(string $method): RequestInterface;
|
---|
87 |
|
---|
88 | /**
|
---|
89 | * Retrieves the URI instance.
|
---|
90 | *
|
---|
91 | * This method MUST return a UriInterface instance.
|
---|
92 | *
|
---|
93 | * @link http://tools.ietf.org/html/rfc3986#section-4.3
|
---|
94 | * @return UriInterface Returns a UriInterface instance
|
---|
95 | * representing the URI of the request.
|
---|
96 | */
|
---|
97 | public function getUri(): UriInterface;
|
---|
98 |
|
---|
99 | /**
|
---|
100 | * Returns an instance with the provided URI.
|
---|
101 | *
|
---|
102 | * This method MUST update the Host header of the returned request by
|
---|
103 | * default if the URI contains a host component. If the URI does not
|
---|
104 | * contain a host component, any pre-existing Host header MUST be carried
|
---|
105 | * over to the returned request.
|
---|
106 | *
|
---|
107 | * You can opt-in to preserving the original state of the Host header by
|
---|
108 | * setting `$preserveHost` to `true`. When `$preserveHost` is set to
|
---|
109 | * `true`, this method interacts with the Host header in the following ways:
|
---|
110 | *
|
---|
111 | * - If the Host header is missing or empty, and the new URI contains
|
---|
112 | * a host component, this method MUST update the Host header in the returned
|
---|
113 | * request.
|
---|
114 | * - If the Host header is missing or empty, and the new URI does not contain a
|
---|
115 | * host component, this method MUST NOT update the Host header in the returned
|
---|
116 | * request.
|
---|
117 | * - If a Host header is present and non-empty, this method MUST NOT update
|
---|
118 | * the Host header in the returned request.
|
---|
119 | *
|
---|
120 | * This method MUST be implemented in such a way as to retain the
|
---|
121 | * immutability of the message, and MUST return an instance that has the
|
---|
122 | * new UriInterface instance.
|
---|
123 | *
|
---|
124 | * @link http://tools.ietf.org/html/rfc3986#section-4.3
|
---|
125 | * @param UriInterface $uri New request URI to use.
|
---|
126 | * @param bool $preserveHost Preserve the original state of the Host header.
|
---|
127 | * @return static
|
---|
128 | */
|
---|
129 | public function withUri(UriInterface $uri, bool $preserveHost = false): RequestInterface;
|
---|
130 | }
|
---|