+ All Categories
Home > Software > Jak děláme REST API na Symfony v Lavito.cz

Jak děláme REST API na Symfony v Lavito.cz

Date post: 21-Jan-2018
Category:
Upload: martin-hujer
View: 333 times
Download: 0 times
Share this document with a friend
19
Jak děláme REST API na Symfony v Lavito.cz Martin Hujer @MartinHujer Symfonisti 27. 6. 2016
Transcript
Page 1: Jak děláme REST API na Symfony v Lavito.cz

Jak děláme REST API na Symfony v Lavito.cz

Martin Hujer

@MartinHujer

Symfonisti 27. 6. 2016

Page 2: Jak děláme REST API na Symfony v Lavito.cz

• REST API na Symfony

• ReactJS frontend

Page 3: Jak děláme REST API na Symfony v Lavito.cz

Program přednášky

• Udělat CRUD na uživatele

• Vylepšit CRUD na uživatele

Page 4: Jak děláme REST API na Symfony v Lavito.cz

Výchozí stav

• Prázdná Symfony aplikace

Page 5: Jak děláme REST API na Symfony v Lavito.cz

FOSRestBundle

• https://github.com/FriendsOfSymfony/FOSRestBundle

> composer require friendsofsymfony/rest-bundle

// AppKernel.php

new FOS\RestBundle\FOSRestBundle(),

Page 6: Jak děláme REST API na Symfony v Lavito.cz

JMSSerializerBundle

• https://github.com/schmittjoh/JMSSerializerBundle

> composer require jms/serializer-bundle

// AppKernel.php

new JMS\SerializerBundle\JMSSerializerBundle(),

Page 7: Jak děláme REST API na Symfony v Lavito.cz

Verzování API

Prefix: /api/v1/

https://www.troyhunt.com/your-api-versioning-is-wrong-which-is/

Page 8: Jak děláme REST API na Symfony v Lavito.cz

Výpis uživatelů

• Dědíme od

FOSRestController

• HTTP metody definujeme v docblocku:

/**

* @Get("/users")

*/

Page 9: Jak děláme REST API na Symfony v Lavito.cz

Detail uživatele

Page 10: Jak děláme REST API na Symfony v Lavito.cz

UserResponseFactory

• Vyhodíme duplicitní kód

• Jde ji sdílet napříč controllery

Page 11: Jak děláme REST API na Symfony v Lavito.cz

deleteUserAction()

• Může vyhodit výjimku

• V API nechceme vrátit HTML chybu

• budeme poslouchat na kernel exception

http://symfony.com/doc/current/cookbook/event_dispatcher/event_listener.html

Page 12: Jak děláme REST API na Symfony v Lavito.cz

UserRequest + deserializace

• http://symfony.com/doc/current/bundles/FOSRestBundle/request_body_converter_listener.html

Page 13: Jak děláme REST API na Symfony v Lavito.cz

Validace UserRequest

• Proč request a ne rovnou entitu?

Page 14: Jak děláme REST API na Symfony v Lavito.cz

Validace lépe?

• Deserializaci a validaci by bylo fajn dělat mimo controller

• Teď používáme to, co nabízí FOSRest + JMS

• Ale není problém napsat svoji deserializaci a validaci, které nespustíaction, pokud data nebudou validní

Page 15: Jak děláme REST API na Symfony v Lavito.cz

Hezčí error handling

Page 16: Jak děláme REST API na Symfony v Lavito.cz

Co dál?

• Nemáme model, skoro všechno je v controlleru• Lepší: https://www.zdrojak.cz/clanky/architektura-aplikace-nad-doctrine-2/

• Není ošetřených spoustu edge case

• Mohli bychom mít controllery a API věci pohromadě• Jen se to musí nastavit (souvisí s controller as a service)

Page 17: Jak děláme REST API na Symfony v Lavito.cz

UUID FTW! 👍

• Autoincrement 👎

• UUID - kompletní entity, unikátní napříč vším

• https://github.com/ramsey/uuid

• https://github.com/ramsey/uuid-doctrine

• https://github.com/mhujer/jms-serializer-uuid

• https://github.com/mhujer/jms-serializer-uuid-bundle

Page 18: Jak děláme REST API na Symfony v Lavito.cz

Zdrojové kódy na Githubu

• https://github.com/mhujer/symfonisti-2016-06-27-api-demo

Page 19: Jak děláme REST API na Symfony v Lavito.cz

Díky za pozornost!

@MartinHujer

www.MartinHujer.cz


Recommended