Di recente ho sviluppato un’API con Laravel per un mini-progetto a cui abbiamo lavorato io e un paio di amici. Ho deciso di costruire un’altra API ma con Lumen invece, dato che è un framework molto più leggero e veloce di Laravel.
Lumen è un micro-framework costruito sopra i componenti principali di Laravel. Lumen utilizza molti concetti familiari di Laravel come Eloquent, caching, routing, middleware e il suo service container. Uno dei principali vantaggi di Lumen è la sua velocità, di conseguenza il framework è progettato per la costruzione di microservizi veloci o API.
Anche se questo tutorial è su Lumen, una semplice comprensione di come funziona Laravel è tutto ciò di cui hai bisogno per seguirlo.
Ci sono diversi modi per impostare Lumen localmente. Per il bene di questo tutorial, lo faremo tramite composer
. Puoi controllare altri modi per configurare Lumen qui.
Dal tuo terminale, esegui: composer create-project — prefer-dist laravel/lumen lumen_api
Questo installerà Lumen e tutte le sue dipendenze nella lumen_api
directory. Successivamente, rinomineremo il file .env.example
situato nella directory root
in .env
Il driver cache
predefinito di Lumen alla 5.4 è memcached,
ma non ci servirà per questo tutorial. Tuttavia uno qualsiasi dei seguenti, array
database
e redis
sono supportati. Modifica il file .env
e sostituisci i valori predefiniti CACHE_DRIVER
e QUEUE_DRIVER
con i seguenti:
CACHE_DRIVER=array
QUEUE_DRIVER=database
Per servire il nostro progetto localmente, possiamo utilizzare il server integrato di PHP eseguendo il seguente comando:php -S localhost:8000 -t public
Visita localhost:8000
nel tuo browser e dovresti vedere la seguente pagina.
Cosa costruiremo
Costruiremo una semplice API REST che gestisce le attività di creazione, lettura, aggiornamento e cancellazione per un product resource
. Diamo un’occhiata al nostro endpoints
- GET /products – Recupera tutte le risorse prodotto
- POST /products- Crea una nuova risorsa prodotto
- GET /product/{id} – Recupera una risorsa prodotto per id
- PUT /product/{id} – Aggiorna una risorsa prodotto per id
- DELETE /product/{id}- Elimina una risorsa prodotto per id
Database e Migrazioni
Creiamo il nostro file di migrazione. Esegui il seguente comando:php artisan make:migration create_products_table
Questo creerà un nuovo file di migrazione per te nella directory database/migrations
. Il nostro product resource
avrà i seguenti attributi, name
, price
e description
.
Aggiungi il seguente codice al file di migrazione appena creato.
Modifica .env
con le tue configurazioni database
e poi esegui il seguente comando per eseguire la migrazione. php artisan migrate
Creazione del nostro modello di prodotto
Potresti già essere abituato a creare models
e controllers
tramite i comandi artisan
in Laravel, ma sfortunatamente Lumen non supporta questi comandi. Per vedere la lista dei comandi artisan
disponibili in Lumen, esegui:php artisan
Passa alla directory app
e crea un nuovo model
chiamato Product.php
A differenza di Laravel, Lumen non carica inizialmente Eloquent e Facades. Per poterle utilizzare, dobbiamo decommentare le seguenti linee di codice situate in app\bootstrap.php
$app->withFacades();
$app->withEloquent();
Metodi del controllore
Creiamo il nostro controller
. Naviga nella directory app\Http\Controller
e crea un file ProductController.php
. Aggiungi il seguente codice al controller
appena creato.
-
index
metodo restituisce tutti i prodotti disponibili come rispostaJSON
. -
create
metodo crea un nuovoproduct
e restituisce ilproduct
appena creato come rispostaJSON
. -
show
metodo restituisce una singola risorsa prodotto dal suoid
. Anche questo viene restituito come rispostaJSON
. -
update
il metodo aggiorna una singola risorsa prodotto per il suoid
. -
delete
il metodo cancella una risorsa prodotto per il suoid
e restituisce un messaggiosuccess
.
Routes
È ora di aggiungere finalmente il nostro routes
. Aprite il file web.php
nella cartella routes
e aggiungete il seguente codice:
Definiremo il gruppo dei nostri routes
e aggiungeremo il prefix
api/v1
poiché è un parametro comune condiviso da tutti i nostri URIs
Tip: Usa Prefix per specificare i parametri comuni per i tuoi percorsi raggruppati
Semina il nostro database
Prima di iniziare a testare il nostro endpoints
, creiamo alcuni dati di esempio con cui lavorare. Iniziamo creando il nostro seed
. Esegui:php artisan make:seed ProductsTableSeeder
Questo creerà un file ProductsTableSeeder.php
nella directory database/seeds
. Modifica il file con il seguente codice:
Poi, modifica il file DatabaseSeeder.php
nella directory database\seeds
con il seguente codice:
Faremo uso della Model Factory di Laravel e della libreria Faker per generare i dati di esempio. Passate alla directory database\factories
e aggiungete il seguente codice al file ModelFactory.php
.
Poi, eseguite:php artisan db:seed
Questo creerà un mucchio di dati fittizi per noi nel nostro database
.
Testing della nostra API
Faremo uso di Postman per testare la nostra API. Puoi leggere di più su come iniziare con Postman qui.