ماهو ال Restful وكيف يمكن أن نبني Web API
أعتذر ع الإنقطاع عن التدوين وذلك نظرا لإنشغالي , ولكني عدت اليوم لأدون موضوع يعد أساسيا لعمل مربح على الإنترنت , وكذلك تطويري على المدى البعيد , وحتى في المؤسسات الكبيرة والوزارات ربما يكون هذا المبدأ حل لكثير من المشاكل التي تواجهم , فكيف يمكن لمجموعة من مطوري الويب والذين يختلفون في خبراتهم في لغات البرمجة أن يتفقوا في إنشاء مشروع واحد , وكيف يمكن لبرنامج أن يقوم بمهامه الخاصه بشكل فردي , ويستطيع في الوقت ذاته مشاركة بعض مهامه مع برامج أخرى لتكون برنامج يقوم بمهام من برامج مختلفة ؟ وهل من الممكن الفصل التام بين المطورين بحيث يكون هناك مطورو (Server Side(Backend خالصين,(Client Side(frontend خالصين ؟
طرحت الكثير من الحلول في هذا الصدد مثل (Java RMI (Remote Method Invocation والتي تعمل على نداء وظيفة من مكان بعيد , وكذلك ال Corpa والتي ساعدت بجعل الأمر لا يقتصر على الJava بل يمكن الكتابة بواسطتها بأكثر من لغة برمجة لتربط أنظمة ببعضها البعض , ومن ثم جاءت أهم المفاهيم الحديثة (Web Service) بجعل البرامج تعمل بواسطة الويب وتتحاور فيما بينها بإستخدام ال XML و ال Soap Messages مما ساعد في عدم التقيد بلغة واحدة وربط الخدمات جميعها لتكون برامج بمهام مختلفة (SOA) ومع إنتشار هذا المبدأ نظر الكثير إلى أن الأمر مازال معقدا بجعل كل الحوارات تتم من خلال ال Soap ليأتي مبدأ ال Restful كحل راقي وبسيط للإعتماد عليه بكافة ويلبي الحاجيات المطلوبة
دعونا نبتدأ بتعريف ال Restful
Restful هيه إختصار ل “Representational state transfer” , وسميت بهذا الإسم لأنها تعتمد بشكل أساسي إيصال ما يحدث من المصدر(البرنامج) إلى المستخدم (Client) من خلال بروتوكول ال HTTP , فتكون كل العمليات والتعاملات والتفاهم بين ال Client وال Server من خلال الحالات المعرفه به وكذلك التوجيهات في الصفحات (Request و Response)
ما الفرق بينه وبين ال (WebServices(Soap Messages ؟
ال Restfulهو مبني بطريقة توافق مبدأ ال Web service حيث يتكون التطبيق من مجموعة من ال Services التي تعمل بشكل منفرد ويمكنها الإرتباط لتعمل كحقبة واحدة , فكانت تتم عملية التفاهم بين ال Client والServer أوRecource من خلال إرسال ملفات XML بأنماط معينة وهذه الأنماط كانت تسمى بال Soap Messages
ومع ظهور مبدأ الRestful يمكننا القول بأنه إستبدل رسائل ال Soap Messages نظرا لتعقيدها ولزوم تبادل المعلومات من خلال ال XML مما يزيد إستهلاك الموارد بإعتماده التام على HTTP
ومن مزايا هذا المبدأ أنه يقوم بتطبيق عمليات ال CRUD معتمدا على أنواع الطلبات حسب الآتي :
GET : لجلب العناصر من المصدر (عملية العرض)
POST : لإضافة عناصر جديده (عملية الإضافة)
PUT: للتعديل على عنصر (عملية التعديل)
DELETE: لحذف العناصر (عملية الحذف)
وبناء على ما تم فإنه يمكن القيام بكل العمليات من خلال هذا المبدأ دون الحاجة للإعتمادية على رسائل ال Soap ال XML
نقاط مهمة عند تنفيذ المبدأ
يقوم ال Restful على أن كل Request يحوي كل المعلومات اللازمة من ال Client إلى ال Source وبالتالي لا توجد معلومات أخرى يتم نقلها إلا من خلال Headers الطلب وما يحويه من بيانات و Headers الخاصة بال Response فلا يجوز حفظ المعلومات في Session مثلا لأن ذلك يخالف المبدأ ويخرج عن طور ال Restful وتصبح هناك علاقة بين ال Client و المصدر , فيجب أن تكون الطلبات Stateless أي لا تحفظ أي حالة , ففي كل مرة يلزم نقل كل البيانات في ال Request و ال Response
مزايا
– فصل تام بين طبقة الClient و ال Server بحيث لا يفكر ال Server سوى في المرجع من البيانات والقادم دون التلطلع للشكل
– يمكن تخزين الرواجع (Responses) وإعتماد ال Client على هذه المعلومات ك (Offline mode ) مثل ال Gmail
– يمكن ربط الخدمات ببعضها بحيث تستعمل في بعض البرامج كمدخلات وفي البعض الأخر كمخرجات
– خفة البيانات المنقولة لأنها تعتمد على HTTP
– عدم إعتماد المصدر عن أي شيء من ال Client بحيث يمكن أن يكون ال Client اي جهاز أو برنامج أو أي شيء يمكنه إرسال طلب HTTP وله تصريح بذلك
العيوب
– تحتاج إلى عمل إضافي لضمان الحماية لأنها تعتمد على ال Request
– في كل مرة يجب إرسال كافة المعلومات سواء من ال Client أو من ال Server
– تحتاج إلى مستند توضيحي للبيانات التي سيتم إرسالها والمرجعات لمعرفة كيفية التعامل معها
كيف يمكننا البدء ؟
لتحقيق هذا المبدأ بكل بساطة كل ما علينا القيام به هو إنشاء Methods على ال Server و إرسال بيانات من خلال ال Post أو ال GET أو أي نوع أخر كما ذكر
وتقوم هذه ال Methods يتنفيذ مهامها مستعملة البيانات المرسلة وإرجاع صيغة مفهومة لدى ال Client والأفضل وهو ال JSON
فيكون المرجع مثل
أتمنى أن تكون هذه التدوينة مفيدة , دمتم بود وإلى مسودة أخرى