2025. április 7., hétfő

Norway_info Laravel REST API Jetstreammel (Livewire + MySQL)

Készítsünk egy olyan Laravel REST API-t, amely egy contents nevű adatbázistábla adatait kezeli (Create, Read, Update, Delete), és amelyet Postmanből, vagy ECHO API-val lehet tesztelni autentikáció vagyis bejelentkezés nélkül.

Jetstream ajánlott, mert automatikusan létrehozza az api.php fájlt, és beállítja a projektet fejlesztésre. Ha nem szeretnél bejelentkezést, azt egyszerűen kihagyjuk a kódodból.

Telepíts egy új projektet: laravel new norway_info

válaszd ki a jetstream, livewire, mysql, és migrálás lehetőségeket. Ha valamit kihagysz utólag is telepítheted: 

cd norway_info

composer require laravel/jetstream

php artisan jetstream:install livewire

npm install && npm run dev

php artisan migrate

Jetstream + Livewire beállítja az alapstruktúrát, de az autentikációs middleware-t nem fogjuk használni az API route-oknál, mert az nem feladat jelen esetben.

Adatmodell létrehozása: 

php artisan make:model Content

A modellbe engedélyezzük a mezők tömeges kitöltését:

// app/Models/Content.php

protected $fillable = ['title', 'body', 'img'];

API Resource létrehozása:

php artisan make:resource ContentResource

A resource formázza az adatokat JSON-válaszként:

// app/Http/Resources/ContentResource.php

namespace App\Http\Resources;

use Illuminate\Http\Request;

use Illuminate\Http\Resources\Json\JsonResource;

class ContentResource extends JsonResource

{

    public function toArray(Request $request): array

    {

        return [

            'id'         => $this->id,

            'title'      => $this->title,

            'body'       => $this->body,

            'img'        => $this->img,

            'created_at' => $this->created_at,

        ];

    }

}

Controller létrehozása REST API-hoz:

php artisan make:controller ContentController - -api

// app/Http/Controllers/ContentController.php

namespace App\Http\Controllers;

use App\Models\Content;

use Illuminate\Http\Request;

use App\Http\Resources\ContentResource;

class ContentController extends Controller

{

    // 🟢 READ – Összes tartalom lekérdezése

    public function index()

    {

        return ContentResource::collection(Content::all());

    }

    // 🟢 CREATE – Új tartalom létrehozása

    public function store(Request $request)

    {

        $validated = $request->validate([

            'title' => 'required|string|max:255',

            'body'  => 'required|string',

            'img'   => 'nullable|string|max:255',

        ]);

        $content = Content::create($validated);

        return new ContentResource($content);

    }

    // 🟢 READ – Egy adott tartalom lekérdezése

    public function show($id)

    {

        return new ContentResource(Content::findOrFail($id));

    }

    // 🟡 UPDATE – Tartalom frissítése

    public function update(Request $request, $id)

    {

        $content = Content::findOrFail($id);

        $validated = $request->validate([

            'title' => 'sometimes|required|string|max:255',

            'body'  => 'sometimes|required|string',

            'img'   => 'nullable|string|max:255',

        ]);

        $content->update($validated);

        return new ContentResource($content);

    }

    // 🔴 DELETE – Tartalom törlése

    public function destroy($id)

    {

        $content = Content::findOrFail($id);

        $content->delete();

        return response()->json(['message' => 'Deleted successfully']);

    }

}

API útvonal hozzáadása (route)

// routes/api.php

use Illuminate\Support\Facades\Route;

use App\Http\Controllers\ContentController;

Route::apiResource('contents', ContentController::class);

Szerver indítás:

php artisan serve

URL: http://127.0.0.1:8000/api/contents

Post teszthez:

{

  "title": "Norvég Oktatás",

  "body": "Az oktatási rendszer ingyenes és magas színvonalú.",

  "img": "education.jpg"

}

Mi van, ha sessions hibát kapok?
Állítsd .env fájlban: SESSION_DRIVER=file
Majd: php artisan config:clear

Nem jön létre api.php?
Hozd létre kézzel: routes/api.php
Laravel automatikusan betölti.

MűveletHTTPVégpont
ListázásGET/api/contents
Egy lekérdezésGET/api/contents/{id}
LétrehozásPOST/api/contents
MódosításPUT/api/contents/{id}
TörlésDELETE/api/contents/{id}

Nincsenek megjegyzések:

Megjegyzés küldése

Students api - Rigó Dávid megoldása és jegyzete

Students api a Students adatbázishoz tartozó Laravel api elkészítése Kezdés: laravel new studens A következő lépésben a starter kit-ek közü...