🔺 شرح Laravel

بناء واجهات API

مسارات 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.