عموميات حول نمط REST لبناء تطبيقات ويب حديثة قائمة على HTTP

0


مقدمة: ما هو REST؟

هي اختصار ل Representational State Transfert، وهي عبارة عن نمط بنيوي Architectural Style يهدف إلى الاستفادة من مزايا بروتوكول HTTP لتفادي تعقيدات النمط السابق الذي كان يعتمد على بروتوكول Soap كما هو الحال في web services، ويسمح لنا نمط REST بتفادي تكرار المهام، خاصة وأن بروتوكول HTTP يقدم مسبقا مجموعة من الوظائف التي تسمح لنا بالقيام بالعمليات على الموارد resources  هذه العمليات من قبيل الإضافة، الحذف، التعديل، الاستعراض وما إلى ذلك، كما يتميز نمط REST بكونه أكثر قياسية more standardized مقارنة ب Soap ونقصد بالقياسية هنا أن مكونات HTTP متعارف عليها ومفهومة من قبل الأشخاص والتطبيقات والأنظمة.
بالإضافة إلى العديد من المزايا الأخرى التي تجعل نمط REST يفرض وجوده في مجال تطوير الخدمات مؤخرا.
وحتى نختصر الأمر برمته، يمكننا القول إن الغرض الأساسي من نمط REST هو الاستفادة الكاملة من مزايا HTTP في بناء الخدمات، وتسمى هذه الخدمات RESTful API أو HTTP-based services.

ماهي مبادئ REST؟

يقوم أسلوب REST على مجموعة من المبادئ وهي كما يلي:

1. مبدأ خادم / عميل Client / Server

مبدأ خادم / عميل، والذي نقصد به أن العميل يرى فقط URI وتمثيل Resource (أي نتيجة التنفيذ: صورة، بيانات، ...)، بينما لا يستطيع أن يرى أين يتم تخزين Resource، وبالمقابل فإن الخادم لا ينبغي أن يعرف هل العميل يملك Resource معين، بمعنى أن المهام موزعة بين الخادم والعميل وبالتالي الأمور الداخلية للخادم والعميل ممكن أن تتغير دون أي تأثير على المكون الآخر.

2. مبدأ الحالة الموحدة Uniform Interface

النواة الأساسية في خدمات REST هي resource، والذي نقصد به المكون الذي نتعامل معه إما بالقراءة، أو الإضافة، أو التعديل أو الحذف وما إلى ذلك، هذا المكون في الحقيقة هو أي شيء يمكننا الوصول إليه من خلال رابط URI، وليس شرطا أن يكون ملفا كالصورة أو الفيديو أو ملف مضغوط وما إلى ذلك، بل من الممكن أن تكون resource منتوج، مقالة، طالب، وظيفة، يعني أي عملية على كلاس معين تسمح لنا بالوصول إليها من خلال رابط URI.
ويعتبر هذا الرابط معرفا لل Resource إذ أنه يكون متفردا وغير متكرر، ولا يمكن لل URI الواحد أن يؤشر لأكثر من Resource، على سبيل المثال لو عندك رابط لتحميل ملف معين، فهذا الرابط يمثل معرفا لهذه Resource وعند الدخول إلى هذا URI سيأخذك إلى الملف الخاص به وليس إلى Resource أخرى، ويسمى هذا المبدأ في نمط REST بالواجهة المحددة Uniform Interface أي أن كل Resource لها Identifier يسمح بالوصول إليها.
ليس بالضرورة أن يكون Resource المحصل عليه من URI ملفا، ممكن أن يكون بيانات خاصة بأوبجكت معين، كما ذكرنا قبل قليل، كأن يكون مقالة إن كانت API الخاصة بنا تتعامل مع المقالات، أو ممكن أن تكون وظيفة إن كانت API تتعامل مع الوظائف وهكذا دواليك.
باختصار أي شيء يمكننا الوصول إليه عبر URI، فهو Resource.

3. مبدأ انعدام الحالة Statelessness

من بين مبادئ REST أيضا، أن السيرفر لا ينبغي أن يخزن معلومات حول Client، ويعني هذا الكلام أن العميل حينما يرسل طلبا Request للخادم، فإن هذا الأخير يقوم بجلب البيانات من قاعدة بيانات، ويقوم بإرسال الجواب Response إلى العميل، بعد إرسال الجواب إذا تغيرت البيانات في المكان المخزنة فيه فإن العميل لا يصله خبر بذلك.
ويسهم مبدأ انعدام الحالة في تحسين عمل السيرفر لأنه يتعامل مع كل Request بشكل مستقل دون الحاجة أن يحفظ معلومات عن Client مما يضمن سرعة أداء السيرفر وقدرته على الرد على طلبات العملاء الآخرين.
ويسمى هذا المبدأ بانعدام الحالة Statelessness.
كما يعني انعدام الحالة أيضا أن السيرفر لا ينبغي له أن يستعمل Sessions أو أي آلية من آليات تخزين معلومات العميل، وأن كل طلب غير مرتبط بالطلبات السابقة أو اللاحقة.

4. مبدأ قابلية الإخفاء Cacheability

يرتكز نمط REST أيضا على مفهوم الإخفاء Cache والذي يعني أن على السيرفر إمداد العميل بمعلومات إخفاء Resource وذلك بغرض تسهيل عملية التصفح، بحيث إذا تمكنا من إدارة عملية الإخفاء بشكل جيد فإننا سنتفادى العديد من إرسال الطلبات إلى السيرفر لأن البيانات التي نحتاجها ستكون مخزنة محليا في Cache. 

5. مبدأ نظام الطبقات Layered System

قلنا مسبقا أن العميل يعرف فقط القليل عن الخادم (هذا القليل يتمثل في URI وResource Representation)، فهو لا يعرف على سبيل المثال هل هو متصل مباشرة بالخادم، أم أنه يمر عبر وسيط Proxy، أو خادم بيني، ...
ويسمى هذا المبدأ في REST بنظام الطبقات Layered System.

6. مبدأ الكود عند الطلب Code on Demand

يمكن للخادم أيضا أن يرسل أكواد تنفيذية للعميل للقيام بعمليات معينة، كأن يتم تمرير أوامر جافا سكريبت إلى العميل، ويسمى هذا المبدأ بمبدأ الكود عند الطلب Code on Demand.

خاتمة

بعد أن تعرفنا على أساسيات نمط REST سوف نتعرف على تطبيقاته مع ASP.NET Web API من خلال عدة مقالات ننشرها تباعا هنا على المدونة، وكذلك من خلال دورة مرئية سنقوم ببثها على قناتنا في اليوتيوب إن شاء الله.
دام لكم البشر والفرح !

لا يوجد تعليقات

أضف تعليق