psr-7 - http message interfaces
TRANSCRIPT
![Page 1: PSR-7 - HTTP message interfaces](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a0f2261a28abad6d8b6c13/html5/thumbnails/1.jpg)
tekst
PSR-7 - HTTP message interfacesPaweł Skotnicki
![Page 2: PSR-7 - HTTP message interfaces](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a0f2261a28abad6d8b6c13/html5/thumbnails/2.jpg)
About me
PHP developer @ The Software House
PHPers Silesia co-organizer
BDD/DDD enthusiast
![Page 3: PSR-7 - HTTP message interfaces](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a0f2261a28abad6d8b6c13/html5/thumbnails/3.jpg)
PHP-FIG ?
![Page 4: PSR-7 - HTTP message interfaces](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a0f2261a28abad6d8b6c13/html5/thumbnails/4.jpg)
PHP Framework Interop Group ?
![Page 5: PSR-7 - HTTP message interfaces](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a0f2261a28abad6d8b6c13/html5/thumbnails/5.jpg)
PHP Standard Recommendation ?
![Page 6: PSR-7 - HTTP message interfaces](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a0f2261a28abad6d8b6c13/html5/thumbnails/6.jpg)
PSR ?
![Page 7: PSR-7 - HTTP message interfaces](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a0f2261a28abad6d8b6c13/html5/thumbnails/7.jpg)
PHP-FIG
PHP Framework Interop Group
40+ members
PSR
![Page 8: PSR-7 - HTTP message interfaces](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a0f2261a28abad6d8b6c13/html5/thumbnails/8.jpg)
PSR-0 Autoloading Standard
![Page 9: PSR-7 - HTTP message interfaces](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a0f2261a28abad6d8b6c13/html5/thumbnails/9.jpg)
PSR-1 Basic Coding Standard
![Page 10: PSR-7 - HTTP message interfaces](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a0f2261a28abad6d8b6c13/html5/thumbnails/10.jpg)
PSR-2 Coding Style Guide
![Page 11: PSR-7 - HTTP message interfaces](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a0f2261a28abad6d8b6c13/html5/thumbnails/11.jpg)
PSR-3 Logger Interface
![Page 12: PSR-7 - HTTP message interfaces](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a0f2261a28abad6d8b6c13/html5/thumbnails/12.jpg)
PSR-4 Autoloading Standard
![Page 13: PSR-7 - HTTP message interfaces](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a0f2261a28abad6d8b6c13/html5/thumbnails/13.jpg)
PSR-5 PHPDoc Standard(Draft)
![Page 14: PSR-7 - HTTP message interfaces](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a0f2261a28abad6d8b6c13/html5/thumbnails/14.jpg)
PSR-6 Caching Interface(Review)
![Page 15: PSR-7 - HTTP message interfaces](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a0f2261a28abad6d8b6c13/html5/thumbnails/15.jpg)
PSR-7 HTTP message interfaces
![Page 16: PSR-7 - HTTP message interfaces](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a0f2261a28abad6d8b6c13/html5/thumbnails/16.jpg)
HTTP request
POST /path HTTP/1.1Host: example.com
foo=bar&baz=bat
![Page 17: PSR-7 - HTTP message interfaces](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a0f2261a28abad6d8b6c13/html5/thumbnails/17.jpg)
HTTP response
HTTP/1.1 200 OKContent-Type: text/plain
This is the response body
![Page 18: PSR-7 - HTTP message interfaces](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a0f2261a28abad6d8b6c13/html5/thumbnails/18.jpg)
PSR-7
http://www.php-fig.org/psr/psr-7/
https://github.com/php-fig/http-message
composer require psr/http-message
namespace Psr\Http\Message
![Page 19: PSR-7 - HTTP message interfaces](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a0f2261a28abad6d8b6c13/html5/thumbnails/19.jpg)
Psr\Http\MessageMessageInterface
ResponseInterface
RequestInterface
ServerRequestInterface
UriInterface
StreamInterface
UploadedFileInterface
![Page 20: PSR-7 - HTTP message interfaces](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a0f2261a28abad6d8b6c13/html5/thumbnails/20.jpg)
MessageInterface
immutable value objects
protocol version
headers
body
![Page 21: PSR-7 - HTTP message interfaces](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a0f2261a28abad6d8b6c13/html5/thumbnails/21.jpg)
HTTP Message Headers$message->getHeader('Accept'); //array$message->getHeaderLine('Accept'); //string$message->hasHeader('Accept'); //boolean
/* ['Header’ => ['value1', 'value2']]*/$message->getHeaders();
![Page 22: PSR-7 - HTTP message interfaces](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a0f2261a28abad6d8b6c13/html5/thumbnails/22.jpg)
HTTP Message Headers$message = $message->withHeader('X-Foo', 'bar');$message = $message->withAddedHeader( 'X-Foo', 'baz' );
$message = $message->withoutHeader('X-Foo');
![Page 23: PSR-7 - HTTP message interfaces](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a0f2261a28abad6d8b6c13/html5/thumbnails/23.jpg)
HTTP Message Body
StreamInterface
may be mutable !
![Page 24: PSR-7 - HTTP message interfaces](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a0f2261a28abad6d8b6c13/html5/thumbnails/24.jpg)
ResponseInterface
$response->getStatusCode();$response->getReasonPhrase();
$response = $response->withStatus(200, 'OK');
![Page 25: PSR-7 - HTTP message interfaces](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a0f2261a28abad6d8b6c13/html5/thumbnails/25.jpg)
RequestInterface
method
request-target
uri
UriInterface
![Page 26: PSR-7 - HTTP message interfaces](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a0f2261a28abad6d8b6c13/html5/thumbnails/26.jpg)
request-target
origin-form
absolute-form
authority-form
asterisk-form
![Page 27: PSR-7 - HTTP message interfaces](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a0f2261a28abad6d8b6c13/html5/thumbnails/27.jpg)
RequestInterface
<get/with>Method
<get/with>RequestTarget
<get/with>Uri
![Page 28: PSR-7 - HTTP message interfaces](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a0f2261a28abad6d8b6c13/html5/thumbnails/28.jpg)
ServerRequestInterfacegetServerParams ($_SERVER)
<get/with>CookieParams ($_COOKIE)
<get/with>QueryParams ($_GET)
<get/with>UploadedFiles ($_FILES)
<get/with>ParsedBody ($_POST)
attributes
![Page 29: PSR-7 - HTTP message interfaces](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a0f2261a28abad6d8b6c13/html5/thumbnails/29.jpg)
Uploaded Files
UploadedFileInterface
getStream() // StreamInterface
moveTo()
size, error, client filename, client media type
getUploadedFiles() - normalized structure
![Page 30: PSR-7 - HTTP message interfaces](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a0f2261a28abad6d8b6c13/html5/thumbnails/30.jpg)
Single file upload
<input type="file" name="avatar" />
![Page 31: PSR-7 - HTTP message interfaces](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a0f2261a28abad6d8b6c13/html5/thumbnails/31.jpg)
$_FILES[ 'avatar' => [ 'tmp_name' => 'phpUxcOty', 'name' => 'my-avatar.png', 'size' => 90996, 'type' => 'image/png', 'error' => 0, ],]
![Page 32: PSR-7 - HTTP message interfaces](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a0f2261a28abad6d8b6c13/html5/thumbnails/32.jpg)
getUploadedFiles()
[ 'avatar' => /* UploadedFileInterface instance */]
![Page 33: PSR-7 - HTTP message interfaces](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a0f2261a28abad6d8b6c13/html5/thumbnails/33.jpg)
Multiple files upload
<input type="file" "name="my-form[avatars][]" /><input type="file" "name="my-form[avatars][]" />
![Page 34: PSR-7 - HTTP message interfaces](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a0f2261a28abad6d8b6c13/html5/thumbnails/34.jpg)
$_FILES[ 'my-form' => [ 'avatars' => [ 'tmp_name' => [ 0 => '...', 1 => '...', ], 'name' => […], 'size' => […], 'type' => […], 'error' => […], ], ],]
![Page 35: PSR-7 - HTTP message interfaces](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a0f2261a28abad6d8b6c13/html5/thumbnails/35.jpg)
getUploadedFiles()
[ 'my-form' => [ 'avatars' => [ 0 => /* UploadedFileInterface instance */, 1 => /* UploadedFileInterface instance */, ], ],]
![Page 36: PSR-7 - HTTP message interfaces](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a0f2261a28abad6d8b6c13/html5/thumbnails/36.jpg)
Use cases
Clients
unified request and response interfaces
Middleware
Frameworks
![Page 37: PSR-7 - HTTP message interfaces](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a0f2261a28abad6d8b6c13/html5/thumbnails/37.jpg)
![Page 38: PSR-7 - HTTP message interfaces](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a0f2261a28abad6d8b6c13/html5/thumbnails/38.jpg)
Who ?
Guzzle, PHP HTTP client
Zend Diactoros, PSR HTTP Message implementation
PSR HTTP Message Bridge (Symfony 2)
Relay, PSR-7 middleware dispatcher
Aura Router
![Page 39: PSR-7 - HTTP message interfaces](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a0f2261a28abad6d8b6c13/html5/thumbnails/39.jpg)
Questions?
![Page 40: PSR-7 - HTTP message interfaces](https://reader034.vdocuments.mx/reader034/viewer/2022042722/58a0f2261a28abad6d8b6c13/html5/thumbnails/40.jpg)
Thank you