יום שני, דצמבר 05, 2011

הצרות שלי עם SOAP

 מאז ומעולם תמיד חיפשנו מערכת שתוכל לדבר בין מערכות שונות,
פעם זה COBRA ופעם BXML לפעמים אנחנו סתם רוצים מידע קריא לאדם.
מפה המצאנו את הרעה החולה הנקראת SOAP בשביל לתת פתרון לRPC שיהיה גם קריא וגם נוח.

ישנם היום הרבה דרכים להשתמש ב RPC על גבי רשת (ידוע גם כ webservices) זה יכול REST הישן והטוב (פשוט תממשו url לכל בקשה).
זה יכול להיות XML-RPC המצויין לדעתי.
אבל לצערי המון פעמים רואים שימוש ב SOAP בלבד , ותמיכה בסוג אחד של סביבה נתמכת.

הסיבה לפחות בארץ היא שליטת אחת מסביבות הפיתוח בשוק (מישהוא אמר .NET ?) ושם כברירת מחדל מופיע בשימוש ב SOAP (אם מישהוא רוצה להעביר מידע הדרך הפשוטה בשבילו ביותר היא SOAP) , אם לפני שנים אנשים למדו והבינו עם מה עובדים היום יש כמות אדירה של פקידים שלא זזים מילמיטר מהמקום הבטוח שלהם שפשוט מושכים תפריטים.
לא פעם שמעתי תגובות מה איך אתה משתמש ב webservices מתוך C++ ואיך בכלל אתה משתמש ב telnet - זה בטח האקינג... 

והחלק הנורא ביותר - הwsdl שלך אי אפשר לעבוד איתו.
לקח לי שבועות להבין שהרבה פקידים פשוט לא מזיזים את התוכס שלהם בשביל לכתוב קוד נכון שידע לעבוד גם עם encoded וגם עם literal.
אתם חושבים שזה הכול ? 
מתברר שהרבה צועקים שאי אפשר להשתמש ב soap ולהחזיר תשובה כאשר זו לא נמצאת בתוך  בקונטיינר (יש אלמנט תשובה ובתוכו עוד כלל התשובות שלכם).
משום מה ברירת המחדל של יצרת complex type אומרת שכולם צריכים לעבוד לפי החליל של MS (מי שעובד ב Java מקלל במיוחד את יצור הwsdl ).
לאלה מאיתנו שכותבים קוד ב C++ קל יותר יש לנו מספר חבילות שדואגות לנושא (הממ .. gsoap + libxml) , ברגע שיש דרישה אנחנו פשוט משנים את הפורמט בלי יותר מדי כאב ראש.

על כן יש לי (ולהרבה אחרים) כלל - 
במהלך ההכנה לחוזה אנו כותבים כי כלל הממשקים חייבים להציג את כי פעולת התקשורת אפשרית באמצעות אפליקציה צד שלישי מוכרת (soapui/telnet).

זה נשמע לכם כמשהוא מוזר אבל לפעמים מגלים שצריך איזשהוא dll בשביל לבצע עוד תקשורת ועיבוד של המידע (הממ... crms המממ...). כן כן אבל ה webserivce שלי דורש NTLMv2 יגיד המתכנת (לדוגמה בdynamics) - למצב כזה אנחנו יכולים להתמודד שלauthntication נדאג אחרי זה (כי gsoap לדוגמה מאפשר זאת ) וחוץ מזה שכבר זונחים את NTLM ועוברים לkerberos.
בגלל זה עדיף לחלק את העבודה בין עבודה עם רק webservices לעובדה עם מכלול אפליקציות אחרות שצריך לתקשר איתם.

הרי בשביל מה יש ממשק וובי / webservices אם צריך עוד אפליקציה בשביל לעבוד זה (ראה ערך dynamics crm / owa בלי outlook שמותקן על המחשב המקומי).

אז מה קורה כאשר יש לנו חברה שלא ממש רוצה לעזור למתכנתים לעבוד עם ה CRM שלה ?
נכון אנחנו נתקעים מצד אחד עם קוד שהוא בעייתי לעבודה (אי אפשר להבין למה השרת) ומצד שני כאשר אנו כבר יוצרים קשר עם מישהוא הוא לא מסוגל לעזור בשביל לפתור את הבעייה.

(עדיין תקוע עם webservice בשביל לגרום לCRM לעבוד עם akonadi :-( )

תגובה 1:

  1. מאנייק אני רוצה לכתוב פוסט על הצרות האלו ואתה מקדים אותי.

    לא מדבר אתך יותר על הנושא :P

    השבמחק