Opbygning af et REST API med Lumen

Jeg har for nylig udviklet et API med Laravel til et miniprojekt, som et par venner og jeg arbejdede på. Jeg besluttede mig for at bygge endnu et API, men med Lumen i stedet, da det er et langt lettere og hurtigere framework end Laravel.

Lumen er et mikro-framework bygget oven på Laravels kernekomponenter. Lumen udnytter en masse velkendte koncepter fra Laravel såsom Eloquent, caching, routing, middleware og dens servicecontainer. En stor fordel ved Lumen er dens hastighed, som følge heraf er rammen designet til opbygning af hurtige mikrotjenester eller API’er.

Selv om denne tutorial handler om Lumen, er en simpel forståelse af, hvordan Laravel fungerer, alt hvad du behøver for at følge med.

Der er flere måder, du kan opsætte Lumen lokalt på. I forbindelse med denne vejledning gør vi det via composer. Du kan se andre måder at opsætte Lumen på her.
Fra din terminal skal du køre:
composer create-project — prefer-dist laravel/lumen lumen_api
Dette vil installere Lumen og alle dets afhængigheder for dig i lumen_api mappen. Dernæst omdøber vi filen .env.example, der ligger i mappen root, til .env

Lumens standard cache-driver som i 5.4 er memcached,, men det får vi ikke brug for i denne vejledning. Men enhver af følgende, array database og redis er understøttet. Rediger .env-filen og erstat standardværdierne CACHE_DRIVER og QUEUE_DRIVER med følgende:

CACHE_DRIVER=array
QUEUE_DRIVER=database

For at servere vores projekt lokalt kan vi gøre brug af PHP’s indbyggede server ved at køre følgende kommando:
php -S localhost:8000 -t public

Besøg localhost:8000 i din browser, og du bør se følgende side.

Hvad vi skal bygge

Vi skal bygge et simpelt REST API, der håndterer Create, Read, Update og Delete-opgaver for en product resource . Lad os tage et kig på vores endpoints

  • GET /products – Hent alle produktressourcer
  • POST /products- Opret en ny produktressource
  • GET /product/{id} – Hent en produktressource efter id
  • PUT /product/{id} – Opdater en produktressource efter id
  • DELETE /product/{id}- Slet en produktressource ved id
  • Database og migreringer
    Lad os oprette vores migreringsfil. Kør følgende kommando:
    php artisan make:migration create_products_table

    Dette vil oprette en ny migreringsfil til dig i mappen database/migrations. Vores product resource vil have følgende attributter, name, price og description.

    Føj følgende kode til den nyligt oprettede migrationsfil.

    Rediger .env med dine database-konfigurationer, og kør derefter følgende kommando for at udføre migreringen.
    php artisan migrate

    Skabelse af vores produktmodel
    Du er måske allerede vant til at oprette models og controllers via artisan-kommandoer i Laravel, men desværre understøtter Lumen ikke disse kommandoer. Du kan se en liste over tilgængelige artisan-kommandoer i Lumen ved at køre:
    php artisan

    Navigér til app-mappen, og opret en ny model kaldet Product.php

    I modsætning til Laravel indlæser Lumen ikke Eloquent og Facades i første omgang. For at kunne bruge dem skal vi afkommentere følgende kodelinjer, der ligger i app\bootstrap.php
    $app->withFacades();

    $app->withEloquent();

    Controller Methods

    Lad os oprette vores controller. Naviger til mappen app\Http\Controller, og opret en ProductController.php-fil. Tilføj følgende kode til den controller, du lige har oprettet.

    • index metode returnerer alle tilgængelige produkter som et JSON svar.
    • create metode opretter en ny product og returnerer den nyligt oprettede product som et JSON svar.
    • show metode returnerer en enkelt produktressource ved hjælp af dens id. Dette returneres også som et JSON-svar.
    • update metode opdaterer også en enkelt produktressource ved dens id.
    • delete metode sletter en produktressource ved dens id og returnerer en success-meddelelse.

    Routes

    Det er på tide endelig at tilføje vores routes. Åbn filen web.php i mappen routes, og tilføj følgende kode:

    Vi definerer gruppen vores routes og tilføjer prefix api/v1, da det er en fælles parameter, der deles af alle vores URIs

    Tip: Gør brug af Prefix til at angive fælles parametre for dine grupperede ruter

    Sæt vores database

    Hvor vi begynder at teste vores endpoints, skal vi oprette nogle eksempeldata, som vi kan arbejde med. Lad os starte med at oprette vores seed. Kør:
    php artisan make:seed ProductsTableSeeder
    Dette vil oprette en ProductsTableSeeder.php-fil i mappen database/seeds. Rediger filen med følgende kode:

    Rediger derefter filen DatabaseSeeder.php i mappen database\seeds med følgende kode:
    Vi vil gøre brug af Laravels Model Factory og Faker-biblioteket til at generere eksempeldataene. Naviger til database\factories-mappen, og tilføj følgende kode til ModelFactory.php-filen.

    Kør derefter:
    php artisan db:seed

    Dette vil oprette en masse dummy-data til os i vores database.

    Test af vores API

    Vi vil gøre brug af Postman til at teste vores API. Du kan læse mere om at komme i gang med Postman her.

    Skriv et svar

    Din e-mailadresse vil ikke blive publiceret.