Costruire un’API REST con Lumen

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 risposta JSON.
  • create metodo crea un nuovo product e restituisce il product appena creato come risposta JSON.
  • show metodo restituisce una singola risorsa prodotto dal suo id. Anche questo viene restituito come risposta JSON.
  • update il metodo aggiorna una singola risorsa prodotto per il suo id.
  • delete il metodo cancella una risorsa prodotto per il suo id e restituisce un messaggio success.

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.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.