psr-7 http messages

40
PSR-7 Tobias Nyholm

Upload: tobias-nyholm

Post on 09-Jan-2017

545 views

Category:

Internet


1 download

TRANSCRIPT

Page 1: PSR-7 HTTP Messages

PSR-7Tobias Nyholm

Page 2: PSR-7 HTTP Messages

PHP 7

Page 3: PSR-7 HTTP Messages

PSR-7 from PHP-FIG

Page 4: PSR-7 HTTP Messages

PHP-Fig

Page 5: PSR-7 HTTP Messages

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

PSR-8

Page 7: PSR-7 HTTP Messages

About me• Tobias Nyholm, @tobiasnyholm

• Happyr.com

• Certified Symfony developer

• Your organizer

Page 8: PSR-7 HTTP Messages

PSR-7

Standard interfaces for HTTP messages

Page 9: PSR-7 HTTP Messages

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
Page 11: PSR-7 HTTP Messages

GET /startpage HTTP/1.1 Host: xkcd.com Accept: text/html User-Agent: Mozilla/5.0 (Macintosh)

Page 12: PSR-7 HTTP Messages

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

In PHP

Page 14: PSR-7 HTTP Messages

The interfaces• MessageInterface • ResponseInterface • RequestInterface • ServerRequestInterface • UriInterface • StreamInterface • UploadedFileInterface

Page 15: PSR-7 HTTP Messages
Page 16: PSR-7 HTTP Messages

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

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

Getting headers

Page 19: PSR-7 HTTP Messages

PSR-7 objects are immutable

Page 20: PSR-7 HTTP Messages

Mutable vs immutable

• Mutable - edit

• Immutable - read only

Page 21: PSR-7 HTTP Messages

No settersRequestInterfacewithMethod withRequestTarget withUri

withProtocolVersion withHeader withAddedHeader withoutHeader withBody

ResponseInterfacewithStatus

withProtocolVersion withHeader withAddedHeader withoutHeader withBody

Page 22: PSR-7 HTTP Messages

DateTime is mutable

Page 23: PSR-7 HTTP Messages
Page 24: PSR-7 HTTP Messages

Don’t do this

Page 25: PSR-7 HTTP Messages

With*

Page 26: PSR-7 HTTP Messages

Streams

Page 27: PSR-7 HTTP Messages

StreamsStreamInterface__toString isReadable isSeekable isWriteable getSize read write seek rewind close …

Use it as it was a string

Page 28: PSR-7 HTTP Messages
Page 29: PSR-7 HTTP Messages

Middleware

Page 30: PSR-7 HTTP Messages
Page 31: PSR-7 HTTP Messages

Add header to all responses

Page 32: PSR-7 HTTP Messages
Page 33: PSR-7 HTTP Messages

Adapters

Page 34: PSR-7 HTTP Messages
Page 35: PSR-7 HTTP Messages

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

Composer.json

Page 37: PSR-7 HTTP Messages
Page 38: PSR-7 HTTP Messages

Start using it

Page 39: PSR-7 HTTP Messages
Page 40: PSR-7 HTTP Messages

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