Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Zend Expressive

Zend Expressive

PSR framework který vás dostane. Microframework s plnou podporou standardu PSR, který je velmi jednoduchý a zároveň dokonalý. Přidá i pár tipů pro validaci příchozích requestů, end-to-end testování bez nutnosti poslat HTTP request a ukázku, jak je možné integrovat Expressive do existující aplikace a využít její modelovou vrstvu.

Jan Kaderabek

February 20, 2019
Tweet

More Decks by Jan Kaderabek

Other Decks in Programming

Transcript

  1. PSR-7: HTTP message interfaces FB facebook.com/peckadesign TW peckadesign Zend Expressive

    Jan Kadeřábek • abstrakce nad HTTP zprávami • sada interfaců v Psr\Http\Message • https://www.php-fig.org/psr/psr-7/
  2. PSR-15: HTTP Server Request Handlers FB facebook.com/peckadesign TW @peckadesign Zend

    Expressive Jan Kadeřábek • Rozšiřuje PSR-7 • Zavádí: • HTTP server request handler • HTTP server middleware • https://www.php-fig.org/psr/psr-15/
  3. PSR-15: Request Handlers • Zpracovává předaný request • Vždy vrací

    response nebo vyhodí výjimku • Psr\Http\Server\RequestHandlerInterface FB facebook.com/peckadesign TW peckadesign Zend Expressive Jan Kadeřábek
  4. PSR-15: Middleware • Zpracovává příchozí request a buď: •Vrátí response

    •Deleguje zpracování na další vrstvu • Psr\Http\Server\MiddlewareInterface FB facebook.com/peckadesign TW peckadesign Zend Expressive Jan Kadeřábek
  5. PSR-15: Generating response FB facebook.com/peckadesign TW peckadesign Zend Expressive Jan

    Kadeřábek • Každý handler nebo middleware který generuje odpověd by měl sestavit instanci ResponseInterface nebo továrnu, která je shopna ji vytvořit
  6. PSR-15: Handling exceptions FB facebook.com/peckadesign TW peckadesign Zend Expressive Jan

    Kadeřábek • Existuje komponenta (middleware), která chytá výjimky a převádí je na response • Obaluje veškerý proces v aplikaci
  7. Zend Expressive FB facebook.com/peckadesign TW @peckadesign Zend Expressive Jan Kadeřábek

    • Minimalistický PSR-15 PHP framework • Umí nic a zároveň vše • Snadno konfigurovatelný • Průhledná a jednoduchá implementace • https://docs.zendframework.com/zend-expressive/
  8. Routing • Expressive nenabízí žádný defaultní router • Pouze adaptéry

    integrující nějakou implementace routeru • Aura.Router • FastRoute • zend-mvc Router • Zend\Expressive\Router\RouterInterface • integrujte si svůj vlastní router FB facebook.com/peckadesign TW peckadesign Zend Expressive Jan Kadeřábek
  9. Dependency injection • Expressive nenabízí žádný defaultní DI container •

    PSR-11 •Psr\Container\ContainerInterface • Opět tři základní balíčky •zend-servicemanager •pimple-interop •aura.di FB facebook.com/peckadesign TW peckadesign Zend Expressive Jan Kadeřábek
  10. Templating • Expressive nenabízí žádný defaultní templatovací engine • Vhodné

    na API •Vracím pouze \Zend\Diactoros\Response\JsonResponse • Šablony použiju jenom když potřebuju •Zend\Expressive\Template\TemplateRendererInterface • Handlery a middleware nejsou závislé na konkrétním enginu FB facebook.com/peckadesign TW peckadesign Zend Expressive Jan Kadeřábek
  11. Error handling • Vyhazovat výjimky a mít vrstvu která je

    bude odchytávat • Upravený PHP error_reporting • Zend\Stratigility\Middleware\ErrorHandler • Whoops error handler pro vývoj • Detailní informace o chybě jako v Tracy • Možnost konfigurace výstup (HTML, JSON) FB facebook.com/peckadesign TW peckadesign Zend Expressive Jan Kadeřábek
  12. Co nám to umožňuje? FB facebook.com/peckadesign TW @peckadesign Zend Expressive

    Jan Kadeřábek • Vytvořit pěknou validaci a mapování requestů • Možnost si snadno sestavit aplikaci pro: •Jednoduché E2E testování •Integraci do existující aplikace
  13. Validace příchozích requestů FB facebook.com/peckadesign TW @peckadesign Zend Expressive Jan

    Kadeřábek • Kontrolovat data v requestu • Standardizovaná odpověd API v případě chyby • Mapovat data na pěkné DTO
  14. Mapování přímo z routeru? FB facebook.com/peckadesign TW @peckadesign Zend Expressive

    Jan Kadeřábek • V definici routy určit mapovaný objekt • Handler nebo middleware už by dostal rovnou objekt requestu
  15. Testování FB facebook.com/peckadesign TW @peckadesign Zend Expressive Jan Kadeřábek •

    Unit testy na handlery • E2E testy •Spuštění celé aplikace bez posílání HTTP requestů díky PSR-7 abstrakci
  16. E2E testy • Poslat HTTP request a kontrolovat response •

    Testuje navíc: •zadefinované routy •sestavení aplikace •správně předané závislosti •kombinaci jednotlivých komponent FB facebook.com/peckadesign TW peckadesign Zend Expressive Jan Kadeřábek
  17. E2E testy bez HTTP protokolu • Využijeme abstrakce PSR-7 •

    PHPUnit • Sestavíme aplikaci (instance Application) •Předáme instanci ServerRequestInterface •Spustíme aplikaci •Zkontrolujeme vytvořenou instanci ResponseInterface FB facebook.com/peckadesign TW peckadesign Zend Expressive Jan Kadeřábek
  18. Zamyšlení na závěr FB facebook.com/peckadesign TW @peckadesign Zend Expressive Jan

    Kadeřábek • Soustředím se pouze na jeden oddělený problém •Ostatní deleguji dál • Framework je pouze obálka, která drží pohromadě jednotlivé komponenty •Dispatcher handlerů • Je MVC přežitek?
  19. FB facebook.com/peckadesign TW @peckadesign Děkuji za pozornost Zend Expressive Jan

    Kadeřábek https://github.com/jankaderabek/expressive-playground