בפעם הקודמת דנו במבוא ל-XML-RPC, יתרונותיה וחסרונותיה. היום ניצור שרות כזה לדוגמא. השרות אמור לקבל מספר מאמר אשר פורסם בווטסאפ (או כל אתר PostNuke אחר) ולהחזיר את כותרתו המקודדת ביוניקוד.
הכרות עם PEAR
ווטסאפ מתבסס על
PostNuke, אשר בתורו כתוב ב-PHP. עבור PHP ישנם מספר יישומי XML-RPC (הדוגמא ב-HOWTO באתר של XML-RPC מראה שימוש בשני קבצי include). אני מעדיף להשתמש בזה הנמצא ב-
PEAR.
למי שלא מכיר, PEAR הוא מאגר הרחבות ויישומים עבור PHP. PEAR מספק גם ממשק שורת פקודה להתקנה ושדרוג. למשתמשי Perl הוותיקים זה מזכיר את
CPAN, ולא במקרה.
המאגר מכיל אוסף הרחבות בנושאים שונים ורבים (טפסים, בסיסי נתונים, אימות, xml, דוא"ל, שרותי web ועוד). אם אתם מפתחים ב-PHP, ולא מכירים את השירות הזה, מומלץ. פעמים רבות תמציאו את הגלגל מחדש - כמובן שללא צורך.
נוודא שחבילת ה-PEAR מותקנת. בדביאן החבילה נקראת php4-pear. אם החבילה מותקנת, הפקודה pear תהיה זמינה לנו משורת הפקודה. לקבלת עזרה, הקלידו את הפקודה ללא פרמטרים נוספים. לקבלת רשימת המודולים המותקנים, יש להשתמש בפרמטר list. כמפורט בדוגמא הבאה:
$ pear list
Installed packages:
===================
Package Version State
Archive_Tar 1.1 stable
Console_Getopt 1.2 stable
DB 1.6.2 stable
HTTP 1.2.2 stable
Mail 1.1.3 stable
Net_SMTP 1.2.6 stable
Net_Socket 1.0.1 stable
PEAR 1.3.2 stable
XML_Parser 1.0.1 stable
XML_RPC 1.1.0 stable
כפי שניתן לראות הרחבת ה-XML-RPC מותקנת ואפשר להמשיך.
יישום השירות
מאחר ואנו מתבססים על PostNuke, לא נשתמש בפקודות כגון mysql_query ודומיהן. PostNuke מספק ממשק תכנות - API. מאחר והשאיפה היא לעבוד בצורה מסודרת (ושתתאים להתקנות שונות, כגון prefix שונה עבור שמות הטבלאות), אנו ננצל אותו.
<span style="color:#606060">הערה:
PostNuke מספק ממשק XML-RPC די עשיר. אך לצורך הדוגמא, עלינו ליישם משלנו (ועדיף משהו פשוט אשר יקל על ההבנה).</span>
העבודה ב-PHP מסורבלת מעט, יחסית לפייתון לדוגמא, מכיוון שיש לבצע המרה של הפרמטרים המתקבלים למשתנה "הטבעי" (סקאלארי) של PHP ולהיפך. חוץ מכך העבודה די פשוטה. התהליך הנדרש בעת יצירת שירות הוא:
- כתיבת את הפונקציות הדרושות
- יצירת השרת ורישום הפונקציות הזמינות
הקוד הבא מדגים את העבודה מול ה-pnAPI ויישום ה-XML-RPC של PEAR:
<iframe src="meir/xmlrpc_demo.phps" width="100%" height="300" style="border:1px solid;">
הקוד לעיל:
- כולל את הספריות המתאימות
- מאתחל את ממשק התכנות של PostNuke
- מגדיר קבועים עבור קודי והערות שגיאות
- מגדיר את הפונקציה getArticleTitle. פונקציה זו מקבלת את מערך הפרמטרים אשר נתקבלו בבקשה. היא מוודאת את מספרם (אנו דורשים אחד), ממירה אותו למשתנה הטבעי של php, ומבצעת את השאילתה. אם נמצא ערך מתאים, הוא יומר ליוניקוד ולאחר מכן למשתנה המתאים ליצירת התגובה עבור הלקוח. במקרה של שגיאה, ייוצר אובייקט מתאים.
- הגדרת מערך עם רשימת הפונקציות אשר יוכרו ע"י השרת. כמו שניתן לראות, הפונקציה ממופה לשירות תחת השם article.title
- יצירת אובייקט השרת עם הפונקציות המבוקשות. מכאן, PHP ימשיך את הטיפול.
בפעם הבאה ניצור תוכנית מצד הלקוח עבור השירות.