Nedávno jsem vytvořil API pomocí Laravel pro miniprojekt, na kterém jsme pracovali s několika přáteli. Rozhodl jsem se vytvořit další API, ale místo toho s Lumenem, protože je to mnohem lehčí a rychlejší framework než Laravel.
Lumen je mikroframework postavený nad základními komponentami Laravelu. Lumen využívá mnoho známých konceptů z Laravelu, jako je Eloquent, caching, routing, middleware a jeho kontejner služeb. Jednou z hlavních výhod Lumenu je jeho rychlost, v důsledku čehož je framework navržen pro budování rychlých mikroslužeb nebo API.
Ačkoli se tento tutoriál zabývá Lumenem, k jeho sledování vám postačí jednoduchá znalost fungování Laravelu.
Lumen můžete nastavit několika způsoby lokálně. Pro účely tohoto tutoriálu tak budeme činit prostřednictvím composer
. Další způsoby nastavení aplikace Lumen si můžete prohlédnout zde.
Z terminálu spusťte příkaz: composer create-project — prefer-dist laravel/lumen lumen_api
Tím se vám Lumen a všechny jeho závislosti nainstalují do adresáře lumen_api
. Dále přejmenujeme soubor .env.example
umístěný v adresáři root
na .env
Výchozí ovladač cache
Lumen ve verzi 5.4 je memcached,
, ale ten pro tento návod nebudeme potřebovat. Podporován je však kterýkoli z následujících adresářů: array
database
a redis
. Upravte soubor .env
a nahraďte výchozí hodnoty CACHE_DRIVER
a QUEUE_DRIVER
následujícími:
CACHE_DRIVER=array
QUEUE_DRIVER=database
Pro lokální obsluhu našeho projektu můžeme využít integrovaný server PHP spuštěním následujícího příkazu:php -S localhost:8000 -t public
Navštivte localhost:8000
v prohlížeči a měli byste vidět následující stránku.
Co budeme budovat
Budeme budovat jednoduché rozhraní REST API, které zpracovává úlohy vytváření, čtení, aktualizace a mazání pro product resource
. Podívejme se na náš endpoints
- GET /products – Získání všech zdrojů produktů
- POST /products- Vytvoření nového zdroje produktu
- GET /product/{id} – Získání zdroje produktu podle id
- PUT /product/{id} – Aktualizace zdroje produktu podle id
- DELETE /product/{id}-. Odstranění zdroje produktu podle id
Databáze a migrace
Vytvořme náš migrační soubor. Spusťte následující příkaz:php artisan make:migration create_products_table
Tím vytvoříte nový migrační soubor v adresáři database/migrations
. Náš product resource
bude mít následující atributy: name
, price
a description
.
Do nově vytvořeného migračního souboru přidejte následující kód.
Upravte .env
se svými database
konfiguracemi a poté spusťte následující příkaz pro spuštění migrace. php artisan migrate
Vytvoření našeho produktového modelu
Možná jste již zvyklí vytvářet models
a controllers
pomocí příkazů artisan
v Laravelu, ale Lumen bohužel tyto příkazy nepodporuje. Chcete-li zobrazit seznam dostupných příkazů artisan
v Lumen, spusťte:php artisan
Přejděte do adresáře app
a vytvořte nový model
s názvem Product.php
Na rozdíl od Laravelu Lumen zpočátku nenačítá Eloquent a Facades. Abychom je mohli používat, musíme odkomentovat následující řádky kódu umístěné v adresáři app\bootstrap.php
$app->withFacades();
$app->withEloquent();
Metody kontroléru
Vytvořme náš controller
. Přejděte do adresáře app\Http\Controller
a vytvořte soubor ProductController.php
. Do právě vytvořeného controller
přidejte následující kód.
-
index
Metoda vrátí všechny dostupné produkty jako odpověďJSON
. -
create
Metoda vytvoří novýproduct
a vrátí nově vytvořenýproduct
jako odpověďJSON
. -
show
Metoda vrátí jeden zdroj produktu podle jehoid
. Ten je také vrácen jako odpověďJSON
. -
update
metoda aktualizuje jeden produktový zdroj také podle jehoid
. -
delete
metoda odstraní produktový zdroj podle jehoid
a vrátí zprávusuccess
.
Routes
Je čas konečně přidat náš routes
. Otevřete soubor web.php
ve složce routes
a přidejte následující kód:
Definujeme skupinu našich routes
a přidáme prefix
api/v1
, protože je to společný parametr sdílený všemi našimi URIs
Tipy: Než začneme testovat naše
endpoints
, vytvoříme si nějaká vzorová data, se kterými budeme pracovat, využijeme předponu Prefix pro zadání společných parametrů pro seskupené trasy
Zadání naší databáze
. Začněme vytvořením našeho seed
. Spusťte:php artisan make:seed ProductsTableSeeder
Tím se vytvoří soubor ProductsTableSeeder.php
v adresáři database/seeds
. Upravte soubor následujícím kódem:
Dále upravte soubor DatabaseSeeder.php
v adresáři database\seeds
následujícím kódem:
K vygenerování vzorových dat budeme využívat model Factory a knihovnu Faker společnosti Laravel. Přejděte do adresáře database\factories
a do souboru ModelFactory.php
přidejte následující kód.
Dále spusťte:php artisan db:seed
Tím se nám v našem database
vytvoří hromada ukázkových dat.
Testování našeho API
K testování našeho API budeme využívat Postman. Více informací o tom, jak začít pracovat s Postmanem, si můžete přečíst zde.