Am dezvoltat recent un API cu Laravel pentru un mini-proiect la care am lucrat împreună cu câțiva prieteni. Am decis să construiesc un alt API, dar cu Lumen în schimb, deoarece este un framework mult mai ușor și mai rapid decât Laravel.
Lumen este un micro-framework construit pe baza componentelor de bază ale lui Laravel. Lumen utilizează o mulțime de concepte familiare din Laravel, cum ar fi Eloquent, caching, rutare, middleware și containerul său de servicii. Un avantaj major al Lumen este viteza sa, ca urmare cadrul este proiectat pentru construirea de micro-servicii sau API-uri rapide.
Deși acest tutorial este despre Lumen, o simplă înțelegere a modului în care funcționează Laravel este tot ce aveți nevoie pentru a urmări.
Există mai multe moduri în care puteți configura Lumen la nivel local. De dragul acestui tutorial, vom face acest lucru prin composer
. Puteți verifica și alte moduri de a configura Lumen aici.
Din terminalul dumneavoastră, rulați: composer create-project — prefer-dist laravel/lumen lumen_api
Aceasta va instala Lumen și toate dependențele sale pentru dvs. în directorul lumen_api
. În continuare, vom redenumi fișierul.env.example
aflat în directorul root
în .env
Driverul implicit cache
al lui Lumen ca la 5.4 este memcached,
, dar nu vom avea nevoie de el pentru acest tutorial. Cu toate acestea, oricare dintre următoarele, array
database
și redis
sunt acceptate. Editați fișierul .env
și înlocuiți valorile implicite CACHE_DRIVER
și QUEUE_DRIVER
cu următoarele:
CACHE_DRIVER=array
QUEUE_DRIVER=database
Pentru a servi proiectul nostru local, putem folosi serverul încorporat în PHP prin rularea următoarei comenzi:php -S localhost:8000 -t public
Vizitați localhost:8000
în browser și ar trebui să vedeți următoarea pagină.
Ce vom construi
Vom construi un API REST simplu care gestionează sarcinile Create, Read, Update și Delete pentru un product resource
. Să aruncăm o privire la endpoints
- GET /products – Obține toate resursele de produs
- POST /products- Creează o nouă resursă de produs
- GET /product/{id} – Obține o resursă de produs după id
- PUT /product/{id} – Actualizează o resursă de produs după id
- DELETE /product/{id}- Șterge o resursă de produs după id
Bază de date și migrații
Să creăm fișierul nostru de migrare. Rulați următoarea comandă:php artisan make:migration create_products_table
Aceasta va crea un nou fișier de migrare pentru dvs. în directorul database/migrations
. Fișierul nostru product resource
va avea următoarele atribute, name
, price
și description
.
Adaugați următorul cod la fișierul de migrare nou creat.
Editați .env
cu configurațiile dvs. database
și apoi rulați următoarea comandă pentru a executa migrarea. php artisan migrate
Crearea modelului nostru de produs
S-ar putea să fiți deja obișnuiți să creați models
și controllers
prin intermediul comenzilor artisan
în Laravel, dar, din păcate, Lumen nu acceptă aceste comenzi. Pentru a vedea o listă de comenzi artisan
disponibile în Lumen, rulați:php artisan
Navigați în directorul app
și creați un nou model
numit Product.php
În comparație cu Laravel, Lumen nu încarcă inițial Eloquent și Facades. Pentru a le putea utiliza, trebuie să decomentăm următoarele linii de cod situate în app\bootstrap.php
$app->withFacades();
$app->withEloquent();
Controller Methods
Să ne creăm controller
. Navigați în directorul app\Http\Controller
și creați un fișier ProductController.php
. Adăugați următorul cod la controller
pe care tocmai l-ați creat.
-
index
Metodaindex
returnează toate produsele disponibile ca răspunsJSON
. -
create
Metodacreate
creează un nouproduct
și returneazăproduct
nou creat ca răspunsJSON
. -
show
Metodashow
returnează o singură resursă de produs prinid
sa. Aceasta este, de asemenea, returnată ca răspunsJSON
. -
update
metoda actualizează o singură resursă de produs prinid
, de asemenea. -
delete
metoda șterge o resursă de produs prinid
și returnează un mesajsuccess
.
Routes
Este timpul să adăugăm în sfârșit routes
nostru. Deschideți fișierul web.php
din dosarul routes
și adăugați următorul cod:
Definim grupul nostru routes
și adăugăm prefix
api/v1
, deoarece este un parametru comun partajat de toate URIs
Tipurile noastre: Utilizați Prefixul pentru a specifica parametrii comuni pentru rutele dvs. grupate
Încărcarea bazei noastre de date
Înainte de a începe să testăm endpoints
nostru, să creăm câteva date de probă cu care să lucrăm. Să începem prin a ne crea seed
. Rulați:php artisan make:seed ProductsTableSeeder
Aceasta va crea un fișier ProductsTableSeeder.php
în directorul database/seeds
. Editați fișierul cu următorul cod:
În continuare, editați fișierul DatabaseSeeder.php
din directorul database\seeds
cu următorul cod:
Vom folosi Model Factory de la Laravel și biblioteca Faker pentru a genera datele de probă. Navigați în directorul database\factories
și adăugați următorul cod în fișierul ModelFactory.php
.
În continuare, rulați:php artisan db:seed
Acest lucru va crea o grămadă de date fictive pentru noi în database
.
Testarea API-ului nostru
Ne vom folosi de Postman pentru a testa API-ul nostru. Puteți citi mai multe despre cum să vă familiarizați cu Postman aici.