psr-7 http messages
TRANSCRIPT
![Page 1: PSR-7 HTTP Messages](https://reader030.vdocuments.mx/reader030/viewer/2022021506/5872a25b1a28ab07208b5fcf/html5/thumbnails/1.jpg)
PSR-7Tobias Nyholm
![Page 2: PSR-7 HTTP Messages](https://reader030.vdocuments.mx/reader030/viewer/2022021506/5872a25b1a28ab07208b5fcf/html5/thumbnails/2.jpg)
PHP 7
![Page 3: PSR-7 HTTP Messages](https://reader030.vdocuments.mx/reader030/viewer/2022021506/5872a25b1a28ab07208b5fcf/html5/thumbnails/3.jpg)
PSR-7 from PHP-FIG
![Page 4: PSR-7 HTTP Messages](https://reader030.vdocuments.mx/reader030/viewer/2022021506/5872a25b1a28ab07208b5fcf/html5/thumbnails/4.jpg)
PHP-Fig
![Page 5: PSR-7 HTTP Messages](https://reader030.vdocuments.mx/reader030/viewer/2022021506/5872a25b1a28ab07208b5fcf/html5/thumbnails/5.jpg)
StandardsPSR-0 PSR-1 PSR-2 PSR-3 PSR-4 PSR-5 PSR-6 PSR-7 PSR-8 PSR-9 PSR-10
Autoloading Basic coding standard Coding style Logger Autoloading PHPDoc (draft) Caching (review) HTTP Messages Huggable interface (draft) Security Disclosure (draft) Security Advisories (draft)
![Page 6: PSR-7 HTTP Messages](https://reader030.vdocuments.mx/reader030/viewer/2022021506/5872a25b1a28ab07208b5fcf/html5/thumbnails/6.jpg)
PSR-8
![Page 7: PSR-7 HTTP Messages](https://reader030.vdocuments.mx/reader030/viewer/2022021506/5872a25b1a28ab07208b5fcf/html5/thumbnails/7.jpg)
About me• Tobias Nyholm, @tobiasnyholm
• Happyr.com
• Certified Symfony developer
• Your organizer
![Page 8: PSR-7 HTTP Messages](https://reader030.vdocuments.mx/reader030/viewer/2022021506/5872a25b1a28ab07208b5fcf/html5/thumbnails/8.jpg)
PSR-7
Standard interfaces for HTTP messages
![Page 9: PSR-7 HTTP Messages](https://reader030.vdocuments.mx/reader030/viewer/2022021506/5872a25b1a28ab07208b5fcf/html5/thumbnails/9.jpg)
Why do we need PSR-7?We could write framework agnostic code like: • Routers • Controllers • Cache • Logging • Authentication • etc…
![Page 10: PSR-7 HTTP Messages](https://reader030.vdocuments.mx/reader030/viewer/2022021506/5872a25b1a28ab07208b5fcf/html5/thumbnails/10.jpg)
![Page 11: PSR-7 HTTP Messages](https://reader030.vdocuments.mx/reader030/viewer/2022021506/5872a25b1a28ab07208b5fcf/html5/thumbnails/11.jpg)
GET /startpage HTTP/1.1 Host: xkcd.com Accept: text/html User-Agent: Mozilla/5.0 (Macintosh)
![Page 12: PSR-7 HTTP Messages](https://reader030.vdocuments.mx/reader030/viewer/2022021506/5872a25b1a28ab07208b5fcf/html5/thumbnails/12.jpg)
HTTP/1.1 200 OK Date: Sat, 02 Apr 2011 21:05:05 GMT Server: lighttpd/1.4.19 Content-Type: text/html
<html> <!-- ... HTML for the xkcd comic --> </html>
![Page 13: PSR-7 HTTP Messages](https://reader030.vdocuments.mx/reader030/viewer/2022021506/5872a25b1a28ab07208b5fcf/html5/thumbnails/13.jpg)
In PHP
![Page 14: PSR-7 HTTP Messages](https://reader030.vdocuments.mx/reader030/viewer/2022021506/5872a25b1a28ab07208b5fcf/html5/thumbnails/14.jpg)
The interfaces• MessageInterface • ResponseInterface • RequestInterface • ServerRequestInterface • UriInterface • StreamInterface • UploadedFileInterface
![Page 15: PSR-7 HTTP Messages](https://reader030.vdocuments.mx/reader030/viewer/2022021506/5872a25b1a28ab07208b5fcf/html5/thumbnails/15.jpg)
![Page 16: PSR-7 HTTP Messages](https://reader030.vdocuments.mx/reader030/viewer/2022021506/5872a25b1a28ab07208b5fcf/html5/thumbnails/16.jpg)
Client request
POST /send-message HTTP/1.0 Location: www.example.com Content-Type: application/x-www-form-urlencoded Content-Length: 33
from=Tobias&to=all&message=hello
MessageInterface
RequestInterface UriInterface
![Page 17: PSR-7 HTTP Messages](https://reader030.vdocuments.mx/reader030/viewer/2022021506/5872a25b1a28ab07208b5fcf/html5/thumbnails/17.jpg)
What to care about?RequestInterfacegetMethod getRequestTarget getUri
getProtocolVersion getHeaders getHeader hasHeader getBody
ResponseInterfacegetStatusCode getReasonPhrase
getProtocolVersion getHeaders getHeader hasHeader getBody
![Page 18: PSR-7 HTTP Messages](https://reader030.vdocuments.mx/reader030/viewer/2022021506/5872a25b1a28ab07208b5fcf/html5/thumbnails/18.jpg)
Getting headers
![Page 19: PSR-7 HTTP Messages](https://reader030.vdocuments.mx/reader030/viewer/2022021506/5872a25b1a28ab07208b5fcf/html5/thumbnails/19.jpg)
PSR-7 objects are immutable
![Page 20: PSR-7 HTTP Messages](https://reader030.vdocuments.mx/reader030/viewer/2022021506/5872a25b1a28ab07208b5fcf/html5/thumbnails/20.jpg)
Mutable vs immutable
• Mutable - edit
• Immutable - read only
![Page 21: PSR-7 HTTP Messages](https://reader030.vdocuments.mx/reader030/viewer/2022021506/5872a25b1a28ab07208b5fcf/html5/thumbnails/21.jpg)
No settersRequestInterfacewithMethod withRequestTarget withUri
withProtocolVersion withHeader withAddedHeader withoutHeader withBody
ResponseInterfacewithStatus
withProtocolVersion withHeader withAddedHeader withoutHeader withBody
![Page 22: PSR-7 HTTP Messages](https://reader030.vdocuments.mx/reader030/viewer/2022021506/5872a25b1a28ab07208b5fcf/html5/thumbnails/22.jpg)
DateTime is mutable
![Page 23: PSR-7 HTTP Messages](https://reader030.vdocuments.mx/reader030/viewer/2022021506/5872a25b1a28ab07208b5fcf/html5/thumbnails/23.jpg)
![Page 24: PSR-7 HTTP Messages](https://reader030.vdocuments.mx/reader030/viewer/2022021506/5872a25b1a28ab07208b5fcf/html5/thumbnails/24.jpg)
Don’t do this
![Page 25: PSR-7 HTTP Messages](https://reader030.vdocuments.mx/reader030/viewer/2022021506/5872a25b1a28ab07208b5fcf/html5/thumbnails/25.jpg)
With*
![Page 26: PSR-7 HTTP Messages](https://reader030.vdocuments.mx/reader030/viewer/2022021506/5872a25b1a28ab07208b5fcf/html5/thumbnails/26.jpg)
Streams
![Page 27: PSR-7 HTTP Messages](https://reader030.vdocuments.mx/reader030/viewer/2022021506/5872a25b1a28ab07208b5fcf/html5/thumbnails/27.jpg)
StreamsStreamInterface__toString isReadable isSeekable isWriteable getSize read write seek rewind close …
Use it as it was a string
![Page 28: PSR-7 HTTP Messages](https://reader030.vdocuments.mx/reader030/viewer/2022021506/5872a25b1a28ab07208b5fcf/html5/thumbnails/28.jpg)
![Page 29: PSR-7 HTTP Messages](https://reader030.vdocuments.mx/reader030/viewer/2022021506/5872a25b1a28ab07208b5fcf/html5/thumbnails/29.jpg)
Middleware
![Page 30: PSR-7 HTTP Messages](https://reader030.vdocuments.mx/reader030/viewer/2022021506/5872a25b1a28ab07208b5fcf/html5/thumbnails/30.jpg)
![Page 31: PSR-7 HTTP Messages](https://reader030.vdocuments.mx/reader030/viewer/2022021506/5872a25b1a28ab07208b5fcf/html5/thumbnails/31.jpg)
Add header to all responses
![Page 32: PSR-7 HTTP Messages](https://reader030.vdocuments.mx/reader030/viewer/2022021506/5872a25b1a28ab07208b5fcf/html5/thumbnails/32.jpg)
![Page 33: PSR-7 HTTP Messages](https://reader030.vdocuments.mx/reader030/viewer/2022021506/5872a25b1a28ab07208b5fcf/html5/thumbnails/33.jpg)
Adapters
![Page 34: PSR-7 HTTP Messages](https://reader030.vdocuments.mx/reader030/viewer/2022021506/5872a25b1a28ab07208b5fcf/html5/thumbnails/34.jpg)
![Page 35: PSR-7 HTTP Messages](https://reader030.vdocuments.mx/reader030/viewer/2022021506/5872a25b1a28ab07208b5fcf/html5/thumbnails/35.jpg)
All adapters in one place
• PHP-HTTP
• http://php-http.readthedocs.org/en/latest/
• Will replace Ivory(https://github.com/egeloen/ivory-http-adapter)
![Page 36: PSR-7 HTTP Messages](https://reader030.vdocuments.mx/reader030/viewer/2022021506/5872a25b1a28ab07208b5fcf/html5/thumbnails/36.jpg)
Composer.json
![Page 37: PSR-7 HTTP Messages](https://reader030.vdocuments.mx/reader030/viewer/2022021506/5872a25b1a28ab07208b5fcf/html5/thumbnails/37.jpg)
![Page 38: PSR-7 HTTP Messages](https://reader030.vdocuments.mx/reader030/viewer/2022021506/5872a25b1a28ab07208b5fcf/html5/thumbnails/38.jpg)
Start using it
![Page 39: PSR-7 HTTP Messages](https://reader030.vdocuments.mx/reader030/viewer/2022021506/5872a25b1a28ab07208b5fcf/html5/thumbnails/39.jpg)
![Page 40: PSR-7 HTTP Messages](https://reader030.vdocuments.mx/reader030/viewer/2022021506/5872a25b1a28ab07208b5fcf/html5/thumbnails/40.jpg)
Read more at
• http://www.php-fig.org/psr/psr-7/
• https://github.com/php-http
• https://github.com/oscarotero/psr7-middlewares
• https://github.com/Happyr/HttpAutoDiscovery