مسارات API
تُعرَّف في routes/api.php، وتُسبَق تلقائيًّا بـ /api وتكون بلا حالة
(stateless):
<?php
use App\Http\Controllers\PostController;
Route::get('/posts', [PostController::class, 'index']);
Route::post('/posts', [PostController::class, 'store']);
Route::apiResource('/posts', PostController::class); // كل مسارات CRUD
متحكّم API
<?php
public function index()
{
return Post::all(); // Laravel يحوّلها لـ JSON تلقائيًّا
}
public function store(Request $request)
{
$post = Post::create($request->validate([
'title' => 'required',
'body' => 'required',
]));
return response()->json($post, 201);
}
موارد API (Resources)
للتحكّم الدقيق في شكل الـ JSON المُرجَع (إخفاء حقول، إعادة تسمية):
php artisan make:resource PostResource
<?php
class PostResource extends JsonResource
{
public function toArray($request): array
{
return [
'id' => $this->id,
'title' => $this->title,
'author' => $this->user->name,
'published_at' => $this->created_at->toDateString(),
];
}
}
الاستخدام:
<?php
return PostResource::collection(Post::all());
return new PostResource($post);
مصادقة API بـ Sanctum
للـ APIs والتطبيقات أحادية الصفحة (SPA):
composer require laravel/sanctum
<?php
// إصدار رمز
$token = $user->createToken('app-token')->plainTextToken;
// حماية المسارات
Route::middleware('auth:sanctum')->get('/user', function (Request $r) {
return $r->user();
});
استهلاك API من الواجهة (AJAX)
fetch('/api/posts', {
headers: { 'Authorization': `Bearer ${token}` },
})
.then((res) => res.json())
.then((posts) => console.log(posts));
أخطاء شائعة
- إرجاع النموذج كاملًا (مع حقول حسّاسة) بدل استخدام API Resource.
- استخدام مصادقة الجلسات لـ API بلا حالة بدل الرموز (Sanctum).
🎯 التالي: الخلاصة وخطواتك بعد Laravel.