460 likes | 972 Views
خدمات الويب (Web Services) و كيف تنشئها . صالح الزيد مهندس برمجيات. نقاط المحاضرة. ما هي خدمات الويب و لماذا؟ أنواعها و تقنياتها كيف ننشئ خدمة ويب الحماية في الاتصال بخدمات الويب استعراض لخدمات ويب فيسبوك وتويتر. مقدمة عن خدمات الويب. ما هي خدمات الويب؟.
E N D
خدمات الويب (Web Services)و كيف تنشئها صالح الزيدمهندس برمجيات
نقاط المحاضرة • ما هي خدمات الويب و لماذا؟ • أنواعها و تقنياتها • كيف ننشئ خدمة ويب • الحماية في الاتصال بخدمات الويب • استعراض لخدمات ويب فيسبوك وتويتر
ما هي خدمات الويب؟ • خدمة أو مجموعة من الخدمات يقدمها موقع ويب • يستطيع أي موقع أو تطبيق أخر الاتصال بها و الاستفادة منها • تعطي نتائج (ملفات) بصيغ معينة مثل JSON و XML • بالاتصال عن طريق البروتوكولات معروفة ومتداولة (HTTP) • خطوة لتحويل موقع لتطبيق ويب
موقع يعرض جامعات ومعلومات الطلاب فيها HTTP موقع أو تطبيق JSON, XML أسماء الجامعات مواد الطالب في فصل دراسي أسماء الطلاب في جامعة عدد الطلاب في جامعة معلومات طالب صفحات الموقع API
لماذا خدمات الويب؟ • تسهيل الوصول للبيانات • توفير جهد معالجة الأوامر ووقت برمجتها
تقنيات خدمات الويب • SOAP (Simple Object Access Protocol) • WSDL (Web Services Description Language) • UDDI (Universal Description, Discovery and Integration) • REST (Representative State Transfer)
REST • تعتمد على أوامر بروتوكول الـHTTP الاعتيادية وهي:GET, POST, PUT, DELETE • تقوم باسترجاع صفحة بصيغة JSON أو XML
REST • GEThttp://site.com/api/1.0/students/list?uni=ksu GET /api/1.0/students/list?uni=ksu HTTP/1.1 Host: www.site.com User-Agent: Mozilla/4.0 • POSThttp://site.com/api/1.0/students/list POST /api/1.0/students/list HTTP/1.1 Host: www.site.com User-Agent: Mozilla/4.0 uni=ksu
JSON • JSON (JavaScript Object Notation) • صيغة خاصة بالجافاسكربت لتمثيل البيانات والـObjects • لها صيغة خاصة في تحويل نصوص الـUnicode • مثال: كلمة ”الرياض“ بالعربية ستصبح \u0627\u0644\u0631\u064a\u0627\u0636
http://site.com/api/1.0/students/student_info?id=31219209 { "name": "Ahmed Abdullah", "age": 21, "uni": "King Saud University", "courses": [ { "name": "Mathematical Equations", "code": "MATH101", "insturctor": "Yasir Saud" }, { "name": "Islamic Principles", "code": "SLM101", "insturctor": "Mohammad Khaled" } ] }
JSON • تستطيع الجافاسكربت قراءة هذه البيانات مباشرة و تحويلها إلى Object عبر الدالة eval varobj = eval('(' + result + ')');alert(obj.name); alert(obj.age); alert(obj.courses[0].name);
JSON • أو في الـPHP و تحويلها إلى Object عبر الدالة json_decode <?php $result = file_get_contents(“http://site.com/api/1.0/students/student_info?id=31219209”); $obj = json_decode($result); echo $obj->name; //should print Ahmed Abdullah ?>
XML • XML (Extensible Markup Language) • صيغة عامة لتبادل البيانات مدعومة في لغات وبيئات برمجية عدة
http://site.com/api/1.0/students/student_info?id=31219209 <?xml version="1.0"?> <student_info> <name>Ahmed Abdullah</name> <age>21</age> <uni>King Saud University</uni> <courses> <course> <name>Mathematical Equations</name> <code>MATH101</code> <instructor>Yasir Saud</instructor> </course> <course> <name>Islamic Principles</name> <code>SLM101</code> <instructor>Mohammad Khaled</instructor> </course> </courses> </student_info>
كيف تنشئها؟ • قم بعمل مجلد خاص تحت عنوان موقعكhttp://site.com/api/1.0/ • قم بعمل ملف PHP لكل خدمة. نبدأ بواحدة (مثلا سرد معلومات الطالب)list_student_info.php
http://site.com/api/1.0/list_student_info.php?id=31219209 <?php $student_id = $_GET[“id”]; … … //get required student info from DB //store it in an object or array $student_info $student_info->name = “Ahmed Abdullah”; $student_info->age = 21; … //or as array $student_info[“name”] = “Ahmed Abdullah”; $student_info[“age”] = 25; … //convert $student_info data to json $result = json_encode($student_info); echo $result;?>
http://site.com/api/1.0/list_student_info.php?id=31219209 { "name": "Ahmed Abdullah", "age": 21, "uni": "King Saud University", "courses": [ { "name": "Mathematical Equations", "code": "MATH101", "insturctor": "Yasir Saud" }, { "name": "Islamic Principles", "code": "SLM101", "insturctor": "Mohammad Khaled" } ] }
كيف تجعل عنوان الـAPI مرتب؟ • أي بدلا منhttp://site.com/api/1.0/list_student_info.php?id=31219209إلىhttp://site.com/api/1.0/students/student_info?id=31219209 • باستخدام الـApache Mod-Rewrite (htaccess redirect) RewriteRule^api/1.0/students/student_info$ /api/1.0/list_student_info.php [L]
ماذا عن تعديل بيانات عن طريق خدمة الويب؟ • ما قمنا باستعراضه هو جلب بيانات فقط. ماذا عن تعديل بيانات؟ (حذف, إضافة, تعديل)؟ • نفس الفكرة نقوم بعمل صفحات باسم مثلاadd_new_student.phpupdate_student_info.phpdelete_student_info.php • نقوم بإعطاء المعلومات الجديدة كنص JSON أوقيم مباشرة إذا كانت المعلومات قليلة
إضافة معلومات جديدة • مثال: add_new_student.php • و تقوم خدمة الويب باسترجاع إما نجاح العملية أو الرفض http://site.com/api/1.0/students/add_new_student?data={" name" : "YazeedSaleh", "age”: 25, …. } {"result":"success"} {"result":"fail", "reason":"You don’t have enough privileges"}
حماية المعلومات المتداولة بين خدمة الويب والمتصل
حماية المعلومات المتداولة بين الخدمة والمتصل • ماذا لو تطبيقك يتطلب اسم مستخدم وكلمة مرور؟ • تزويد المتصل برقم سري للاتصال لكل متصل (access token) يستخدمه بدلا عن استخدام اسم المستخدم و كلمة المرور, ويستطيع تغييره أي وقت. http://site.com/api/1.0/students/student_info?id=31219209&access_token=b2Aqj1G91k2smMr6KAmB91a
حماية المعلومات المتداولة بين الخدمة والمتصل • ماذا لو تطبيقك يسمح أن يقوم مستخدم بالدخول على معلومات مستخدمين آخرين؟ • تزويد المتصل برقم سري لكل مستخدم سمح للمتصل بالدخول لمعلوماته (user access token) • هذه الأساليب تعرف بما يسمى الـOAuthأو الـOpen Authentication http://site.com/api/1.0/students/delete_student?id=31219209&access_token=b2Aqj1G91k2smMr6KAmB91a&user_access_token=u3ErJk8a93Mna1Lq4E
حماية المعلومات المتداولة بين الخدمة والمتصل • تظل المعلومات غير محمية بشكل كافي عبر الانترنت لذا يتم استخدام اتصال مشفر HTTPS عادة في خدمات الويب ذات البيانات الحساسة
خدمات ويب فيسبوك • متوفرة على العنوان https://graph.facebook.com • فيها شرح وافي لكل الخدمات المتوفرة مع access token مؤقت لساعتين • مثال: معلومات عامة عن حسابي في فيسبوكhttps://graph.facebook.com/saleh.alzaid { "id": "635286979", "name": "Saleh Al-Zaid", "first_name": "Saleh", "last_name": "Al-Zaid", "username": "saleh.alzaid", "gender": "male", "locale": "en_US" }
معلومات الأصدقاء؟ تتطلب Access Token • https://graph.facebook.com/saleh.alzaid/friends?access_token=2227470867|2.AQCFXJ32tkL5nfOr.3600.1310313600.0-635286979|pYLUc8sTmom0GsNu4tPs6MYj7IU { "data": [ { "name": "BanderAlnogaithan", "id": "28969" }, { "name": "AbdulrahmanTarbzouni", "id": "701168" }, { "name": "Yamen S. Al-Hajjar", "id": "902805" }, { "name": "Dale D. Murphy", "id": "1408770" }, { "name": "RashaadBalbale", "id": "1907343" }, { "name": "FahadAlbutairi", "id": "7918116" }, …… ] }
Access Token غير منتهي؟ • للحصول على access token غير منتهي غير محدد بفترة زمنية يجب أن تقوم بإنشاء تطبيق على الفيسبوك ثم طلب ما يسمى بالـ offilne access
<?php require("../src/facebook.php"); //facebook PHP API global $facebook; $facebook = new Facebook( array( 'appId' => 'your_app_id', 'secret' => 'your_app_secret_code‘ ) ); $par['req_perms'] = "offline_access"; $loginUrl = $facebook->getLoginUrl($par); echo "loginUrl: $loginUrl\n"; $session = $facebook->getSession(); print_r($session); ?>
خدمات ويب تويتر • متوفرة على العنوان http://api.twitter.com/ • يتطلب تسجيل تطبيق ومعلوماته قبل استخدامها • للحصول على Access Token يتم الاتصال على الخدمةhttp://api.twitter.com/oauth/request_tokenو إعطاءها رقم تطبيقك السري كمتغير POST
مكتبات برمجية • في الحقيقة لا حاجة لمعرفة كافة خدمات الويب في موقع معين إذا ما قام بتقديم مكتبات برمجية تسهل عملية طلب الخدمة وإرسال واسترجاع المعلومات. • مكتبات برمجية لخدمات ويب تويتر لمعظم اللغات على الرابطhttp://dev.twitter.com/pages/libraries
شكرا لكم Q & A