ما هو REST api في php

ماهو REST api وماهو RESTful وما الفرق بينهما وما الفرق بين REST api وبين أنشاء واجة برمجة تطبيقات باستخدام الكود التالي

$data['name'] = 'ali' ;

echo json_encode($data);

ولماذا يجب ان اتعلمه ولماذا لا يوحد احد يشرح ذلك بطريقه تطبيقيه مبسطة بدلا من الهراء الطويل الذي لاينفع مثل ما وجدت مقاله في موقع المبرمج العربي كلها هراء في هراء

يرجى الدخول لحسابك أو تسجيل حساب لتستطيع إضافة تعليق
حساب جديد دخول

التعليقات

قبل التطرق لفلسفة الـ REST Api يجب أولا تفصيل مفهوم واجهة التطبيقات البرمجية ترجمة عن الـ API اختصارا لـApplication Programming Interface. حيث تعبر عن مجموع القواعد التي تحكم التطبيق وتسيره، و يتم عملها بالأخذ بمنطق إخفاء تعقيد منطق عمل وظيفة أو دالة أو تابع و تصدير طريقة بسيطة للوصول إليه و التعامل معه , يعطي هذا مرونة أكبر و قابلية أكثر للتحكم في التطبيق بواجهتيه : الأمامية و الخلفية.

مثال:

  • توفر الدالة getBooksCount إمكانية جلب عدد الكتب المخزنة في قواعد البيانات، فهي تقوم بإخفاء التعقيد الكائن داخلها أو ما الذي تقوم به، وتوفر بدل كل هذا هاته الطريقة البسيطة للإستدعاء والإستعمال.

ببساطة هذا هو منطق عمل الواجهات البرمجية، بالتأكيد ستلاحظ أن المفهوم عام ولا يشمل طلبات الـ HTTP والردود عليها فقط، لأن هذا الأخير ليس هو الواجهة في حد ذاته وإنما يستعير منطقها لفعل ذلك. فهو شائع بناءها في تطبيقات الويب لفصل الواجهة الخلفية تماما عن شيفرات الواجهة الأمامية يتوفير نقاط وصول أو end points للوصول إلى مصادر معينة أو تطبيق أفعال CRUD بسهولة (Create, Read ,Update , Delete ).

أما عن الـ REST api أو الـ RESTful API هي واجهة تطبيقات برمجية تتبع مبادئ تصميم REST.

فيما يلي مجموعة مبادئ تصميم REST:

  • الواجهة الموحدة: يجب أن تتبع جميع طلبيات الـ HTTP نفس النسق.
GET https://path/to/api/v1/resources
GET https://path/to/api/v1/resources/%7Bresource%7D
و هكذا ..
  • فصل العميل عن الخادم: يعني فصل كامل مكونات العميل عن مكونات الخادم (ملفات العرض، المتحكمات والنماذج ..إلخ)
  • قابلية التخزين المؤقت.
  • نظام الوسطاء: لا يفترض بواجهة العميل أن تتصل مباشرة بواجهة الخادم، يجب أن يكون هناك وسيط للتحقق وتوثيق الطلبيات مثلا.

تعرف أكثر عن فلسفة REST API في هذا الفيديو المقدمة من أكاديمية حسوب

كما يمكنك الإستزادة بقراءة الإجابات التالية على السؤالين

كيف اقوم بعمل هذا النظام عمليا

هذا ليس نظاما، وإنما مجموعة من الفلسفات وأفضل التطبيقات لعمل تطبيقات واجهات برمجية ناجحة وفعالة وذات آداء عال.

ويكون إكتساب هاته المفاهيم والطرق بالتطبيق والممارسة والتعود عليها وعلى ممارستها. فهي ليست برمجة في حد ذاتها، وإنما أسلوب تنظيمي .

يعني لو استخدمت دالة جسون وبعض الترويسات هنا عملت rest api

ليس بالضرورة، لا تقوم دالة json_encode إلا بتحويل مصفوفة PHP عادية إلى مصفوفة JSON ولا تحقق هي نفسها أي مبدأ من المبادئ. تذكر جيدا:

هذا ليس نظاما، وإنما مجموعة من الفلسفات وأفضل التطبيقات لعمل تطبيقات واجهات برمجية ناجحة وفعالة وذات آداء عال.

تكون قد احترمت مبادئ REST في عمل واجهة برمجية عندما تقوم باحترام المبادئ التي تم ذكرها سابقا:

  • الواجهة الموحدة: بجعلك لكامل الواجهات والأصناف ونقاط الوصول تتبع نسقا وشكلا عاما أو قالبا موحدا.
  • فصل العميل عن الخادم: بفصلك لكامل المكونات التي تتفاعل مع قواعد البيانات وواجهة الخادم عن المكونات التي يتفاعل معها العميل.
  • قابلية التخزين المؤقت: بجعلك لمجموعات الملفات الأساسية ثابتة المحتوى التي يتطلب تخزينها في الخادم قابلة للتخزين بدل طلبها كل مرة.
  • إضافة وسطاء: بتوفيرك لطرق وسيطة لا تجعل الخادم والعميل يتفاعلان مع بعض بصورة متصلة ومباشرة ، كمصادقة الطلبات كمثال عن هاته الطرق .

هذه النقاط لم افهمها ممكن توضح بشك اكثر تبسيطَ مثلا كيف لا اجعل الخادم والعميل يتفاعلان مع بعض

واي ملفات اقوم بتخزينها وتين اخزنها قاعدة البيانات مثلا

وكيف اجعل الواجهه موحده

هاته مفاهيم عامة وأساليب في كتابة الشيفرة وليست شيفرات أو مجموعة أكواد يمكن وصفها أو يمكن تمثيلها بشيفرة واحدة.

فعلى سبيل المثال هاتان النقطتان وغيرها الكثير يتضمن مبدأ الواجهة الموحدة:

  • جميع الدوال بتطبيقك تكتب بشكل "myFunction" مثال: "getUsers" او "deleteTask". هذا بجانب تماثل أو تشابه أو توحد مضمون هاته الدوال، فلا يعقل أن نجد التابعين getUsers و getTasks مختلفين من حيث المبنى والشكل العام.
  • جميع الروابط تتبع شكلا عام:
GET https://path.to/api/v1/resources جلب بيانات مورد 
POST https://path.to/api/v1/resources تخزين مورد جديد

مثال:

GET https://path.to/api/v1/users جلب المستخدمين
POST https://path.to/api/v1/users تخزين مستخدم جديد

أو:

GET https://path.to/api/v1/products جلب المستخدمين
POST https://path.to/api/v1/products تخزين مستخدم جديد

يشرح الفيديو المرفق هاته المفاهيم بإسهاب، يفضل الإطلاع عليه

شكرا لك اخي يبدوا أنني فهمت

انظر اخي

<?php
namespace Controllers;
header("Access-Control-Allow-Origin: *") ;
header("Content-type: application/json; charset=utf-8");
header("Access-Control-Allow-Headers: *");


class Apil
{

    public function index()
    {
view("api");
}

public function apiGet() {
$arr['name'] = "alkaser" ;
$arr['email'] = "alkaser@gmail.com";
$arr['arName'] = 'علي الكاسر' ;
$data = json_encode($arr);
print_r($data) ;

} 
} 

هل هكذا جيد.

وانظر لهذا السطر

header("Content-type: application/json; charset=utf-8");

أنه لا يعمل، من المفترظ أنه يجعل المعلومات المعروضه تدعم العربي ولا تظهر المعلومات التي باللغه العربيه مشفرة

حاول وضع الشيفرة التالية في صفحة HTML ضمن الوسم head

<meta charset="UTF-8">

اقصد المعلومات التي اعرضها في الواجهة التطبيقات البرمجية api, اذا كانت عربيه تظهر مشفرة، لانه يتم عرض المعلومات بال json

json لن تسبب المشكلة

انتبه أن ترميز الأحرف العربية يختلف عن الانكليزية، لذلك حاول طباعة السلاسل باستخدام الدالة

utf8_encode ( string $data )

مثل التالي:

$arr['arName'] = utf8_encode ('علي الكاسر') ;
$data = json_encode($arr);
print_r($data) ;

حسنا فهمت، اعتقدت ان هذه الترويسه لها علاقه بالامر.

header("Content-type: application/json; charset=utf-8");