Vytvoření REST API pomocí Lumen

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č cacheLumen 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 databasekonfiguracemi 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 jeho id. Ten je také vrácen jako odpověď JSON.
  • update metoda aktualizuje jeden produktový zdroj také podle jeho id.
  • delete metoda odstraní produktový zdroj podle jeho id a vrátí zprávu success.

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.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.