SlideShare a Scribd company logo
1 of 39
‫صالح الزٌد‬
‫مهندس برمجٌات‬
‫نقاط المحاضرة‬
         ‫ما هً خدمات الوٌب و لماذا؟‬       ‫‪‬‬
                     ‫أنواعها و تقنٌاتها‬   ‫‪‬‬
                 ‫كٌف ننشئ خدمة وٌب‬        ‫‪‬‬
    ‫الحماٌة فً االتصال بخدمات الوٌب‬       ‫‪‬‬
‫استعراض لخدمات وٌب فٌسبوك وتوٌتر‬          ‫‪‬‬
‫مقدمة عن خدمات الوٌب‬
‫ما هً خدمات الوٌب؟‬
              ‫خدمة أو مجموعة من الخدمات ٌقدمها موقع وٌب‬      ‫‪‬‬
  ‫ٌستطٌع أي موقع أو تطبٌق أخر االتصال بها و االستفادة منها‬   ‫‪‬‬
        ‫تعطً نتائج (ملفات) بصٌغ معٌنة مثل ‪ 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
 GET
  http://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

 POST
 http://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‬‬              ‫‪‬‬
                                                  ‫مثال:‬   ‫‪‬‬
                          ‫كلمة ”الرٌاض“ بالعربٌة ستصبح‬
 ‫6360‪u0627u0644u0631u064au0627u‬‬
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 ‫عبر الدالة‬
var obj = eval('(' + result + ')');
alert(obj.name);
alert(obj.age);
alert(obj.courses[0].name);
JSON
        json_decode ‫ عبر الدالة‬Object ‫ و تحوٌلها إلى‬PHP ‫ أو فً الـ‬
<?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>
‫كٌف ننشئ خدمة وٌب؟‬
‫كٌف تنشئها؟‬
                             ‫‪ ‬قم بعمل مجلد خاص تحت عنوان موقعك‬
                                       ‫/0.1/‪http://site.com/api‬‬
‫‪ ‬قم بعمل ملف ‪ 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.php‬‬
                                 ‫‪update_student_info.php‬‬
                                  ‫‪delete_student_info.php‬‬
 ‫‪ ‬نقوم بإعطاء المعلومات الجدٌدة كنص ‪ JSON‬أو قٌم مباشرة إذا كانت‬
                                                 ‫المعلومات قلٌلة‬
‫إضافة معلومات جدٌدة‬
                                add_new_student.php :‫ مثال‬
http://site.com/api/1.0/students/add_new_student?data={"
name" : "Yazeed Saleh", "age“: 25, …. }

               ‫ و تقوم خدمة الوٌب باسترجاع إما نجاح العملٌة أو الرفض‬

{"result":"success"}

{"result":"fail",
 "reason":"You don’t have enough privileges"}
‫حماٌة المعلومات المتداولة بٌن‬
    ‫خدمة الوٌب والمتصل‬
‫حماٌة المعلومات المتداولة بٌن الخدمة والمتصل‬
                       ‫‪ ‬ماذا لو تطبيقك يتطلب اسم مستخدم وكلمة مرور؟‬
       ‫‪ ‬تزوٌد المتصل برقم سري لالتصال لكل متصل (‪)access token‬‬
‫ٌستخدمه بدال عن استخدام اسم المستخدم و كلمة المرور, وٌستطٌع تغٌٌره أي‬
                                                                 ‫وقت.‬


‫90291213=‪http://site.com/api/1.0/students/student_info?id‬‬
‫‪&access_token=b2Aqj1G91k2smMr6KAmB91a‬‬
‫حماٌة المعلومات المتداولة بٌن الخدمة والمتصل‬
‫‪ ‬ماذا لو تطبيقك يسمح أن يقوم مستخدم بالدخول على معلومات مستخدمين آخرين؟‬
    ‫‪ ‬تزوٌد المتصل برقم سري لكل مستخدم سمح للمتصل بالدخول لمعلوماته‬
                                         ‫(‪)user access token‬‬


‫291213=‪http://site.com/api/1.0/students/delete_student?id‬‬
‫‪09&access_token=b2Aqj1G91k2smMr6KAmB91a&user_a‬‬
‫‪ccess_token=u3ErJk8a93Mna1Lq4E‬‬

                              ‫‪ ‬هذه األسالٌب تعرف بما ٌسمى الـ ‪OAuth‬‬
                                   ‫أو الـ ‪Open Authentication‬‬
‫حماٌة المعلومات المتداولة بٌن الخدمة والمتصل‬
‫‪ ‬تظل المعلومات غٌر محمٌة بشكل كافً عبر االنترنت لذا ٌتم استخدام اتصال‬
           ‫مشفر ‪ 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.131031
    3600.0-635286979|pYLUc8sTmom0GsNu4tPs6MYj7IU
{
     "data": [
        { "name":   "Bander Alnogaithan", "id": "28969" },
        { "name":   "Abdulrahman Tarbzouni", "id": "701168" },
        { "name":   "Yamen S. Al-Hajjar", "id": "902805" },
        { "name":   "Dale D. Murphy", "id": "1408770" },
        { "name":   "Rashaad Balbale", "id": "1907343" },
        { "name":   "Fahad Albutairi", "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: $loginUrln";

        $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‬‬

More Related Content

What's hot

Web Servers: Architecture and Security
Web Servers: Architecture and SecurityWeb Servers: Architecture and Security
Web Servers: Architecture and Security
george.james
 
تعريف التكشيف انواع الكشافات
تعريف التكشيف  انواع الكشافاتتعريف التكشيف  انواع الكشافات
تعريف التكشيف انواع الكشافات
Huda Farhan
 
PHP
PHPPHP
Linux shell env
Linux shell envLinux shell env
Linux shell env
Rahul Pola
 

What's hot (20)

Web Servers(IIS, NGINX, APACHE)
Web Servers(IIS, NGINX, APACHE)Web Servers(IIS, NGINX, APACHE)
Web Servers(IIS, NGINX, APACHE)
 
Protocol Buffers
Protocol BuffersProtocol Buffers
Protocol Buffers
 
Network automation (NetDevOps) with Ansible
Network automation (NetDevOps) with AnsibleNetwork automation (NetDevOps) with Ansible
Network automation (NetDevOps) with Ansible
 
MES102 - Verse on Premises 2.0 Best Practices
MES102 - Verse on Premises 2.0 Best PracticesMES102 - Verse on Premises 2.0 Best Practices
MES102 - Verse on Premises 2.0 Best Practices
 
Une introduction à HBase
Une introduction à HBaseUne introduction à HBase
Une introduction à HBase
 
Web Servers: Architecture and Security
Web Servers: Architecture and SecurityWeb Servers: Architecture and Security
Web Servers: Architecture and Security
 
Dapper performance
Dapper performanceDapper performance
Dapper performance
 
تعريف التكشيف انواع الكشافات
تعريف التكشيف  انواع الكشافاتتعريف التكشيف  انواع الكشافات
تعريف التكشيف انواع الكشافات
 
الوحدة الثالثة - قاعدة البيانات وادارتها
الوحدة الثالثة - قاعدة البيانات وادارتهاالوحدة الثالثة - قاعدة البيانات وادارتها
الوحدة الثالثة - قاعدة البيانات وادارتها
 
Introduction au web sémantique
Introduction au web sémantiqueIntroduction au web sémantique
Introduction au web sémantique
 
PHP
PHPPHP
PHP
 
Linux command ppt
Linux command pptLinux command ppt
Linux command ppt
 
The "Big Data" Ecosystem at LinkedIn
The "Big Data" Ecosystem at LinkedInThe "Big Data" Ecosystem at LinkedIn
The "Big Data" Ecosystem at LinkedIn
 
Introduction to Web Services
Introduction to Web ServicesIntroduction to Web Services
Introduction to Web Services
 
Introduction to Hadoop
Introduction to HadoopIntroduction to Hadoop
Introduction to Hadoop
 
Lucene Introduction
Lucene IntroductionLucene Introduction
Lucene Introduction
 
Mining Software Repositories
Mining Software RepositoriesMining Software Repositories
Mining Software Repositories
 
Unix Linux Commands Presentation 2013
Unix Linux Commands Presentation 2013Unix Linux Commands Presentation 2013
Unix Linux Commands Presentation 2013
 
Linux shell env
Linux shell envLinux shell env
Linux shell env
 
Introduction to PHP
Introduction to PHPIntroduction to PHP
Introduction to PHP
 

Viewers also liked

Viewers also liked (20)

بناء تطبيقات ويب 2.0. دروس مستفادة و نصائح موجهة
 بناء تطبيقات ويب 2.0. دروس مستفادة و نصائح موجهة  بناء تطبيقات ويب 2.0. دروس مستفادة و نصائح موجهة
بناء تطبيقات ويب 2.0. دروس مستفادة و نصائح موجهة
 
مقدمة عن بايثون / جانقو
مقدمة عن بايثون / جانقومقدمة عن بايثون / جانقو
مقدمة عن بايثون / جانقو
 
رحلة في السيليكون فالي
رحلة في السيليكون فاليرحلة في السيليكون فالي
رحلة في السيليكون فالي
 
Webservice for android ppt
Webservice for android pptWebservice for android ppt
Webservice for android ppt
 
45 ما هي الويب سيرفس وكيفية تبادل البيانات بين الموبايل وقاعدة البيانات
45  ما هي الويب سيرفس وكيفية تبادل البيانات بين الموبايل وقاعدة البيانات 45  ما هي الويب سيرفس وكيفية تبادل البيانات بين الموبايل وقاعدة البيانات
45 ما هي الويب سيرفس وكيفية تبادل البيانات بين الموبايل وقاعدة البيانات
 
Web Services PHP Tutorial
Web Services PHP TutorialWeb Services PHP Tutorial
Web Services PHP Tutorial
 
[Android] Web services
[Android] Web services[Android] Web services
[Android] Web services
 
Introduction to web services
Introduction to web servicesIntroduction to web services
Introduction to web services
 
PHP Web service - وب سرویس
PHP Web service - وب سرویسPHP Web service - وب سرویس
PHP Web service - وب سرویس
 
Connecting to Web Services on Android
Connecting to Web Services on AndroidConnecting to Web Services on Android
Connecting to Web Services on Android
 
Web Service Presentation
Web Service PresentationWeb Service Presentation
Web Service Presentation
 
Getting Started with Web Services
Getting Started with Web ServicesGetting Started with Web Services
Getting Started with Web Services
 
Preparing your web services for Android and your Android app for web services...
Preparing your web services for Android and your Android app for web services...Preparing your web services for Android and your Android app for web services...
Preparing your web services for Android and your Android app for web services...
 
بناء خدمات ومشاريع الويب
بناء خدمات ومشاريع الويببناء خدمات ومشاريع الويب
بناء خدمات ومشاريع الويب
 
Grid computing , Utility computing الحوسبة الشبكية و الخدمية
Grid computing , Utility computing  الحوسبة الشبكية و الخدميةGrid computing , Utility computing  الحوسبة الشبكية و الخدمية
Grid computing , Utility computing الحوسبة الشبكية و الخدمية
 
الويب ديزاين
الويب ديزاينالويب ديزاين
الويب ديزاين
 
32- التعامل مع الأحداث - فون جاب
32- التعامل مع الأحداث - فون جاب32- التعامل مع الأحداث - فون جاب
32- التعامل مع الأحداث - فون جاب
 
PHP Advance 101 دورة
PHP Advance 101 دورة PHP Advance 101 دورة
PHP Advance 101 دورة
 
Openerp 8
Openerp 8Openerp 8
Openerp 8
 
باللغة العربية JSON دورة
  باللغة العربية JSON دورة   باللغة العربية JSON دورة
باللغة العربية JSON دورة
 

Similar to خدمات الويب (Web Services) و كيف تنشئها

أول كتاب لتطوير المنتديات
أول كتاب لتطوير المنتدياتأول كتاب لتطوير المنتديات
أول كتاب لتطوير المنتديات
guestf91808
 
تسجيل المحتوي مع كروس رف – ندوة عبر الانترنت باللغة العربية | Content Registr...
تسجيل المحتوي مع كروس رف – ندوة عبر الانترنت باللغة العربية | Content Registr...تسجيل المحتوي مع كروس رف – ندوة عبر الانترنت باللغة العربية | Content Registr...
تسجيل المحتوي مع كروس رف – ندوة عبر الانترنت باللغة العربية | Content Registr...
Crossref
 

Similar to خدمات الويب (Web Services) و كيف تنشئها (15)

أول كتاب لتطوير المنتديات
أول كتاب لتطوير المنتدياتأول كتاب لتطوير المنتديات
أول كتاب لتطوير المنتديات
 
Cloud Computing workshop
Cloud Computing workshopCloud Computing workshop
Cloud Computing workshop
 
Métadonnées pédagogiques
Métadonnées pédagogiquesMétadonnées pédagogiques
Métadonnées pédagogiques
 
Crossref LIVE Arabic
Crossref LIVE Arabic Crossref LIVE Arabic
Crossref LIVE Arabic
 
Navigation
NavigationNavigation
Navigation
 
Getting Started with Content Registration - Arabic Webinar
Getting Started with Content Registration - Arabic Webinar Getting Started with Content Registration - Arabic Webinar
Getting Started with Content Registration - Arabic Webinar
 
الوحدة الثالثة - البحث عن المعلومات في الانترنت والمصادر الالكترونية -مهارات ...
الوحدة الثالثة - البحث عن المعلومات في الانترنت والمصادر الالكترونية -مهارات ...الوحدة الثالثة - البحث عن المعلومات في الانترنت والمصادر الالكترونية -مهارات ...
الوحدة الثالثة - البحث عن المعلومات في الانترنت والمصادر الالكترونية -مهارات ...
 
تسجيل المحتوي مع كروس رف – ندوة عبر الانترنت باللغة العربية | Content Registr...
تسجيل المحتوي مع كروس رف – ندوة عبر الانترنت باللغة العربية | Content Registr...تسجيل المحتوي مع كروس رف – ندوة عبر الانترنت باللغة العربية | Content Registr...
تسجيل المحتوي مع كروس رف – ندوة عبر الانترنت باللغة العربية | Content Registr...
 
Social Network Website 'Midterm Project'
Social Network Website 'Midterm Project'Social Network Website 'Midterm Project'
Social Network Website 'Midterm Project'
 
الدرس الثالث عشر
الدرس الثالث عشرالدرس الثالث عشر
الدرس الثالث عشر
 
الدرس الخامس عشر
الدرس الخامس عشرالدرس الخامس عشر
الدرس الخامس عشر
 
تقرير رسمي لجامعة طنطا
تقرير رسمي لجامعة طنطاتقرير رسمي لجامعة طنطا
تقرير رسمي لجامعة طنطا
 
منهاج بناء و تصميم مواقع الانترنيت
منهاج بناء و تصميم مواقع الانترنيتمنهاج بناء و تصميم مواقع الانترنيت
منهاج بناء و تصميم مواقع الانترنيت
 
Aws cloud services_malshreef_v1.0
Aws cloud services_malshreef_v1.0Aws cloud services_malshreef_v1.0
Aws cloud services_malshreef_v1.0
 
يوم البرمجيات الحرّة 2014 - البرمجيّات الحرّة و بناء واجهات التطبيق البرمجيّة...
يوم البرمجيات الحرّة 2014 - البرمجيّات الحرّة و بناء واجهات التطبيق البرمجيّة...يوم البرمجيات الحرّة 2014 - البرمجيّات الحرّة و بناء واجهات التطبيق البرمجيّة...
يوم البرمجيات الحرّة 2014 - البرمجيّات الحرّة و بناء واجهات التطبيق البرمجيّة...
 

خدمات الويب (Web Services) و كيف تنشئها

  • 2. ‫نقاط المحاضرة‬ ‫ما هً خدمات الوٌب و لماذا؟‬ ‫‪‬‬ ‫أنواعها و تقنٌاتها‬ ‫‪‬‬ ‫كٌف ننشئ خدمة وٌب‬ ‫‪‬‬ ‫الحماٌة فً االتصال بخدمات الوٌب‬ ‫‪‬‬ ‫استعراض لخدمات وٌب فٌسبوك وتوٌتر‬ ‫‪‬‬
  • 4. ‫ما هً خدمات الوٌب؟‬ ‫خدمة أو مجموعة من الخدمات ٌقدمها موقع وٌب‬ ‫‪‬‬ ‫ٌستطٌع أي موقع أو تطبٌق أخر االتصال بها و االستفادة منها‬ ‫‪‬‬ ‫تعطً نتائج (ملفات) بصٌغ معٌنة مثل ‪ JSON‬و ‪XML‬‬ ‫‪‬‬ ‫باالتصال عن طرٌق البروتوكوالت معروفة ومتداولة (‪)HTTP‬‬ ‫‪‬‬ ‫خطوة لتحوٌل موقع لتطبٌق وٌب‬ ‫‪‬‬
  • 5. ‫موقع ٌعرض جامعات ومعلومات الطالب فٌها‬ ‫‪HTTP‬‬ ‫موقع أو تطبٌق‬ ‫أسماء الجامعات‬ ‫‪JSON, XML‬‬ ‫معلومات طالب‬ ‫عدد الطالب فً جامعة‬ ‫صفحات الموقع‬ ‫مواد الطالب فً فصل دراسً‬ ‫أسماء الطالب فً جامعة‬ ‫‪API‬‬
  • 6. ‫لماذا خدمات الوٌب؟‬ ‫‪ ‬تسهٌل الوصول للبٌانات‬ ‫‪ ‬توفٌر جهد معالجة األوامر ووقت برمجتها‬
  • 8. ‫تقنٌات خدمات الوٌب‬ SOAP (Simple Object Access Protocol)  WSDL (Web Services Description Language)  UDDI (Universal Description, Discovery and Integration)  REST (Representative State Transfer) 
  • 9. ‫‪REST‬‬ ‫‪ ‬تعتمد على أوامر بروتوكول الـ ‪ HTTP‬االعتٌادٌة وهً:‬ ‫‪GET, POST, PUT, DELETE‬‬ ‫‪ ‬تقوم باسترجاع صفحة بصٌغة ‪ JSON‬أو ‪XML‬‬
  • 10. REST  GET http://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  POST http://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
  • 11. ‫‪JSON‬‬ ‫)‪JSON (JavaScript Object Notation‬‬ ‫‪‬‬ ‫صٌغة خاصة بالجافا سكربت لتمثٌل البٌانات و الـ ‪Objects‬‬ ‫‪‬‬ ‫لها صٌغة خاصة فً تحوٌل نصوص الـ ‪Unicode‬‬ ‫‪‬‬ ‫مثال:‬ ‫‪‬‬ ‫كلمة ”الرٌاض“ بالعربٌة ستصبح‬ ‫6360‪u0627u0644u0631u064au0627u‬‬
  • 12. 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" } ] }
  • 13. JSON Object ‫ تستطٌع الجافاسكربت قراءة هذه البٌانات مباشرة و تحوٌلها إلى‬ eval ‫عبر الدالة‬ var obj = eval('(' + result + ')'); alert(obj.name); alert(obj.age); alert(obj.courses[0].name);
  • 14. JSON json_decode ‫ عبر الدالة‬Object ‫ و تحوٌلها إلى‬PHP ‫ أو فً الـ‬ <?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 ?>
  • 15. ‫‪XML‬‬ ‫‪XML (Extensible Markup Language) ‬‬ ‫‪ ‬صٌغة عامة لتبادل البٌانات مدعومة فً لغات وبٌئات برمجٌة عدة‬
  • 16. 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>
  • 18. ‫كٌف تنشئها؟‬ ‫‪ ‬قم بعمل مجلد خاص تحت عنوان موقعك‬ ‫/0.1/‪http://site.com/api‬‬ ‫‪ ‬قم بعمل ملف ‪ PHP‬لكل خدمة. نبدأ بواحدة (مثال سرد معلومات الطالب)‬ ‫‪list_student_info.php‬‬
  • 19. 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; ?>
  • 20. 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" } ] }
  • 21. ‫ مرتب؟‬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]
  • 22. ‫ماذا عن تعدٌل بٌانات عن طرٌق خدمة الوٌب؟‬ ‫‪ ‬ما قمنا باستعراضه هو جلب بٌانات فقط. ماذا عن تعدٌل بٌانات؟ (حذف,‬ ‫إضافة, تعدٌل)؟‬ ‫‪ ‬نفس الفكرة نقوم بعمل صفحات باسم مثال‬ ‫‪add_new_student.php‬‬ ‫‪update_student_info.php‬‬ ‫‪delete_student_info.php‬‬ ‫‪ ‬نقوم بإعطاء المعلومات الجدٌدة كنص ‪ JSON‬أو قٌم مباشرة إذا كانت‬ ‫المعلومات قلٌلة‬
  • 23. ‫إضافة معلومات جدٌدة‬ add_new_student.php :‫ مثال‬ http://site.com/api/1.0/students/add_new_student?data={" name" : "Yazeed Saleh", "age“: 25, …. } ‫ و تقوم خدمة الوٌب باسترجاع إما نجاح العملٌة أو الرفض‬ {"result":"success"} {"result":"fail", "reason":"You don’t have enough privileges"}
  • 24. ‫حماٌة المعلومات المتداولة بٌن‬ ‫خدمة الوٌب والمتصل‬
  • 25. ‫حماٌة المعلومات المتداولة بٌن الخدمة والمتصل‬ ‫‪ ‬ماذا لو تطبيقك يتطلب اسم مستخدم وكلمة مرور؟‬ ‫‪ ‬تزوٌد المتصل برقم سري لالتصال لكل متصل (‪)access token‬‬ ‫ٌستخدمه بدال عن استخدام اسم المستخدم و كلمة المرور, وٌستطٌع تغٌٌره أي‬ ‫وقت.‬ ‫90291213=‪http://site.com/api/1.0/students/student_info?id‬‬ ‫‪&access_token=b2Aqj1G91k2smMr6KAmB91a‬‬
  • 26. ‫حماٌة المعلومات المتداولة بٌن الخدمة والمتصل‬ ‫‪ ‬ماذا لو تطبيقك يسمح أن يقوم مستخدم بالدخول على معلومات مستخدمين آخرين؟‬ ‫‪ ‬تزوٌد المتصل برقم سري لكل مستخدم سمح للمتصل بالدخول لمعلوماته‬ ‫(‪)user access token‬‬ ‫291213=‪http://site.com/api/1.0/students/delete_student?id‬‬ ‫‪09&access_token=b2Aqj1G91k2smMr6KAmB91a&user_a‬‬ ‫‪ccess_token=u3ErJk8a93Mna1Lq4E‬‬ ‫‪ ‬هذه األسالٌب تعرف بما ٌسمى الـ ‪OAuth‬‬ ‫أو الـ ‪Open Authentication‬‬
  • 27. ‫حماٌة المعلومات المتداولة بٌن الخدمة والمتصل‬ ‫‪ ‬تظل المعلومات غٌر محمٌة بشكل كافً عبر االنترنت لذا ٌتم استخدام اتصال‬ ‫مشفر ‪ HTTPS‬عادة فً خدمات الوٌب ذات البٌانات الحساسة‬
  • 28. ‫استعراض خدمات وٌب‬ ‫فٌسبوك وتوٌتر‬
  • 29. ‫خدمات وٌب فٌسبوك‬ 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" }
  • 30. Access Token ‫معلومات األصدقاء؟ تتطلب‬  https://graph.facebook.com/saleh.alzaid/friends?access_ token=2227470867|2.AQCFXJ32tkL5nfOr.3600.131031 3600.0-635286979|pYLUc8sTmom0GsNu4tPs6MYj7IU { "data": [ { "name": "Bander Alnogaithan", "id": "28969" }, { "name": "Abdulrahman Tarbzouni", "id": "701168" }, { "name": "Yamen S. Al-Hajjar", "id": "902805" }, { "name": "Dale D. Murphy", "id": "1408770" }, { "name": "Rashaad Balbale", "id": "1907343" }, { "name": "Fahad Albutairi", "id": "7918116" }, …… ] }
  • 31.
  • 32. ‫‪ Access Token‬غٌر منتهً؟‬ ‫‪ ‬للحصول على ‪ access token‬غٌر منتهً غٌر محدد بفترة زمنٌة ٌجب أن‬ ‫تقوم بإنشاء تطبٌق على الفٌسبوك ثم طلب ما ٌسمى بالـ ‪offilne access‬‬
  • 33.
  • 34. <?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: $loginUrln"; $session = $facebook->getSession(); print_r($session); ?>
  • 35. ‫خدمات وٌب توٌتر‬ ‫‪ ‬متوفرة على العنوان /‪http://api.twitter.com‬‬ ‫‪ٌ ‬تطلب تسجٌل تطبٌق ومعلوماته قبل استخدامها‬ ‫‪ ‬للحصول على ‪ٌ Access Token‬تم االتصال على الخدمة‬ ‫‪http://api.twitter.com/oauth/request_token‬‬ ‫و إعطاءها رقم تطبٌقك السري كمتغٌر ‪POST‬‬
  • 36.
  • 37. ‫مكتبات برمجٌة‬ ‫‪ ‬فً الحقٌقة ال حاجة لمعرفة كافة خدمات الوٌب فً موقع معٌن إذا ما قام‬ ‫بتقدٌم مكتبات برمجٌة تسهل عملٌة طلب الخدمة وإرسال واسترجاع‬ ‫المعلومات.‬ ‫‪ ‬مكتبات برمجٌة لخدمات وٌب توٌتر لمعظم اللغات على الرابط‬ ‫‪http://dev.twitter.com/pages/libraries‬‬
  • 38.
  • 39. ‫شكرا لكم‬ ‫‪‬‬ ‫‪Q&A‬‬