I'm always excited to take on new projects and collaborate with innovative minds.

Phone

+20 115 052 9992

Website

https://ibrahimahmed.online/

Social Links

الـ API Resources في Laravel: تنسيق البيانات زي المحترفين

يا هلا بيك يا صديقي المبرمج في عالم تطوير الويب وتصميم الواجهات البرمجية (Web Development). تعال نتكلم في نقطة أكيد وجعت دماغك وأنت شغال على أي مشروع، وهي لما ت

الـ API Resources في Laravel: تنسيق البيانات زي المحترفين
Reading Count: 1

يا هلا بيك يا صديقي المبرمج في عالم تطوير الويب وتصميم الواجهات البرمجية (Web Development). تعال نتكلم في نقطة أكيد وجعت دماغك وأنت شغال على أي مشروع، وهي لما تيجي تبني واجهة برمجية (API) وترجع بيانات من القاعدة (Database) على طول للفرونت إند (Frontend) من غير تنسيق.

بتلاقي نفسك بترجع باسورد المستخدم (Password)، ورموز التشفير الحساسة (Tokens)، وحقول تانية ملهاش أي لزمة العميل محتاجها هناك. والأكتر من كده، لما تلاقي الفرونت إند ديفلوبر بيقولك: "يا عم أنا محتاج اسم الـ User في كيز (Keys) معينة، ومش عايز البيانات دي كلها". هنا بتظهر المشكلة الحقيقية، وتبدأ تكتب كود سباجيتي (Spaghetti Code) جوه الكنترولر (Controller) عشان تنظف البيانات دي يدوياً.

الحل السحري والمحترف لمشكلة تنسيق البيانات هو استخدام أداة جبارة في لاراكافيل اسمها مصادر الـ API أو بالانجليزي API Resources (JsonResource). في المقال ده، هناخد رحلة تفصيلية نعرف إزاي نستخدمها زي المحترفين ونظبط مخرجات الـ API بتاعنا على الجرام.

إيه هي الـ API Resources وليه بنحتاجها في لاراكافيل؟

ببساطة شديدة، الـ API Resources (JsonResource) هي طبقة وسيطة (Transformation Layer) بين قاعدة البيانات بتاعتك ومخرجات الـ API النهائية. وظيفتها الأساسية هي أخذ الموديل (Eloquent Model) أو مجموعة موديلز (Collection) وتحويلها لـ JSON بالشكل اللي الفرونت إند محتاجه بالضبط.

زمان، كنا بنعمل كده جوه الكنترولر:


return response()->json([
    'status' => true,
    'data' => $user
]);

الطريقة دي ممتازة للمشاريع السريعة، لكن مع الوقت بتكبر والمشروع بيبقي معقد، وبتلاقي نفسك مضطر تخفي حقول زي الـ password أو الـ remember_token لكل موديل، أو تضيف حقول محسوبة (Computed Fields) زي اسم المستخدم كامل (Full Name) مدمج من الاسم الأول والأخير. هنا بتيجي أهمية الـ JsonResource عشان تفصل منطق العرض (Presentation Logic) عن منطق البزنس (Business Logic).

الخطوة الأولى: إنشاء الـ Resource وتوليد الكود

لاراكافيل بتسهل علينا الموضوع كالعادة بأمر Artisan بسيط جداً. عشان تعمل Resource جديدة لموديل المستخدمين (User)، هتقول في التيرمينال (Terminal):


php artisan make:resource UserResource

الأمر ده هيخلقلك ملف جديد جوه مسار app/Http/Resources/UserResource.php. لو فتحت الملف ده، هتلاقيه عبارة عن كلاس بسيط جواه دالة (Method) اسمها toArray، وهي دي اللعبة كلها!

الخطوة الثانية: تشكيل البيانات وإخفاء الحقول الحساسة

جوه دالة toArray، تقدر تحدد بدقة إيه البيانات اللي هتطلع للعميل، وإيه البيانات اللي هتتخفي للأبد. تعال نشوف مثال عملي لشكل الملف:


namespace App\Http\Resources;

use Illuminate\Http\Request;
use Illuminate\Http\Resources\Json\JsonResource;

class UserResource extends JsonResource
{
    public function toArray(Request $request): array
    {
        return [
            'id' => $this->id,
            'full_name' => $this->first_name . ' ' . $this->last_name,
            'email' => $this->email,
            'joined_at' => $this->created_at->format('Y-m-d'),
            // حقول حساسة زي الـ password اتشالت ومش هتشوف النور أبداً
        ];
    }
}

لاحظ هنا إني قدرت أعمل دمج للاسم الأول والأخير في حقل واحد اسمه full_name، وعملت تنسيق لتاريخ التسجيل (Date Formatting)، وطبعاً الباسورد مش موجود خالص في المصفوفة (Array)، فمستحيل يتسرب بالغلط!

الخطوة الثالثة: استخدام الـ Resource جوه الـ Controller

بعد ما جهزنا الـ Resource بتاعنا، استخدامها جوه الكنترولر (Controller) أسهل ما يمكن. كل اللي عليك تعمله انك تستدعي الكلاس وتمرر ليه الموديل أو الـ Collection بالشكل ده:


use App\Http\Resources\UserResource;
use App\Models\User;

class UserController extends Controller
{
    public function show($id)
    {
        $user = User::findOrFail($id);
        
        // إرجاع مستخدم واحد
        return new UserResource($user);
    }

    public function index()
    {
        // إرجاع مجموعة مستخدمين (Collection)
        return UserResource::collection(User::all());
    }
}

الجميل في الموضوع هنا إن لاراكافيل ذكية بما يكفي لتعرف لو أنت باعت موديل واحد (Single Model) أو مجموعة (Collection)، وبتتعامل مع الاتنين بذكاء شديد ومن غير أي تعقيد.

أحياناً وأنت شغال على الـ Pagination (الصفحات)، بتعوز ترجع مع البيانات شوية معلومات إضافية زي إجمالي عدد العناصر، أو رسالة نجاح العملية. الـ JsonResource بتدعم ده بسهولة جداً من خلال دالة with.

لو عندك Resource خاصة بقائمة مقالات، تقدر تضيف ميثود جوه الكلاس بالشكل ده:


public function with(Request $request)
{
    return [
        'status' => 'success',
        'code' => 200,
    ];
}

البيانات دي هتتحط أوتوماتيك مع الـ Response النهائي، وده بيدي شكل احترافي جداً للـ API بتاعك وبيقوي التواصل مع مبرمج الفرونت إند.

خاتمة ونصيحة من أخ

استخدام الAPI Resources (JsonResource) مش رفاهية في مشاريع لاراكافيل الحديثة، ده بقى أساس لكل ديفلوبر عايز يبني برمجيات نظيفة وقابلة للصيانة والتطوير (Maintainable Code). بلاش تكسل تكتب Resources لكل موديل رئيسي عندك في المشروع، لأنك هتوفر على نفسك ساعات طويلة من التعديل والمشاكل قدام.

تطوير المهارات بيجي بالممارسة المستمرة، طبق اللي اتعلمناه ده حالا في مشروعك التجريبي القادم، وهتحس بالفرق الكبير في نظافة الكود وترتيبه. بالتوفيق يا صديقي وفي انتظارك في مقالات تقنية جاية!


Share

Related posts

Aug 19, 2026 • 1 min read
Reading Count: 4
أفضل استراتيجيات الـ Caching في Laravel لتسريع التطبيق

يا هلا بيك يا باشمهندس في عالم البرمجة! أكيد في يوم من الأيام وأنت شغال على مشروع لارافيل (Laravel)،...

Aug 19, 2026 • 1 min read
Reading Count: 4
شرح Laravel Folio و Volt: العودة للتبسيط في بناء الصفحات

شرح Laravel Folio و Volt: العودة للتبسيط في بناء الصفحات أهلاً بيك يا صديقي المبرمج في عالم تطوير ال...

Aug 18, 2026 • 1 min read
Reading Count: 6
توحيد شكل الكود في فريقك باستخدام Laravel Pint

تخيل معايا السيناريو ده: قاعد الصبح رايق بتشرب كوباية القهوة، وفتحت الـ GitHub عشان تعمل مراجعة كود...