دروس قوية من المهندس حسام خاصة بمجال الدوت نيت وتقنيات ميكروسوفت

3


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

من هو المهندس حسام؟

من العرب القلائل الذين حازوا جائزة Microsoft MVP منذ عام 2013، ويعد مستشارا في Xamarin، Xamarin Consultant، يقوم بتنظيم دورات تكوينية في تقنيات الدوت نيت، وينشر مقالات تقنية على مدونة Microsoft MSDN و CodeProject، كما يقدم محاضرات و ورشات لتأطير المبرمجين.

ما الذي يوجد في قناة المهندس حسام؟


توجد دورات عديدة يتناول من خلالها المواضيع التالية:
·       Kubernetes with Azure and Azure DevOps
·       DevOps for Database
·       Unit & UI Tests
·       Cross Platform Apps with Xamarin Forms
·       ASP.NET with Visual Studio
·       Azure Cognitive Services
بالإضافة إلى دروس أخرى متنوعة ستجدونها على قناته، وهذا رابطها:


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

دام لكم البشر والفرح !

عموميات حول البروتوكول HTTP للدخول إلى مجال RESTful API

3



لأن اتجاه صناعة البرمجيات في الآونة الأخيرة بدأ يتجه نحو نمط REST الذي يسمح بالوصول إلى خدمات الويب من خلال بروتوكول HTTP، بحيث يصير من السهل استعمال هذه الخدمات في مختلف الأنظمة والأجهزة لأن هذا البروتوكول متعارف عليه من قبل الجميع (أشخاص وأنظمة).
فإنني أنصح جميع الإخوة والأخوات أن يتجهوا نحو هذا المجال لأنه في نظري ركيزة الحاضر والمستقبل إن شاء الله.
ولمن لم يسبق له أن سمع بمصطلح REST أو RESTful API أو HTTP-based services فهذه المقالة قد توضح له بشكل عام هذا النمط، والمبادئ التي يقوم عليها.
لكن من أجل الغوص أكثر في هذا المجال، لابد لنا من الاطلاع على الحد الأدنى من المعلومات الخاصة بكيفية اشتغال بروتوكول HTTP وهو ما سنتعرف عليه في هذه المقالة إن شاء الله.

يسمح لنا بروتوكول HTTP بالقيام بعدة مهام على الويب، استعراض صفحات المواقع، إرسال البيانات إلى السيرفر، وتتم هذه العمليات عبر آليات يقدمها هذا البروتوكول وتسمى بالأفعال Verbs أو وظائف Methods، ولعلنا نعرف مسبقا أنه من ضمن هذه الأفعال نجد GET وPOST ، كل من هذين الفعلين يشتغل في ظرفية معينة، حينما نأتي على سبيل المثال وندخل إلى الرابط التالي:


فإن المتصفح الذي نستعمله يعرف من مقدمة الرابط أعلاه أن العملية عبارة عن طلب من نوع Http أو ما يعرف ب http Request، فيقوم بفتح صفحة الموقع.
ويمكن لطلبات http أن تكون من نوع GET أو من نوع POST، نستعمل GET حينما نريد جلب Resource معينة، كاستعراض صفحة، تحميل صورة، وما إلى ذلك، ونستعمل POST verb حينما نريد أن نرسل البيانات إلى الخادم، مثلا الاشتراك في موقع، كتابة تعليق، وما إلى ذلك من عمليات تستلزم إرسال البيانات إلى الخادم.
يعتبر فعل GET فعلا آمنا safe verb، لأنه لا يؤثر على Resource بل يقوم فقط باستعراضها، بينما يعد الفعل POST فعلا غير آمن unsafe verb لأنه يقوم بإرسال بيانات إلى السيرفر، لذلك إذا قمت بعمل تحديث للصفحة في وضع GET سيتم جلب آخر حالة لل Resource بينما إذا قمت بتحديث الصفحة في وضع POST فإن المتصفح سيسألك عبر رسالة تأكيدية.
توجد بعض الأفعال الأخرى التي يقدمها Http، نذكر بعضها في هذا الجدول:

الفعل
مثال على الرابط
الوصف
GET
http://localhost/courses
جلب جميع الدورات
GET
http://localhost/courses/1
جلب الدورة التي معرفها 1
POST
http://localhost/courses
إنشاء دورة جديدة
DELETE
http://localhost/courses/1
حذف الدورة التي معرفها 1
PUT
http://localhost/courses/1
تحديث الدورة التي معرفها 1
PATCH
http://localhost/courses/1
التحديث الجزئي للدورة التي معرفها 1
OPTIONS
http://localhost/courses/1
جلب العمليات المتوفرة على Resource
HEAD
http://localhost/courses/1
جلب http header فقط

تسمح لنا هذه الأفعال بتحديد طبيعة المهمة التي على URI القيام بها، إذ يكفي أن نحدد الفعل المرتبط بال URI ليتم تنفيذه.
يمكننا باستعمال بعض الأفعال السابقة أن نقوم بالعمليات الأساسية على البيانات فقط من خلال تحديد URI والفعل المناسب له، ونتحدث هنا عن عمليات CRUD والتي ترمز ل Create, Read, Update and Delete. وهو العمل الذي تقوم به تطبيقات REST حيث تستفيد من هذه الأفعال من أجل القيام بعمليات على الموارد Resources.
نكتفي بهذا القدر، دام لكم البشر والفرح!

عموميات حول نمط 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 من خلال عدة مقالات ننشرها تباعا هنا على المدونة، وكذلك من خلال دورة مرئية سنقوم ببثها على قناتنا في اليوتيوب إن شاء الله.
دام لكم البشر والفرح !