اذهب إلى المحتوى

السؤال

نشر

السلام عليكم

هل يمكن الجمع بين تقنية Blade و API في نفس المشروع؟

على سبيل المثال:

أريد عرض صفحة أولية باستخدام Blade.

أرغب في تحديث بعض أقسام الصفحة (مثل معلومات المنتج) دون إعادة تحميل الصفحة بالكامل عندما يتفاعل المستخدم معها (مثل النقر على منتج).

Recommended Posts

  • 0
نشر

إن كان السؤال عن الإمكانية فالإجابة هي نعم وبكل تأكيد وبالعديد من الطرق: 

  • عن طريق أجاكس
  • عن طريق Inertia
  • عن طريق Livewire
  • عن طريق Turbo Frames

والعديد الآخر .. 

ولكن إن كان السؤال عن هل ينصح بذلك أم لا فالإجابة هي لا. لأن هذا الموضوع يتعارض مع فكرة فصل مكونات التطبيق أساسا، فلما تريد إنشاء تطبيق API / SPA أو API / SSR ثم تعود للإعتماد على Blade مرة أخرى. بجانب أن هذا يتعارض مع مبادئ REST في تصميم الواجهات البرمجية مثل مبدأ فصل الخادم والعميل Client-server decoupling و عدمية الحالة Statelessness. 

ولذلك بدل إنشاء قوالب HTML في الطلبية، يمكنك إنشاء بيانات مهيكلة وعرضها كقوالب HTML من قبل تطبيق العميل.

  • 0
نشر

وعليكم السلام ورحمة الله وبركاته.

نعم بالطبع يمكنك الجمع بيت blade و API لا مشكلة وذلك عن طريق Java Script . 

حيث بالفعل في blade يمكنك إستدعاء أى API سواء موجود في نفس المشورع أو API خارجي .

ويمكنك إستخدام Ajax أو Fetch لإرسال الطلبات إلى API وبعد ذلك يمكنك التلاعب بالصفحة من خلال js وإضافة المعلومات التي تم إحضارها من ال API إلى الصفحة.

document.querySelectorAll('.product').forEach(item => {
    item.addEventListener('click', event => {
        const productId = item.getAttribute('data-id');
        fetch(`/api/products/${productId}`)
            .then(response => response.json())
            .then(data => {
                document.getElementById('product-details').innerHTML = `
                    <h3>${data.name}</h3>
                    <p>${data.description}</p>
                `;
            });
    });
});

والكود السابق مثال لما تريد تنفيذ حيث إستخدمنا fetch لإرسسال الطلب إلى api وبعد إستلام الرد نقوم بالتعديل على الصفحة.

ويمكنك رؤية الأجوبة التالية لشرح أكثر حول إستخدام ajax و fetch :

 

 

 

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...