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 database
konfiguracjami, 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 nowyproduct
i zwraca nowo utworzonyproduct
jako odpowiedźJSON
. -
show
metoda zwraca pojedynczy zasób produktu przez jegoid
. Jest to również zwracane jako odpowiedźJSON
. -
update
metoda aktualizuje pojedynczy zasób produktu również przez jegoid
. -
delete
metoda usuwa zasób produktu przez jegoid
i zwraca komunikatsuccess
.
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.