Budując REST API z Lumen

Ostatnio stworzyłem API z Laravel dla mini-projektu, nad którym pracowaliśmy z kilkoma przyjaciółmi. Postanowiłem zbudować kolejne API, ale z użyciem Lumen, ponieważ jest to znacznie lżejszy i szybszy framework niż Laravel.

Lumen jest mikro-framework zbudowanym na szczycie głównych komponentów Laravel. Lumen wykorzystuje wiele znanych koncepcji z Laravela, takich jak Eloquent, cache, routing, middleware i kontener usług. Jedną z głównych zalet Lumen jest jego szybkość, w rezultacie framework jest przeznaczony do budowania szybkich mikrousług lub API.

Chociaż ten tutorial jest o Lumen, proste zrozumienie jak działa Laravel jest wszystkim czego potrzebujesz, aby podążać za nim.

Istnieje kilka sposobów, na które możesz skonfigurować Lumen lokalnie. Na potrzeby tego tutoriala, zrobimy to za pomocą composer. Możesz sprawdzić inne sposoby na skonfigurowanie Lumen tutaj.
W swoim terminalu, uruchom:
composer create-project — prefer-dist laravel/lumen lumen_api
To zainstaluje dla ciebie Lumen i wszystkie jego zależności w katalogu lumen_api . Następnie zmienimy nazwę pliku.env.example znajdującego się w katalogu root na .env

Domyślnym cache sterownikiem Lumena w wersji 5.4 jest memcached,, ale nie będziemy go potrzebować w tym tutorialu. Jednak każdy z poniższych, array database i redis jest obsługiwany. Edytuj plik .env i zastąp domyślne wartości CACHE_DRIVER i QUEUE_DRIVER następującymi wartościami:

CACHE_DRIVER=array
QUEUE_DRIVER=database

Aby obsłużyć nasz projekt lokalnie, możemy skorzystać z wbudowanego serwera PHP, uruchamiając następującą komendę:
php -S localhost:8000 -t public

Witaj localhost:8000 w przeglądarce i powinieneś zobaczyć następującą stronę.

Co będziemy budować

Będziemy budować proste REST API, które obsługuje zadania tworzenia, odczytu, aktualizacji i usuwania dla product resource . Spójrzmy na nasz endpoints

  • GET /products – Pobiera wszystkie zasoby produktowe
  • POST /products- Tworzy nowy zasób produktowy
  • GET /product/{id} – Pobiera zasób produktowy według id
  • PUT /product/{id} – Aktualizuje zasób produktowy według id
  • DELETE /product/{id}-. Delete a product resource by id

Database and Migrations
Utwórzmy nasz plik migracyjny. Uruchom następujące polecenie:
php artisan make:migration create_products_table

To utworzy dla Ciebie nowy plik migracyjny w katalogu database/migrations. Nasz product resource będzie posiadał następujące atrybuty, name, price i description.

Dodaj następujący kod do nowo utworzonego pliku migracji.

Edytuj .env ze swoimi databasekonfiguracjami, a następnie uruchom następujące polecenie, aby wykonać migrację.
php artisan migrate

Tworzenie naszego Modelu Produktu
Możesz być już przyzwyczajony do tworzenia models i controllers za pomocą komend artisan w Laravel, ale niestety Lumen nie obsługuje tych komend. Aby zobaczyć listę dostępnych poleceń artisan w Lumen, uruchom:
php artisan

Przejdź do katalogu app i utwórz nowy model o nazwie Product.php

W przeciwieństwie do Laravela, Lumen nie ładuje początkowo Eloquent i Facades. Aby móc z nich korzystać, musimy odkomentować następujące linie kodu znajdujące się w app\bootstrap.php
$app->withFacades();

$app->withEloquent();

Controller Methods

Twórzmy nasz controller. Przejdź do katalogu app\Http\Controller i utwórz plik ProductController.php. Dodaj następujący kod do controller, który właśnie utworzyłeś.

  • index metoda zwraca wszystkie dostępne produkty jako odpowiedź JSON.
  • create metoda tworzy nowy product i zwraca nowo utworzony product jako odpowiedź JSON.
  • show metoda zwraca pojedynczy zasób produktu przez jego id. Jest to również zwracane jako odpowiedź JSON.
  • update metoda aktualizuje pojedynczy zasób produktu również przez jego id.
  • delete metoda usuwa zasób produktu przez jego id i zwraca komunikat success.

Routes

Czas w końcu dodać nasz routes. Otwórz plik web.php w folderze routes i dodaj następujący kod:

Zdefiniujemy grupę naszych routes i dodamy prefix api/v1, ponieważ jest to wspólny parametr dzielony przez wszystkie nasze URIs

Wskazówka: Make use of Prefix to specify common parameters for your grouped routes

Seeding our Database

Zanim zaczniemy testować nasze endpoints, stwórzmy kilka przykładowych danych do pracy. Zacznijmy od utworzenia naszej seed. Uruchom:
php artisan make:seed ProductsTableSeeder
Tworzy to plik ProductsTableSeeder.php w katalogu database/seeds. Edytuj plik za pomocą następującego kodu:

Następnie edytuj plik DatabaseSeeder.php w katalogu database\seeds za pomocą następującego kodu:
Będziemy korzystać z Laravel’s Model Factory i biblioteki Faker do generowania przykładowych danych. Przejdź do katalogu database\factories i dodaj następujący kod do pliku ModelFactory.php.

Następnie, uruchom:
php artisan db:seed

To utworzy dla nas garść pozornych danych w naszym database.

Testowanie naszego API

Będziemy używać Postmana do testowania naszego API. Możesz przeczytać więcej na temat rozpoczęcia pracy z Postmanem tutaj.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.