a revolução dos middlewares
TRANSCRIPT
A Revolução dos Middlewares
Zend Expressive
Ariana Kataoka
@ariskataoka
Paulo Eduardo
@pauloelr
PHPSP
www.phpsp.org.br
Objetivos
Protocolo HTTP
Protocolo HTTP
RequisiçãoPOST /path HTTP/1.1
Host: example.comfoo=bar&baz=bat
Protocolo HTTP
RequisiçãoPOST /path HTTP/1.1
Host: example.comfoo=bar&baz=bat
Processamento
Protocolo HTTP
RequisiçãoPOST /path HTTP/1.1
Host: example.comfoo=bar&baz=bat
Processamento
RespostaHTTP/1.1 200 OK
Content-Type: text/plainThis is the response body
PSR-7
<?php namespace Psr\Http\Message; interface MessageInterface { public function getProtocolVersion(); public function withProtocolVersion($version); public function getHeaders(); public function hasHeader($name); public function getHeader($name); public function getHeaderLine($name); public function withHeader($name, $value); public function withAddedHeader($name, $value); public function withoutHeader($name); public function getBody(); public function withBody(StreamInterface $body); }
PSR-7
<?php namespace Psr\Http\Message; interface RequestInterface extends MessageInterface { public function getRequestTarget(); public function withRequestTarget($requestTarget); public function getMethod(); public function withMethod($method); public function getUri(); public function withUri(UriInterface $uri, $preserveHost = false); }
PSR-7
<?php namespace Psr\Http\Message; interface RequestInterface extends MessageInterface { public function getRequestTarget(); public function withRequestTarget($requestTarget); public function getMethod(); public function withMethod($method); public function getUri(); public function withUri(UriInterface $uri, $preserveHost = false); }
<?php namespace Psr\Http\Message; interface ResponseInterface extends MessageInterface { public function getStatusCode(); public function withStatus($code, $reasonPhrase = ‘’); public function getReasonPhrase(); }
Diactoros
<?php $request = (new Zend\Diactoros\Request()) ->withUri(new Zend\Diactoros\Uri(‘http://example.com’)) ->withMethod(‘PATCH’) ->withAddedHeader(‘Authorization’, ‘Bearer ‘ . $token) ->withAddedHeader(‘Content-Type’, ‘application/json’);
Diactoros
<?php $request = (new Zend\Diactoros\Request()) ->withUri(new Zend\Diactoros\Uri(‘http://example.com’)) ->withMethod(‘PATCH’) ->withAddedHeader(‘Authorization’, ‘Bearer ‘ . $token) ->withAddedHeader(‘Content-Type’, ‘application/json’);
<?php $response = new Zend\Diactoros\Response(); $response->getBody()->write(“some content\n”); $response->getBody()->write(“more content\n”); $response = $response ->withHeader(‘Content-Type’, ‘text/plain’) ->withAddedHeader(‘X-Show-Something’, ‘something’);
Middlewares
Middleware é um código que existe entre a requisição e a resposta, podendo receber uma
requisição e realizar ações baseadas nela, como retornar uma resposta ou delegar para o
próximo middleware na fila.Documentação do Zend Stratigility
(Tradução Livre)
“ ”
Middlewares
Requisição Resposta
Middleware
Middleware
Application
Stratigility
<?php use Zend\Stratigility\MiddlewarePipe; use Zend\Diactoros\Server; require __DIR__ . ‘/../vendor/autoload.php’; $app = new MiddlewarePipe(); $app->pipe(‘/’, function ($req, $res, $next) { if (! in_array($req->getUri()->getPath(), [‘/’, ‘’], true)) { return $next($req, $res); } return $res->end(‘Hello world!’); }); $app->pipe(‘/foo’, function ($req, $res, $next) { return $res->end(‘FOO!’); });
Zend Expressive
O Zend Expressive é desenvolvido com base no Zend Stratigility para prover um framework
minimalista de Middlewares PSR-7 em PHPDocumentação do Zend Stratigility
(Tradução Livre)
“ ”
Zend Expressive
26 de Ago de 2015 - Versão 0.1.0
Zend Expressive
26 de Ago de 2015 - Versão 0.1.0
03 de Set de 2015 - Versão 0.2.0
Zend Expressive
26 de Ago de 2015 - Versão 0.1.0
03 de Set de 2015 - Versão 0.2.0
12 de Set de 2015 - Versão 0.3.0
Zend Expressive
26 de Ago de 2015 - Versão 0.1.0
03 de Set de 2015 - Versão 0.2.0
12 de Set de 2015 - Versão 0.3.0
28 de Jan de 2016 - Versão 1.0
Router
Aura Router
Router
Aura Router
Fast Router
Dependency Injection Container
Aura Router
Fast Router
Zend Router
Router
Aura
Dependency Injection Container
Aura
Pimple
Dependency Injection Container
Aura
Pimple
Zend Service Manager
Template Manager
Plates
Template Manager
Plates
Twig
Template Manager
Plates
Twig
Zend View
Let´s Code
Dúvidas
Obrigado