מי שבעצם הגדיר את Rest או Representational State Transfer הוא Roy T. Fielding (היה מבין מעצבי פרוטוקול HTTP). הגדיר זאת כסגנון ארכיטקטוני- שזהו בעצם דרך אבסטרקטית לבטא את הרעיון מאחורי הארכיטקטורה. סגנון ארכיטקטוני מגדיר את המאפיינים של הארכיטקטורה שתשתמש בסגנון הנ"ל... (Client-Server זה סגנון ארכיטקטוני).
הוא עוד הוסיף ואמר ש Rest מנסה להביא למינימום את ה latency ואת התקשורת ברשת, ובאותו הזמן למקסם את יכולת הסקלביליות והעצמאות של הרכיבים עצמם.
הרעיון המרכזי של Rest זה במקום להשתמש בצורות מסובכות (כמו SOAP,RPC) כדי לתקשר עם מערכת אחרת, נשתמש בבקשת HTTP פשוטה כדי לבצע את התקשורת שדרושה לנו. (מכיוון שלרוב Rest ממומש על Http, כך אתייחס בבלוג..)
מאפייני Rest חשובים :
העקרון המרכזי ב Rest הוא לתת לכל משאב ID. ב Web יש רעיון עבור IDs שנקרא URI- שזהו namespace גלובלי, והשימוש בו מבטיח לתת לכל משאב ID ייחודי גלובלי (קחו למשל דוגמא כתובת של אתר אינטרנט...).
Rest משתמש ב Http עבור כל פעולות ה CRUD שהם (Create/Read/Update/Delete), אך כמובן שהוא לא נצמד אליהם ויכול להשתמש בפעולות שהם Non-CRUD
Create- זוהי מתודת ה PUT - כלומר הוספת משאב חדש למערכת
Read- זוהי מתודת ה GET - קבלת משאב מהמערכת
Upadte- זוהי מתודת ה POST- עדכון המשאב במערכת
Delete - מחיקת המשאב מהמערכת
וכנראה שגם יחזור לנו SOAP Response עם התשובה..
וע"י שימוש ב Rest הבקשה תיראה כך:
http://www.acme.com/Orders/12345
שתשלח לשרת ע"י בקשת HTTP GET, ויחזור לי HTTP RESPONSE עם התשובה.
למשל אם נרצה לקבל את כל הלקוחות:
http://www.acme.com/Customers
או למחוק לקוח מסויים (ע"י שליחת HTTP DELETE)
http://www.acme.com/Customers/1234
או לקבל את כל ההזמנות של לקוח מסויים:
http://www.acme.com/Customers/12345/Orders
אפשר גם לעשות שימוש בבקשות קצת יותר מורכבות:
http://www.acme.com/OrderDetails?ProductName=X&Year=2000
בד"כ בתשובה יחזור לי XML, אך בשונה מ SOAP, זה לא חייב להיות XML. זה יכול להיות גם JSOM,CSV
כלל חשוב שיש לשים לב זה שהגדרת ה URI מחייבת שתהיה אפשרות גישה לכל משאב בהיררכיות.
למשל: אם יש לי גישה ל
http://www.acme.com/Customers/12345/Orders
אז יהיה לי גישה גם ל:
http://www.acme.com/Customers/12345
http://www.acme.com/Customers
שוב, אנחנו מקבלים המון יתרונות מתכנון נכון לעבודה בסגנון Rest.
יתרון גדול זה שאנחנו יוצרים שימוש במנגנון Cache כי בעצם קריאת GET לדוגמא תשמור את המשאב ב Cache.
וכמובן שיפור אדיר בביצועי המערכת, ביצועי תעבורה, קריאות ועוד..
מתי נשתמש ב REST ומתי ב SOAP?
לזה נקדיש בהמשך פוסט נפרד..
תהנו!
הוא עוד הוסיף ואמר ש Rest מנסה להביא למינימום את ה latency ואת התקשורת ברשת, ובאותו הזמן למקסם את יכולת הסקלביליות והעצמאות של הרכיבים עצמם.
הרעיון המרכזי של Rest זה במקום להשתמש בצורות מסובכות (כמו SOAP,RPC) כדי לתקשר עם מערכת אחרת, נשתמש בבקשת HTTP פשוטה כדי לבצע את התקשורת שדרושה לנו. (מכיוון שלרוב Rest ממומש על Http, כך אתייחס בבלוג..)
מאפייני Rest חשובים :
- מיושם באריטקטורות client-server
- למרות ש Rest פותח במקביל ל Http1.1, אפשר לממש את הסגנון הארכיטקטוני Rest לא רק על גבי Http.
- הContext של הפנייה הוא Stateless
- הוא Cacheable- כלומר ניתן לעשות caching של תשובות השרת בזיכרון של מחשב הלקוח
העקרון המרכזי ב Rest הוא לתת לכל משאב ID. ב Web יש רעיון עבור IDs שנקרא URI- שזהו namespace גלובלי, והשימוש בו מבטיח לתת לכל משאב ID ייחודי גלובלי (קחו למשל דוגמא כתובת של אתר אינטרנט...).
Rest משתמש ב Http עבור כל פעולות ה CRUD שהם (Create/Read/Update/Delete), אך כמובן שהוא לא נצמד אליהם ויכול להשתמש בפעולות שהם Non-CRUD
Create- זוהי מתודת ה PUT - כלומר הוספת משאב חדש למערכת
Read- זוהי מתודת ה GET - קבלת משאב מהמערכת
Upadte- זוהי מתודת ה POST- עדכון המשאב במערכת
Delete - מחיקת המשאב מהמערכת
ב Rest אנחנו ניגשים למשאב ולא לשירות. המשאבים שלנו צריכים להיות מוגדרים היטב.
לדוגמא ניקח את הסנריו הבא:
יש לנו משב לקוחות ומשאב הזמנות (של לקוחות). השרות שלנו חושף רק את הפונקציות שמצוינות להלן:
בואו נראה איך המבנה יראה על פי Rest:
המשאבים שלנו יצטרכו לממש את ה Interface שנגדיר (בתרשים הבא אני אציג רק את המטודות שהמשאב משתמש (לצורך פשטות), למרות שבפועל הוא צריך להכיל את כל המטודות מה interface)
לדוגמא ניקח את הסנריו הבא:
יש לנו משב לקוחות ומשאב הזמנות (של לקוחות). השרות שלנו חושף רק את הפונקציות שמצוינות להלן:
בואו נראה איך המבנה יראה על פי Rest:
המשאבים שלנו יצטרכו לממש את ה Interface שנגדיר (בתרשים הבא אני אציג רק את המטודות שהמשאב משתמש (לצורך פשטות), למרות שבפועל הוא צריך להכיל את כל המטודות מה interface)
בואו נאמר שאנחנו רוצים לקבל פרטים של order מסויים. ( או בעצם להפעיל את הפונקציה GetOrder)
אם נשתמש ב Web Service וב SOAP הבקשה תראה כך:
<?xml version="1.0"?> <soap:Envelope xmlns:soap="http://www.w3.org/2001/12/soap-envelope" soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding"> <soap:body pb="http://www.acme.com"> <pb:GetOrder> <pb:OrderID>12345</pb:OrderID> </pb:GetOrder> </soap:Body> </soap:Envelope>
וכנראה שגם יחזור לנו SOAP Response עם התשובה..
וע"י שימוש ב Rest הבקשה תיראה כך:
http://www.acme.com/Orders/12345
שתשלח לשרת ע"י בקשת HTTP GET, ויחזור לי HTTP RESPONSE עם התשובה.
למשל אם נרצה לקבל את כל הלקוחות:
http://www.acme.com/Customers
או למחוק לקוח מסויים (ע"י שליחת HTTP DELETE)
http://www.acme.com/Customers/1234
או לקבל את כל ההזמנות של לקוח מסויים:
http://www.acme.com/Customers/12345/Orders
אפשר גם לעשות שימוש בבקשות קצת יותר מורכבות:
http://www.acme.com/OrderDetails?ProductName=X&Year=2000
בד"כ בתשובה יחזור לי XML, אך בשונה מ SOAP, זה לא חייב להיות XML. זה יכול להיות גם JSOM,CSV
כלל חשוב שיש לשים לב זה שהגדרת ה URI מחייבת שתהיה אפשרות גישה לכל משאב בהיררכיות.
למשל: אם יש לי גישה ל
http://www.acme.com/Customers/12345/Orders
אז יהיה לי גישה גם ל:
http://www.acme.com/Customers/12345
http://www.acme.com/Customers
שוב, אנחנו מקבלים המון יתרונות מתכנון נכון לעבודה בסגנון Rest.
יתרון גדול זה שאנחנו יוצרים שימוש במנגנון Cache כי בעצם קריאת GET לדוגמא תשמור את המשאב ב Cache.
וכמובן שיפור אדיר בביצועי המערכת, ביצועי תעבורה, קריאות ועוד..
מתי נשתמש ב REST ומתי ב SOAP?
לזה נקדיש בהמשך פוסט נפרד..
תהנו!


אין תגובות:
הוסף רשומת תגובה