Transcript
Page 1: PSR-7 - HTTP message interfaces

tekst

PSR-7 - HTTP message interfacesPaweł Skotnicki

Page 2: PSR-7 - HTTP message interfaces

About me

PHP developer @ The Software House

PHPers Silesia co-organizer

BDD/DDD enthusiast

Page 3: PSR-7 - HTTP message interfaces

PHP-FIG ?

Page 4: PSR-7 - HTTP message interfaces

PHP Framework Interop Group ?

Page 5: PSR-7 - HTTP message interfaces

PHP Standard Recommendation ?

Page 6: PSR-7 - HTTP message interfaces

PSR ?

Page 7: PSR-7 - HTTP message interfaces

PHP-FIG

PHP Framework Interop Group

40+ members

PSR

Page 8: PSR-7 - HTTP message interfaces

PSR-0 Autoloading Standard

Page 9: PSR-7 - HTTP message interfaces

PSR-1 Basic Coding Standard

Page 10: PSR-7 - HTTP message interfaces

PSR-2 Coding Style Guide

Page 11: PSR-7 - HTTP message interfaces

PSR-3 Logger Interface

Page 12: PSR-7 - HTTP message interfaces

PSR-4 Autoloading Standard

Page 13: PSR-7 - HTTP message interfaces

PSR-5 PHPDoc Standard(Draft)

Page 14: PSR-7 - HTTP message interfaces

PSR-6 Caching Interface(Review)

Page 15: PSR-7 - HTTP message interfaces

PSR-7 HTTP message interfaces

Page 16: PSR-7 - HTTP message interfaces

HTTP request

POST /path HTTP/1.1Host: example.com

foo=bar&baz=bat

Page 17: PSR-7 - HTTP message interfaces

HTTP response

HTTP/1.1 200 OKContent-Type: text/plain

This is the response body

Page 18: PSR-7 - HTTP message interfaces

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

Psr\Http\MessageMessageInterface

ResponseInterface

RequestInterface

ServerRequestInterface

UriInterface

StreamInterface

UploadedFileInterface

Page 20: PSR-7 - HTTP message interfaces

MessageInterface

immutable value objects

protocol version

headers

body

Page 21: PSR-7 - HTTP message interfaces

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

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

HTTP Message Body

StreamInterface

may be mutable !

Page 24: PSR-7 - HTTP message interfaces

ResponseInterface

$response->getStatusCode();$response->getReasonPhrase();

$response = $response->withStatus(200, 'OK');

Page 25: PSR-7 - HTTP message interfaces

RequestInterface

method

request-target

uri

UriInterface

Page 26: PSR-7 - HTTP message interfaces

request-target

origin-form

absolute-form

authority-form

asterisk-form

Page 27: PSR-7 - HTTP message interfaces

RequestInterface

<get/with>Method

<get/with>RequestTarget

<get/with>Uri

Page 28: PSR-7 - HTTP message interfaces

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

Uploaded Files

UploadedFileInterface

getStream() // StreamInterface

moveTo()

size, error, client filename, client media type

getUploadedFiles() - normalized structure

Page 30: PSR-7 - HTTP message interfaces

Single file upload

<input type="file" name="avatar" />

Page 31: PSR-7 - HTTP message interfaces

$_FILES[    'avatar' => [        'tmp_name' => 'phpUxcOty',        'name' => 'my-avatar.png',        'size' => 90996,        'type' => 'image/png',        'error' => 0,    ],]

Page 32: PSR-7 - HTTP message interfaces

getUploadedFiles()

[    'avatar' => /* UploadedFileInterface instance */]

Page 33: PSR-7 - HTTP message interfaces

Multiple files upload

<input type="file" "name="my-form[avatars][]" /><input type="file" "name="my-form[avatars][]" />

Page 34: PSR-7 - HTTP message interfaces

$_FILES[    'my-form' => [        'avatars' => [            'tmp_name' => [                0 => '...',                1 => '...',            ],            'name' => […],            'size' => […],            'type' => […],            'error' => […],        ],    ],]

Page 35: PSR-7 - HTTP message interfaces

getUploadedFiles()

[    'my-form' => [        'avatars' => [            0 => /* UploadedFileInterface instance */,            1 => /* UploadedFileInterface instance */,        ],    ],]

Page 36: PSR-7 - HTTP message interfaces

Use cases

Clients

unified request and response interfaces

Middleware

Frameworks

Page 37: PSR-7 - HTTP message interfaces
Page 38: PSR-7 - HTTP message interfaces

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

Questions?

Page 40: PSR-7 - HTTP message interfaces

Thank you


Top Related