Laravel 10.x karkasas. Aplikacijų programavimo sąsaja (API)

API servisas

Norint dirbti su API servisu Laravel aplinkoje yra kuriami resursų failai, kurių pagalba galima užduoti, kaip bus atvaizudojami duomenys JSON formatu. Žinoma, tai galima padaryti ir su Laravel metodu toJson(), tačiau resursų klasės suteikia detalesnę ir patikimesnę JSON kontrolę.
Taigi, sukurkime resursų klasę, kuri padėtų valdyti knygas:
php artisan make:resource BookResource
Įvykdžius šią komandą ..\library\app\Http kataloge atsiras katalogas Resources su BookResource.php failu. Atidarykite šį failą ir metode toArray() vietoj eilutės:
return parent::toArray($request);
įrašykite šį kodą:
return [
    'id' => $this->id,
    'title' => $this->title,
    'description' => $this->description,
    'authors' => $this->authors->map(function($item) {
        //sukuriame pilną autoriaus vardo eilutę
        $full_name = $item['first_name'].' '.$item['middle_name'].' '.$item['last_name'];
        //ištriname iš eilutės tuščius simbolius, kurie atsiranda, jei nėra įvestas autoriaus antras vardas
        return preg_replace('/\s\s+/', ' ', $full_name);
    }),
    'isbn' => $this->isbn,
    'year' => $this->year,
    'pages' => $this->pages,
    'publisher' => $this->publisher->title,
    'genre' => $this->genre->title,
    $this->merge(['language' => $this->language])
];
map() metodas leidžia apdirbti taip vadinamos kolekcijos (masyvo) elementus, o merge() metodas leidžia įterpti naują elementą. Peržiūrėti visą kolekcijų metodų sąrašą galite Laravel pdokumentacijoje https://laravel.com/docs/10.x/collections#available-methods.
Toliau reikia sukurti valdiklį, kuris valdys knygos duomenis, skirtus API servisui. Valdiklius jau mokate kurti, tačiau valdiklį, skirtą API servisui, geriausia kurti su parametru --api. Šis parametras sukuria valdiklį be create() ir edit() metodų, kurie API servisui nėra reikalingi. Valdiklius, skirtus API servisui, saugosime atskirame API kataloge, todėl kuriant valdiklį jį nurodysime:
php artisan make:controller API\BooksController --api
Naujai sukurtame valdiklyje BooksController.php prie naudojamų klasių įrašykite:
use App\Http\Resources\BookResource;
use App\Models\Book;
O pačioje BooksController klasėje įrašykite konstruktorių:
public function __construct()
{
    request()->headers->set('Accept', 'application/json');
}
Kuriamas API servisas kolkas galės grąžinti visą knygų sąrašą ir vienos knygos duomenis pagal jos ID numerį. Todėl naudosime tik index() ir show() metodus. Taigi, metode index() įrašykite:
$books = Book::with('authors')->get();
return BookResource::collection($books);
O metode show() įrašykite:
$book = Book::with('authors')->findOrFail($id);
return new BookResource($book);
Taip pat turime sukurti maršrutus, tačiau marštrutai API servisui yra kuriame ne web.php, o api.php faile, kuris yra automatiškai sugeneruojamas kai tik sukuriate Laravel projektą ir randasi tame pačiame kataloge kaip ir web.php failas. Atsidarykite api.php failą ir įrašykite jame maršrutą:
Route::apiResource('books', App\Http\Controllers\Api\BooksController::class)->only(['index', 'show']);
API serviso nuorodos pasiekiamos per kelią ../api/.., pvz.:
http://localhost:8000/api/books/ - visas knygų sąrašas
http://localhost:8000/api/books/1 - duomenys vienos knygos, kurios id=1
Daugiau apie API servisų kūrimą skaitykite oficialioje Laravel 10.x dokumentacijoje, skiltyje API Resources.

Paskutinį kartą puslapis keistas 2023-04-24

© Joana Katina 2016-2024. Visos teisės saugomos