Bygg ett REST API med Lumen

Jag utvecklade nyligen ett API med Laravel för ett miniprojekt som jag och några vänner arbetade med. Jag bestämde mig för att bygga ett annat API men med Lumen istället, eftersom det är ett mycket lättare och snabbare ramverk än Laravel.

Lumen är ett mikroramverk som är byggt ovanpå Laravels kärnkomponenter. Lumen använder många välkända koncept från Laravel som Eloquent, caching, routing, middleware och dess service container. En stor fördel med Lumen är dess snabbhet, vilket gör att ramverket är utformat för att bygga snabba mikrotjänster eller API:er.

Tyvärr handlar den här handledningen om Lumen, men det räcker med en enkel förståelse för hur Laravel fungerar för att du ska kunna följa med.

Det finns flera olika sätt att konfigurera Lumen lokalt. För den här handledningens skull kommer vi att göra det via composer. Du kan kolla in andra sätt att konfigurera Lumen här.
Från din terminal kör du:
composer create-project — prefer-dist laravel/lumen lumen_api
Detta kommer att installera Lumen och alla dess beroenden åt dig i lumen_api katalogen. Därefter ska vi byta namn på filen.env.example som ligger i katalogen root till .env

Lumens standarddrivrutin cache i 5.4 är memcached, men vi kommer inte att behöva den för den här handledningen. Någon av följande, array database och redis stöds dock. Redigera .env-filen och ersätt standardvärdena CACHE_DRIVER och QUEUE_DRIVER med följande:

CACHE_DRIVER=array
QUEUE_DRIVER=database

För att servera vårt projekt lokalt kan vi använda oss av PHP:s inbyggda server genom att köra följande kommando:
php -S localhost:8000 -t public

Visit localhost:8000 i webbläsaren och du bör se följande sida.

Vad vi ska bygga

Vi ska bygga ett enkelt REST-API som hanterar uppgifter för att Skapa, Läsa, Uppdatera och Radera för en product resource . Låt oss ta en titt på vår endpoints

  • GET /products – Hämta alla produktresurser
  • POST /products- Skapa en ny produktresurs
  • GET /product/{id} – Hämta en produktresurs efter id
  • PUT /product/{id} – Uppdatera en produktresurs efter id
  • DELETE /product/{id}- Ta bort en produktresurs med id
  • Databas och migreringar
    Låt oss skapa vår migrationsfil. Kör följande kommando:
    php artisan make:migration create_products_table

    Detta kommer att skapa en ny migrationsfil åt dig i katalogen database/migrations. Vår product resource kommer att ha följande attribut: name, price och description.

    Lägg till följande kod i den nyligen skapade migrationsfilen.

    Redigera .env med dina database-konfigurationer och kör sedan följande kommando för att utföra migreringen.
    php artisan migrate

    Skapa vår produktmodell
    Du kanske redan är van vid att skapa models och controllers via artisan-kommandon i Laravel, men tyvärr har Lumen inte stöd för dessa kommandon. För att se en lista över tillgängliga artisan-kommandon i Lumen, kör:
    php artisan

    Navigera till katalogen app och skapa en ny model som heter Product.php

    Till skillnad från Laravel laddar Lumen inte Eloquent och Facades initialt. För att kunna använda dem måste vi avkommentera följande kodrader som finns i app\bootstrap.php
    $app->withFacades();

    $app->withEloquent();

    Controller Methods

    Låt oss skapa vår controller. Navigera till katalogen app\Http\Controller och skapa en ProductController.php-fil. Lägg till följande kod i controller som du just har skapat.

    • index-metoden returnerar alla tillgängliga produkter som ett JSON-svar.
    • create-metoden skapar en ny product och returnerar den nyskapade product som ett JSON-svar.
    • show-metoden returnerar en enskild produktresurs genom dess id. Detta returneras också som ett JSON-svar.
    • update-metoden uppdaterar också en enskild produktresurs med dess id.
    • delete-metoden raderar en produktresurs med dess id och returnerar ett success-meddelande.

    Routes

    Det är dags att äntligen lägga till vår routes. Öppna filen web.php i mappen routes och lägg till följande kod:

    Vi definierar gruppera vår routes och lägger till prefix api/v1 eftersom det är en gemensam parameter som delas av alla våra URIs

    Tip: Använd Prefix för att specificera gemensamma parametrar för dina grupperade rutter

    Såddning av vår databas

    Innan vi börjar testa vår endpoints, ska vi skapa några provdata att arbeta med. Vi börjar med att skapa vår seed. Kör:
    php artisan make:seed ProductsTableSeeder
    Detta kommer att skapa en ProductsTableSeeder.php-fil i katalogen database/seeds. Redigera filen med följande kod:

    Nästan redigerar du DatabaseSeeder.php-filen i katalogen database\seeds med följande kod:
    Vi kommer att använda oss av Larvels Model Factory och Faker-biblioteket för att generera exempeldata. Navigera till katalogen database\factories och lägg till följande kod i filen ModelFactory.php.

    Nästan, kör:
    php artisan db:seed

    Detta kommer att skapa en massa dummy data för oss i vår database.

    Testning av vårt API

    Vi kommer att använda Postman för att testa vårt API. Du kan läsa mer om hur du kommer igång med Postman här.

    Lämna ett svar

    Din e-postadress kommer inte publiceras.