الملف المكتوب من الدرس الآول من دورة ASP.NET Web API 2

ASP.NET Web API Course

الدرس الأول

تعرف على ASP.NET Web API

الهدف من الدرس

التعرف على ASP.NET Web API ولماذا وجدت وفى أى حالة يمكن إستخدامها وكيف يمكننا بالفعل إستخدامها فى تطبيقاتنا وما الهدف من وجودها فى الأصل , وما هى آلية عملها.

محتويات الدرس

  • مقدمة
    • Service

    • Service Types in .NET

  • ما هى ASP.NET Web API؟
  • التعريف بـ HTTPومما يتكون ؟
  • التعريف والتفصيل لكلاً من HTTP Request , HTTP Response؟
  • HTTP Methods

  • HTTP Status Code

  • HTTP Headers

  • HTTP Body

  • لماذا التفصيل فى HTTP؟
  • العودة إلى ASP.NET Web APIوالتعريف بها ؟
    • لماذا سأقوم بإستخدام ASP.NET Web API؟

    • التعريف بـ ASP.NET Web APIمن ناحية فنية وماذا تقدم لنا ؟

  • العلاقة بين Web APIوبين Web Form , MVC .
  • كيف أقوم بإستخدام ASP.NET Web API؟
  • تمرين فى كيفية بناء ASP.NET Web API .

مقدمة

فى كثير من المشروعات نحتاج إلى أن يكون المشروع الذى نعمل عليه قابلاً لإن يتواصل مع تطبيقات آخرى , هذة التطبيقات ربما تكون بلغات برمجة مختلفة وتعمل فى بيئات مختلفة عن التى نعمل عليها وعن اللغة التى نعمل بها, ولهذا لزم علينا إيجاد وسيلة للتواصل بين التطبيقات , ولابد لنا أن نعرف أن هذا التواصل لا يتم إلا فى وجود ما يعرف بإسم “Serviceأو الترجمة العربية لها خدمة” , ومن هذا نستخلص قاعدة :-إنه لابد من وجود Serviceليتم التواصل بين أكثر من تطبيق, وهذا التواصل , ما هو إلا , تمرير بعض البيانات بين التطبيق والتطبيق الآخر, بغض النظر كما ذكرنا من قبل عن نوع التطبيق ولغة وبيئة العمل التى بهما أنشأ التطبيق .

Service

فما معنى Service؟ …………… المعنى , خدمة يقدمها شخص أو مؤسسة , لأشخاص أو مؤسسات آخرى , مثال , شخص إشترى ماكينة لإسال رسال قصيرة SMS , فأوصل هذة الماكينة بالكمبيوتر , وكتب برنامجاً يستطيع أن يتواصل مع هذة الماكينة لتمكينه من إرسال رسائل قصيرة , وأراد هذا الشخص أن يجعل آخرون غيره يتمكنون من إستخدام هذة الماكينة لإرسال رسائل قصيرة , فماذا عليه أن يفعل ؟ …….. من المنطق أن يقوم بكتابة كود برمجى يعمل كحلقة وصل بين الماكينة وبين تطبيقات المستخدمين الاخرين , هذا الكود البرمجى له القدرة على إستقبال طلبات خارجية , والرد عليها , هذة الطلبات من البديهى أن تحمل بيانات تعمل كمدخلات لهذا الكود البرمجى , وبالفعل تعود للطالب ببعض البيانات نتيجةً لطلبه, وتكون هذة هى المخرجات التى يقدمها الكود البرمجى. هذا الكود البرمجى , يطلق عليه إسم Service ”. ولعلك سمعت بأمثلة كثيرة مثال خدمة تحويل العملات , وخدمة معرفة أحوال الطقس ودرجات الحرارة وغيرهم ,فالفكرة تكمن فى أن لدينا كود برمجى نريد أن يستطيع الآخرون الدخول عليه وتنفيذه من خارج التطبيق وربما نقل بعض البيانات منه وإليه .

ولكن كيف يتم التواصل بين الكود البرمجى وبين التطبيقات الآخرى ؟ ……. هذا الآمر يختلف حسب الطريقة المتبعة فى كيفية التواصل , وسنتعرف على هذة الكيفية فى الدروس القادمة إن شاء الله , ولكن هذة التواصل له طرق عدة , منا ما سنذكرة فى النقطة القادمة وهى أنواع الخدمات داخل .NET .

Service Types in .NET

فى البداية , تم إيجاد ما يعرف بإسم XML Web Service , ومنها إلى WCF Serviceومؤخراً كانت ASP.NET Web API , وكلاً منهم له دوره,وقد تشترك WCFمع Web APIفى نفس الهدف ولكن تبقى هناك بعض الحالات والإختلافات,وقد نذكر ذلك لاحقاً إن شاء الله رب العالمين, وفى هذة الدورة سنركز على ASP.NET Web APIوالله المستعان. فما هى ASP.NET Web API؟

ASP.NET Web API

نقول وبالله التوفيق , هى Framework لبناء خدمات قائمة على HTTPبإستخدام بيئة عمل .NET, فما معنى كلمة Framework؟ ………. يتم التعريف بإنه مجموعة من Classesالتى يعاد إستخدامها” ,وقد وضحنا من قبل ما المقصود بكلمة Serviceأو خدمة , فما معنى HTTP؟ …….. هو إختصار لإتفاقية نقل النصوص المتشعبة , وهو Hyper Text Transfer Protocol , ولا شك أننا نراه حين نتعامل مع مواقع الإنترنت , فهو المستخدم فى التواصل بين المتصفحات ومواقع الإنترنت المنتشرة ,ومثال على ذلك :-

http://www.asp.net/web-api

ولا يقتصر فقط على صفحات الإنترنت, بل يمتد إلى طريقة لنقل بيانات بين التطبيقات, وتقديم خدمات بين التطبيقات , ومن هذا نخرج بإن ASP.NET Web APIقائمة على HTTP , وعليه وجب علينا التعرف أكثر على HTTP , والله المستعان .

HTTP

كما ذكرنا من قبل , أنه إختصار Hyper Text Transfer Protocol , والمعنى إتفاقية لنقل النصوص المتشعبة , وهو وسيلة إتصال بين المتصفحات ومواقع الإنترنت , ويمتد ذلك إلى وسيلة لنقل البيانات بين التطبيقات بإختلاف أنواعها , سواءً كانت Webأو Client , أو ربما MobileأوTabletأوغيرهم من الإجهزة الحديثة , فالكلُ , ما دام أنه يفهم HTTPفلابد من أن تتم عمليه التواصل بنجاح.

HTTP Response / HTTP Request

التواصل هنا يتم بتقديم طلب من طرف ومن ثم الرد على هذا الطلب من الطرف الآخر , الطلب هنا يسمى Requestوعليه فهو HTTP Requestوالرد يسمى Responseوعليه فهو HTTP Response.

وكما رأينا عند كتابة العنوان التالى وهو :- Http://www.asp.netفى المتصفح , فإنه يقوم بإرسال Http Requestلهذا العنوان , وتفصيل هذا العنوان كما ترى :-

الإتفاقية (البرتوكول) المستخدمة فى نقل النصوص المتشعبة بين الأجهزة والتطبيقات.

HTTP

World Wide Web , وهو شبكة الإنترنت , والتى تسمى الشبكة العنكبوتية

WWW

يسمى Domainو Company Namrوhostوهو إسم الموقع المراد الإتصال به

asp.net

HTTP Request

فعند كتابة هذا العنوان فى المتصفح والضغط على Enter , فإننا بذلك نرسل طلباً إلى العنوان المحدد , ويتكون هذا الطلب من ثلاثة أجزاء ,وهم كما هو مبين بالشكل التالى :-

[Method ] [Path] [Version]

[Header]

[Body]

وكما ترى فلدينا ثلاثة أجزاء:-

[Method ] [Path] [Version]

فالجزء الأول, عبارة عن تحديد نوع الطلب من خلال تعريف Method , وكذلك تحديد المسار المراد وهو عنوان المصدر(Resource) المطلوب , وآخيراً , تحديد إصدار HTTPالمراد العمل به.

[Header]

والجزء الثانى, عبارة عن تحديد معلومات عن الطلب الصادر من الـ Client إلى الـ Server , وبه نحدد بعض البيانات التى يستخدمها الـ  Server فى تحديد المسار المطلوب وكيفية التفاعل معه .

[Body]

والجزء الثالث , عبارة عن المدخلات التى يرسلها الـ Clientإلى الـ Server ليستخدمها الأخير فى معالجة الطلب .

وهناك تفصيل أكثر من ذلك ولكن فيما بعد إن شاء الله , وإليك مثال على ذلك , لنأخذ العنوان التالى ( http://www.asp.net/web-api ) ليكون الطلب بالشكل التالى :-

GET web-api HTTP /1.1

Host : www.asp.net

هذا هو الشكل البسيط لطلب للعنوان المذكور بالأعلى , وجاء الآن وقت التفصيل فى هذا الطلب :-

Method

GET

Path

web-api

Version

HTTP /1.1

Host

Www.asp.net

Body

لايوجد

وبعد قليل سنأتى بتفاصيل أكثر عن هذا الموضوع , ولكن إليك صورة لكامل الطلب حتى ترى الصورة كاملة وسنرى التفصيل فيما بعد إن شاء الله :-

Accept : text/html, application/xhtml+xml, */*

Accept-Language : ar-EG,en-US;q=0.5

User-Agent : Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0)

Accept-Encoding : gzip, deflate

Host : http://www.asp.net

Proxy-Connection : Keep-Alive

ويمكن أيضاً أن يحتوى الطلب على بيانات Cookieومعلومات آخرى عن الطلب وما نريده .

            للإشتراك فى  دورة ASP.NET Web API 2  من هنـــــــــــــــــــــــــــا

HTTP Request Methods

رأينا بالأعلى مثالاً عليها وهى الدالة GET, ولابد أن يحتوى كل طلب على واحدة من هذة الدوال , والتى بدورها تدل على نوع الطلب , وفى حالة أن الطلب يحمل الدالة أو الأمر GETوتسمى إنجليزياً (Method , Verb ), يعنى ذلك , أن الطلب تم إرساله للحصول على بعض البيانات, وأنه ينتظر أن يرد عليه الـخادم ببعض البيانات , وإليك الدوال الرئيسية التى يستخدمها HTTPفى تعريف نوعية الطلب:-

الوصف

Method/Verb

لإخبار الـ serverأننا نريد الحصول على بعض البيانات

GET

لإخبار الـ serverأننا نريد إضافة بعض البيانات

POST

لإخبار الـ serverأننا نريد تحديث بعض البيانات

PUT

لإخبار الـ serverأننا نريد حذف بعض البيانات

DELETE

لإخبار الـ serverأننا نريد معلومات عن الـ HTTP Header

HEAD

HTTP Request Header

يمثل الـ Header فى الطلب كحامل معلومات إلى الخادم , فمنها على سبيل المثال كما رأينا , Host والتى تشير إلى العنوان المطلوب , ويوجد أيضاً Accept والتى نستخدمها فى إخبار الـ Server بنوع البيانات الذى ينتظره الـ Client , وكذلك يوجد  User-Agent والتى بدورها تحدد نوع المتصفح (Client) الذى قام بإرسال الطلب, وإليك بعضاً منها :-

الوصف

Header

لتعريف العنوان المراد الوصول إليه

Host

لتحديد نوع البيانات المنتظره من الـ Server

Accept

لتحديد الـ Encodingوويقدم حلاً لمشاكل تحميل الموقع بشكل أسرع.

Accept-Encoding

لتحديد الـ Character setsوله فائدة فى حل مشاكل اللغة العربية فى العرض

Accept-Charset

لتحديد الجهة السابقة القادم منها الطلب ,وبه نعرف من أى موقع قدم إلينا الزائر

Referer

لتحديد البيانات المخزنة فى الـ Cookieالمرسلة من المتصفح إلى الخادم .

Cookie

لتحديد اللغات التى يقبلها المتصفح

Accept-Language

لتحديد حجم البيانات المرسلة فى الـ Bodyإلى الـ Serverإن وجد

Content-Length

لتحديد نوع البيانات المرسلة فى الـ Bodyإلى الـ Serverإن وجد

Content-type

نستخدمها فى تعريف طلبات تتم بإستخدام AJAX.

X-Requested-With

وغيرهم كثير, وسأرفق لك إن شاء الله ملفاً مستقلاً يبين Headersوآخر يبين Methodsضمن ملفات الدرس.

HTTP Request Body

كما ذكرنا من قبل, أنه, عبارة عن المدخلات التى يقوم المتصفح بإرسالها إلى الخادم , وتكون هذة المدخلات من النوع الذى تحدده فى الـ Content-Type الذى يتم تعريفه فى Header , ولابد على الجهة الآخرى أن يتعرف الخادم على هذا النوع من البيانات , فقد تقوم بعمل نوع خاص بك وتعالج ذلك على الخادم , فمثال على الأنواع المتعارف عليها , أن تكون المدخلات من نوع string أى نص عادى , وربما يكون JSON أو ربما  XML أو نوع مخصص مثل csv , وتلعب الـ Serialization دوراً مهماً على الخادم فى فهم هذة المدخلات وتحويلها إلى CLR Object , أى تقوم بتحويلها إلى Objects تعمل مع بيئة .NET. و سنرى أمثلة لذلك كثيرة جداً فى الدروس القادمة , بل على مدار دروس الدورة إن شاء الله .

HTTP Response

يرد الخادم على الطلب مهما كان الناتج , أى أنه يرد حتى وإن لم يكن المصدر(على سبيل المثال , صفحة , ملف , صورة أو غيرهم ) المطلوب موجود , ففى كل الأحوال يقدم رداً , ولكن يختلف محتواه , وإليك رسماً لمحتوياته

[version] [status] [ reason]

[headers]

[body]

وكما ترى هنا أيضاً , لدينا ثلاثة أجزاء , مثلما كان فى محتويات الـ Request مع وجود بعض الإختلافات, ولكن يبقى المعنى واحد.

[version] [status Code]

فالجزء الأول, يحتوى على تحديد إصدار HTTP وكذلك حالة الطلب, والحالة (Status ) هنا يقصد بها النجاح أو الفشل أو ربما غيرهم , مع الرسالة المصاحبة للحالة (ٍStatus) وسنفصل بعد قليل.

[headers]

والجزء الثانى, هو لتحديد بعض المعلومات عن الرد الناتج من الـServer بناءاً على طلب المتصفح (Client) ويختلف مع الـ  Header الخاص بالـ Request فى بعض الخصائص.

[Body]

والجزء الثالث , عبارة عن المخرجات التى يرسلها الـ Serverإلى الـ Clientليستخدمها الأخير فى معالجة الرد , وعرضه للمستخدم إن أمكن ذلك.

HTTP Response Status Code

وبه نستطيع معرفة الحالة التى عليها الطلب, من نجاح أو فشل أو تفصيل لغير ذلك مثال, وجود خطأ فى صلاحية الدخول, أو أن المصدر المطلوب غير موجود, أو أن هناك خطأ فى الخادم أو غير ذلك من الحالات التى سنراها بعد قليل , وجدير بالذكر , أن كل حالة تحمل رقماً يميز تلك الحالة بجانب الرسالة المصاحبة لها, يتكون هذا الرقم من ثلاثة أرقام وإليك التفصيل:-

  • الأرقام التى تبدأ من 100إلى 199تحمل رسالة بها معلومات عن الطلب ومراحله.

  • الأرقام التى تبدأ من 200إلى 299تحمل رسالة تفيد نجاح الطلب والرد عليه.

  • الإرقام التى تبدأ من 300إلى 399تحمل رسالة تفيد بإن هناك عملية إعادة توجيه Redirection .

  • الأرقام التى تبدأ من 400إلى 499تحمل رسالة تفيد بإن هناك خطأ فى المتصفح (Client ).

  • الأرقام التى تبدأ من 500إلى 599تحمل رسالة تفيد بإن هناك خطأ فى الخادم (Server ) .

وإليك بعضاً من هذة الأرقام وسيتم إرفاق ملفاً بمجمل هذة الأرقام ضمن محتويات الدرس إن شاء الله رب العالمين

الوصف

Code

يبين أن الطلب تم الرد عليه بنجاح.

200 OK

يبين أن الطلب تم بنجاح , وأنه تم إنشاء Resourceجديد

201 Created

يبين أن العنوان المطلوب تم تغير مكانه بشكل دائم , ويجب الوصول إليه من خلال العنوان الجديد المعطى ضمن الرد.

301 Moved Permanently

يبين أن الـ Resourceالمطلوب لم يتم تحديثه بعد آخر مرة تم وضعه فى الـCache, ولذلك يمكن إستخدام النسخة الموجودة منه فى الـ Cache.

304 Not Modified

يبين أن المستخدم لايملك الصلاحية المطلوبة للدخول على هذا الـ Resource (ملف , صفحة , صورة , وغيرهم ).

403 Forbidden

يبين أن الـ Resourceالمطلوب غير موجود .

404 Not Found

يبين أن الخادم لديه مشكلة ما

500 Internal Server Error

يبين أن الخادم لا يستطيع تنفيذ الـ Request Method , مثال (GET, put , وغيرهم , ولكن هذا وفقاً لما نقوم بضبطه فى الخادم وسنعرف ذلك فى درساً قادم إن شاء الله , كأن نمنع آحد من تحديث بيانات , أى نمنع العمل بإستخدام Put ).

501 Not Implemented

بقية الأرقام والرسائل تجدهما فى الملف المرفق ضمن محتويات الدرس إن شاء الله .

            للإشتراك فى  دورة ASP.NET Web API 2  من هنـــــــــــــــــــــــــــا

HTTP Response Header

كما أشرنا من قبل , أن الـ Header هو بيانات عن الطلب المرسل من الـمتصفح (Client ), كذلك فى هذة الحالة هو بيانات عن الرد المرسل من الـخادم ( Server ), وقد تعرفنا على بعضا ً من الخصائص المستخدمة فى تعريف الـ Header , لذلك لن نكرر , ولكن سنورد ما يخص الـ Response .

الوصف

Header

نعرف منها حالة ناتج الطلب, وهى المعروفة بـ Status Code.

Status

نجدها فى حالة أن الطلب تم بـ Postوكذلك مع وجود الحالة 201Created , وكما أشرنا ,أنه فى هذة الحالة , فقد تم إنشاء resourceجديد , وعليه فستجد عنوان الـResourceالجديد فى هذة الخاصية.

Location

نعرف من خلالها إسم الخادم مثال ,IISأو Apache .

Server

نعرف من خلالها بأى تقنية تم إنشاء الموقع مثال , ASP.NETأو PHP.

X-Powered-By

يمكن من خلالها إسناد قيم إلى الـ Cookies , والتى نريد إن نرسلها إلى المتصفح.

Set-Cookie

كما أسلفنا التعريف لهذة الخصائص , أنها تخص المحتوى الموجود فى الـ Bodyومنها نوع وحجم وتشفير البيانات المرسلة من الخادم إلى المتصفح.

Content-Type , Content-Length , Content-Encoding

HTTP Response Body

لاشك أن الطلب قد يحمل رداً به محتويات, قد يكون الرد بملفاً معداً للتحميل وذلك فى حالة عمل download, أو ربما عرضاً لعناصر HTML وذلك فى حالة إستعراض صفحة ما , أو ربما يرد بـ Object يحمل بعض البيانات وذلك فى حالة إرسال الطلب بإستخدام Ajax , أو ربما بيانات من نوع XML أو غير ذلك .

ولاشك أنه لابد من وجود حالة من التوافق بين المتصفح والخادم فى فهم البيانات المرسلة بينهما, ويتولى أمر المعالجة لهذة البيانات كلاً من لغة JavaScript فى المتصفح ,ولغة C#/vb فى الخادم , وغير ذلك , ستكون البيانات لا فائدة منها , لإنها حينها تكون غير مفهومة .

لماذا التفصيل فى HTTP؟

تدور هذة الدورة حول دراسة  ASP.NET Web API وهى فى جورها تعتمد إعتماداً كلياً على HTTP, لذلك فإننا لابد علينا أن ندرك المفاهيم السابق التفصيل فيها مثل Request, Response,Header,Status ,ولاشك Body, وفهمها من الآن يتيح لك إدارك الكثير من الأمور على مدار الشرح للدروس القادمة إن شاء الله, وحرصت على أن أفصل فيها هنا عن قصد, حتى نأتى بالأمر من أوله ولا يشعر أحدكم أن هناك غموضاً فى شئ.

عودة إلى ASP.NET Web API والتعريف بها

إذاً, فـ ASP.NET Web APIعبارة عن Framework لبناء Serviceقائمة على HTTP “, وقد فصلنا معنى كلاً من Frameworkوservice وكذلك HTTP , والآن نأتى للتفصيل فى مجمل التعريف , نجدها مجموعة من الـ Classes تتيح لنا بناء Service وسبق لنا المعرفة بإن Service هى كود برمجى يقبل الدخول من الخارج من أكثر من مكان بغض النظر عن اللغة وبيئة العمل, هذة الـ Service تستقبل طلبات من الخارج , تكون هذة الطلبات عبارة عن HTTP Request , فيتم توجيه هذا الطلب إلى جزءاً معيناً من الكود , ويتم تنفيذه , بداخل هذا الجزء من الكود يتم إعداد الرد على هذا الطلب, ومن ثم تسليمه إلى المتصفح فى هيئة HTTP Response.

ومن هذا فكل المتصفحات على إختلاف أنواعها تستطيع أن تتفاعل مع ASP.NET Web API , وكذلك كل اللغات التى تمتلك القدرة على التعامل مع HTTP, يمكنها أيضاً أن تتفاعل مع ASP.NET Web API مثال لغة C# /VB ولغة Java وغيرهم , ولا يقتصر الأمر على تطبيقات الويب , بل يمتد إلى تطبيقات سطح المكتب وكذلك تطبيقات الهواتف الذكية , وكافة الإجهزة الحديثة.

لماذا سأقوم بإستخدام ASP.NET Web API؟

من الفقرة السابقة , يتضح لنا أن ASP.NET Web API , يمكنها أن تصل إلى العديد من الأجهزة مما يوفر لها إنتشاراً دون قيود , ليتمكن الجميع على إختلاف لغاتهم وتطبيقاتهم من إستخدام الـ   Service الخاصة بك فى تطبيقاتهم , وهذا يعطى للخدمة التى تقدمها ميزة سعة الإنتشار دون قيود “.

ولكن ما الغرض الذى يجعل التطبيقات الأخرى على إختلاف أنواعها فى حاجة إلى ASP.NET Web API؟ وكأنك تسأل ماذا يجعل التطبيقات تحتاج إلى Service؟……. فقد تقدم شرحاً لمعنى كلمة Service وما الهدف من وجودها , أما ما الذى يجعل إستخدامنا لـ ASP.NET Web API بالتحديد دون غيرها ؟ ….. تأتى الإجابة على هذا السؤال فى التعريف بها من ناحية فنية , لنرى ماذا تقدم لنا Web API , فى النقطة التالية .

التعريف بـ  ASP.NET Web API من ناحية فنية

ظهرت Web APIمع ظهور MVC 4 , حيث تم بنائها إعتماداً على آلية عمل ASP.NET MVC , وعلى ألية عمل الـ Routing على وجه الخصوص, فتم الإعتماد على وجود Controller وبه مجموعة من Action Methods وعليه يتم توجيه الطلب إلى إحدى هذة الـ Methods , لتقوم بدورها بإعداد الرد على الطلب القادم وإرساله للطالب مرة آخرى.

وكما سبق وأشرنا, أنها تعتمد على HTTP, فهذا يعطيها ميزة على غيرها, فتستقبل الطلب مع تحديد نوع الطلب إن كان بإستخدام GETأو DELETEأو POST أو غيرهم , ومن ثم توجهه إلى الـ Action Method الخاص بها داخل الـ Controller الذى هو بدوره يمثل لنا الـ Web API .

وحيث أن الـ Web API قائمة ضمن حقبة ASP.NET فلاشك , أن لـASP.NET أثر كبير عليها , ومن هذا الأثر , نجد التالى :-

  • دعم Model Binding كما هو الحال فى   Web Forms و MVC .
  • دعم Model Validation كما هو الحال مع إستخدام Data Annotation .
  • دعم التفاعل مع HTTP من حيث الأخطاء (HTTP Exceptions ) وبها تستطيع أن تتحكم فى الأخطاء الناتجة عن الطلبات القادمة ومن ثم الرد على الطالب بخطأ HTTP يكون قادراً على فهمه .
  • دعم التفاعل أكثر مع HTTP من حيث القدرة على إنشاء وفهم كلاً من HTTP Request و HTTPResponse , مما يجعلك تتحكم فى كلاً من Headers و Body و Status Code وغيرهم .
  • دعم  Action Filters الموجودة فى MVC مما يمكنك من تنقية الطلبات القادمة والتحكم بها .
  • دعم Content Negotiation وهو ما يمكن به التحكم فى المخرجات لتكون بالنوع الذى نريد.
  • توفير وسيلة إتصال بنفسها من خلال ما يعرف بـ HttpClient , حيث أنه يساعد فى إتصال بقية التطبيقات بها داخل إطار .NET مع توفير الكثير من المزايا والمرونة .

كل هذا ويزيد سنتطرق إليه فى دروس قادمة مع المزيد من التفصيل إن شاء الله رب العالمين.

            للإشتراك فى  دورة ASP.NET Web API 2  من هنـــــــــــــــــــــــــــا

ASP.NET Web API in Code

إذا تحدثنا عن Web API فى الكود, فنجد أنها عبارة عن Class لها ثلاثة شروط :-

الشرط الأول :-أن تحمل إسماً ما, ولا يشترط إسما بعينه, ولكن يشترط أن يتم إلحاق كلمة Controller بهذا الإسم, مثال ProductController و CustomerController.

الشرط الثانى :- أن ترث من ApiController, حيث أنها بدورها ستعطيها صفات Web API.

الشرط الثالث :- أن تحتوى على مجموعة من الدوال, بحيث تتوافق هذة الدوال بالإسم أو بالصفه مع Http Methods مثال :- GET و POST و PUT و DELETE و  HEAD وغيرهم.

سترى بعد قليل مثالاً لـWeb APIبشكلها البسيط (فى الصفحة التالية ).

ASP.NET Web API in Project

كما ذكرنا أن Web API فى المشروع تمثل Class ,ولكن لابد, أن نقوم بإضافة بعض المكتبات حتى تتخذ هذة الـ Class صفة Web API , تقوم هذة المكتبات بضبط الإعدادت مثال الـ Routing وكذلك إعطاء آلية عمل الـ Web API وتعاملها مع HTTP.

هذة المكتبات يمكن أن تضاف تلقائياً عند إنشاء مشروع يحتوى على Web API أو يمكن كذلك أن تضاف بإستخدام Nuget (يوجد لـ Nuget درساً على مدونتى http://tinyurl.com/mlfgpo9 ), وهذة المكتبات كالتالى :-

الوصف

Assembly

يقدم مكتبات أكواد للتعامل مع Messages .

System.Net.Http

يقدم البنية التحتية لعملية الإستضافة

System.Web.Http

يقدم مكتبات أكواد لدعم Model Binding

System.Net.Http.Formatting

يقدم مكتبات عامة كما يظهر من إسمه .

System.Web.Http.Common

يقدم مكتبات أكواد للإستضافة داخل ASP.NET

System.Web.Http.WebHost

يقدم مكتبات أكواد للإستضافة داخل التطبيق الموجود به ASP.NET Web APIونستخدم ذلك لإستضافتها داخل Client Application .

System.Web.Http.SelfHost

يقدم DataControllerوبها نجد عمليات حفظ وإستعلام وتحديث وحذف للبيانات من خلال Entity Framework

System.Web.Http.Data

تدعم السابق فى التعامل مع البيانات .

System.Web.Http.Data.EntityFramework

أكواد عامة لدعم Data API (التعامل مع EF ).

System.Web.Http.Data.Helpers

مثال على Web API فى الكود

public class ValuesController : ApiController

{

// GET api/values

public IEnumerable<string> Get()

{

return new string[] { “value1”, “value2” };

}

// GET api/values/5

public string Get(int id)

{

return“value”;

}

// POST api/values

public void Post([FromBody]string value)

{

}

// PUT api/values/5

public void Put(int id, [FromBody]string value)

{

}

// DELETE api/values/5

public void Delete(int id)

{

}

}

العلاقة بين Web API وبين Web Form , MVC

العلاقة بينهم تتمثل فى أنهم كلهم ضمن إطار ASP.NET , قد تختلف طريقة العمل فى أحدهما دون الآخر, ولكن الكل يتشارك مزايا ASP.NET , فعلى سبيل المثال لا الحصر , الكل يملك Model Binding , صحيح أن هذا الأمر ظهر مع ظهور MVC, إلا إن ذلك قد فتح الباب أمام إضافتها فى Web Forms والإستعانة بها عند ظهور Web API.

كيف أقوم بإستخدام ASP.NET Web API؟

فى البداية إستخدامها ليس قصراً على Web Forms أو MVC , فيمكن إستخدامها بمفردها, أو ضمن أحدهم , ولكن لابد أن نفرق , بين أن ننشأ Web APIوبين أن نستخدم Web API, فيمكننا أن نقوم بإنشاء Web API منفصلة فى تطبيق خاص بها , وممكن أن تكون مدمجة مع تطبيق آخر مثال Web Forms أو MVC أو حتى Client Application, أما الإستخدام فنقصد به استدعائها وتنفيذ أكواداها, فيمكن إستخدامها وتنفيذ أكوادها من الخارج من أى مكان لإنها بطبيعتها Serviceوأعدت لهذا الغرض, وذكرنا من قبل أنه, طالما أن هناك قابلية للعمل مع HTTPفإن هناك قابلية للعمل مع ASP.NET Web API.

يتيح Visual Studio إنشاء Web API والعمل معها, ومن ثم يمكننا نشرها على إستضافة خارجية أو داخليه على حسب الحاجة, وحينها يمكننا إستدعائها من أى تطبيق نشاء ولكن دعنا نوضح هذا الأمر قليلاً ومن ثم يأتى التفصيل فى الدروس القادمة مصحوباً بالتطبيق إن شاء الله .

أى لغة أو تقنية تستطيع أن ترسل طلبات للخادم بإستخدام HTTP فهى مؤهلة أن تتعامل مع Web API وتنفذ ما تريد منها من مهام , وإليك الحالات التالية التى لاشك أنك ستقابلها فى حياتك العملية :-

  • لدينا تطبيق سيعمل على الإنترنت بغض النظر عن كونه Web Forms أو MVC , فلا يهم النوع الإن , المهم لدينا هنا , أننا , نريد أن نقوم بتخزين نموذج قام المستخدم بملئه ,ونريد حفظ فى قاعدة البيانات , ولكن بدون حدوث Postback أى بدون إرسال كامل الصفحة إلى الخادم , فهنا تستطيع أن تنهى الأمر بإستخدام JQuery , وحيث Jquery لديها القدرة على التعامل مع HTTP من خلال الدوال الخاصة بـ Ajaxفتستطيع أن ترسل طلبات (Requests ) إلى Web API وتعطيها ما تريد أن تقوم بتخزينه, ومن هنا نستخلص أن , JQuery تستطيع التفاعل مع ASP.NET Web API .

  • حالة آخرى , لدينا تطبيق Client Application سواءً كان Windows Forms أو WPF Forms أو حتى Console Application , ونريد أن نتفاعل مع Web API موجودة على خادم بالخارج أو بالداخل ونقصد هنا بخارج الشبكة أو بداخلها , فكيف يستطيع الإتصال بها ؟ …….. وفرت لنا Microsoft ما يسمى HTTP Client وهى مكتبة أكواد(Library) تستطيع من خلالها التعامل بمرونة مع ASP.NET Web API من إرسال وإستقبال بيانات إليها. مع العلم بوجود مكتبات أكواد تستطيع التعامل بهما مع HTTP مثال HttpWebRequest و WebClient من قبل داخل .NET إلا أن HTTP Client تحمل المزيد من المرونة, غير أنها أعدت خصيصاً لخدمة Web API , بالإضافة إلى دعمها لإجراء طلبات من نوع Asynchronous ( أى بدون توقف البرنامج حتى يصل الرد).

  • حالة ثالثة آخرى , لدينا تطبيق Mobile Application , ونريد أن يتفاعل مع خدمة موجودة على خادم خارجى , فإن كان Windows Phone Application , فلدينا HttpClient , لإننا حينها نكون ضمن إطار .NET , وإن كان Android Application فيمكن أن ننظر ماذا تقدم لنا Java , وكذلك الأمر مع OS ومعها Objective C وغيرهم.

خلاصة الأمر, فى التطبيق العملى, أمامك طريقتان, إذا كنت داخل Web Application فلديك JavaScript أو أحد مكتباتها مثال, JQuery و مثال   AngularJS و emberJs وغيرهم .وإذا كنت فى Client App فلديك  HttpClient وما تقدمه لك فى كيفية إتصالك بـ Web API , وإن كنت فى Mobile Application فهناك إختياران, إن كنت فى بيئة .NET فيمكنك العمل مع HttpClient, وإن كنت فى بيئة غير . NET , فإنظر ماذا تقدم لك اللغة التى تستخدمها من طرق للتواصل مع HTTP.

تمرين فى كيفية بناء ASP.NET Web API

ظهرت Web API مع MVC4 ولذلك عندما نحتاج أن نعمل مع Web API فإننا نقوم بالعمل مع تطبيق MVC 4 , ولكن هذا عند العمل مع Visual Web Developer 2010 , فعند إنشاء مشروع جديد , تظهر لك النافذة التالية , ولاحظ الإختيارات التى قمنا بها :-

صورة

بعد الضغط على  Ok تظهر لنا النافذة التالية :- 

صورة

بعد الضغظ على OKنرى أنه قد قام بفتح التطبيق الجديد , ونرى فيه التالى :-

صورة

كما ترى من الصورة السابقة , أننا لدينا مشروع MVC , مضافاً إليه ValueController , تصفح بذلك بنفسك لترى الإضافات , فى مجلد Controllerوكذلك مجلد Referencesوآخيراً مجلد App_Startلترى فيه مجلد WebApiConfig .

بإستخدام Visual Studio Ultimate 2013

بعد إختيار New Project تظهر لنا النافذة التالية ولا حظ الإختيارات فيها :-

صورة

ومن ثم الضغط على Okلنرى النافذة التالية :- 

صورة

لاحظ أنه فى هذة الصورة , قد قام بتحديد MVCو Web APIتلقائياً فى الجزء الأسفل , عند تحديد Web APIفى الجزء الأعلى , وبعد الضغط على OK , يبدأ بفتح المشروع على الهيئة التى ترى أمامك :-

صورة

فى الدرس القادم إن شاء الله, سنقوم بالتفصيل أكثر وأكثر فى Web APIوسنتعرف على إنشاء Web APIمن الصفر ووكيفية ضبط إعدادتها وكيفية بنائها فى تطبيقات Web Formsو كذلك فى WPF Application ,وسنتعرف على أداة رائعة وهى Fiddlerونفصل فيها ونستخدمها فى الـ Debugging. والله المستعان .

            للإشتراك فى  دورة ASP.NET Web API 2  من هنـــــــــــــــــــــــــــا

أضف تعليقاً

إملأ الحقول أدناه بالمعلومات المناسبة أو إضغط على إحدى الأيقونات لتسجيل الدخول:

WordPress.com Logo

أنت تعلق بإستخدام حساب WordPress.com. تسجيل خروج   / تغيير )

صورة تويتر

أنت تعلق بإستخدام حساب Twitter. تسجيل خروج   / تغيير )

Facebook photo

أنت تعلق بإستخدام حساب Facebook. تسجيل خروج   / تغيير )

Google+ photo

أنت تعلق بإستخدام حساب Google+. تسجيل خروج   / تغيير )

Connecting to %s