ماهو ال 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

فيكون المرجع مثل

المرجع من ال Server عند الطلب
المرجع من ال Server عند الطلب

أتمنى أن تكون هذه التدوينة مفيدة , دمتم بود وإلى مسودة أخرى

5 التعليقات

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

  2. مرحبا ارجو الرد منك سيد hkurd

    انا غارقة بمشكلة بخصوص هذا الهجوم و احتاج توضيح مهم د

أترك رد