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űvelet | HTTP | Végpont |
---|
Listázás | GET | /api/contents |
Egy lekérdezés | GET | /api/contents/{id} |
Létrehozás | POST | /api/contents |
Módosítás | PUT | /api/contents/{id} |
Törlés | DELETE | /api/contents/{id} |
Nincsenek megjegyzések:
Megjegyzés küldése