PracticU

הסבר על ארכיטקטורה REST

בלי כתוביותעם כתוביות
PracticU › קורס NodeJS › הסבר על ארכיטקטורה REST
מילון מושגים:
REST - סגנון לבניית ממשקי API מעל HTTP, המבוסס על משאבים ועל שיטות סטנדרטיות כמו GET ו-POST.
API - ממשק תכנותי שמגדיר כיצד תוכנה אחת פונה לאחרת ומחליפה איתה נתונים ופעולות.
סשן - פרק זמן של פעילות רציפה בין משתמש למערכת, שבו נשמר מידע על מצבו, למשל לאחר התחברות לאתר.
JavaScript - שפת תכנות שרצה בעיקר בדפדפן ומוסיפה אינטראקטיביות לדפי אינטרנט. רצה גם בצד השרת באמצעות Node.js.
קוד סטטוס - מספר שהשרת מחזיר בתגובת HTTP ומציין את תוצאת הבקשה, למשל 200 להצלחה או 404 לא נמצא.
C# - שפת תכנות מונחית עצמים של מיקרוסופט, המשמשת בעיקר לפיתוח יישומים על פלטפורמת .NET.
Java - שפת תכנות עילית ומונחית עצמים, הרצה על מכונה וירטואלית (JVM) ומשמשת לפיתוח מגוון יישומים.
Node.js - סביבת ריצה שמאפשרת להריץ קוד JavaScript מחוץ לדפדפן, בעיקר בצד השרת.

הסבר על ארכיטקטורה REST
השיעור מסביר את ארכיטקטורת REST, שישה אילוצים שמגדירים Web Service כ-RESTful.
שישה אילוצים
1. Uniform Interface: כל משאב נחשף דרך כתובת לוגית אחת ומדויקת, למשל /api/books לרשימת ספרים או /api/tasks למטלות. הכתובת מאפשרת לקרוא את המידע, ואם יש הרשאה גם לשנות אותו.
2. Client-Server ו-Loosely Coupled: הלקוח והשרת מתפתחים בנפרד, בלי תלות ביניהם. הלקוח צריך לדעת רק את הכתובות של המידע, ולא איך הוא מאוחסן או באיזו שפה השרת בנוי.
3. Stateless: השרת לא זוכר בקשות קודמות של הלקוח, ולכן אין בצד השרת סשן שמחזיק את היסטוריית הגלישה.
4. Cacheable: משאב שמותר לשמור אותו, כמו טבלת מוצרים שנשלפת מאוד הרבה, נשמר בזיכרון כדי לשפר ביצועים, והדבר מצוין בתיאור המשאב.
5. Layered System: הארכיטקטורה יכולה להתפרס על כמה שרתים נפרדים, כשכל אחד מהם יודע לספק רק את מה שהוא אחראי עליו, למשל אימות או חישוב.
6. Code on Demand: אילוץ אופציונלי. השרת יכול להחזיר קוד להרצה אצל הלקוח, כמו JavaScript, או קטע ממשק.
REST ו-HTTP
7. הבקשה: מכילה את השיטה (Verb) שמבקשים לבצע, את הנתיב, את גרסת ה-HTTP, את הכותרות, ושורה ריקה שאחריה מגיע הגוף.
8. התשובה: מכילה את גרסת ה-HTTP, קוד סטטוס וטקסט סטטוס שמתארים מה קרה, את הכותרות, שורה ריקה, ואחריה המידע עצמו בגוף התשובה.
שימו לב
- REST הוא סט של הנחיות ולא מימוש מוגדר. אפשר לממש אותו בכל שפה, כולל C#, Java ו-Node.js.
- את האילוצים הגה רוי פילדינג בשנת 2000.
אחרי ההבנה של האילוצים, מוסכמות הכתובות והשיטות הופכות להיות הצעד הבא.
השיעור הבא בקורס: הסבר על REST URLs

פרקי ההרצאה: הסבר על ארכיטקטורה REST

  1. 00:00

    מה זה ארכיטקטורת REST

  2. 00:42

    ששת האילוצים של REST

  3. 01:19

    Uniform Interface ומשאבים ב-URL

  4. 03:11

    Client Server ו-Loosely Coupled

  5. 05:05

    Stateless: השרת לא זוכר לקוחות

  6. 06:41

    Cacheable: שמירת משאבים בזיכרון

  7. 07:58

    Layered System: שרתים מרובים

  8. 10:28

    מבנה HTTP Request ו-Response

תמלול ההרצאה: הסבר על ארכיטקטורה REST

הטקסט המלא של הדקות הראשונות בהרצאה «הסבר על ארכיטקטורה REST» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.

  1. 00:02

    אחרי שראינו מה זה Web Service וראינו שאחת הארכיטקטורות הכי פופולריות ב-Web Service זה RESTful Service, בואו נצלול ונראה מה זה בדיוק REST, ארכיטקטורת REST. אז קודם כל הראשי תיבות, REST זה פשוט ראשי תיבות של Representational State Transfer.

  2. 00:26

    זה בעצם ארכיטקטורה שהיום היא מאוד פופולרית לצורך יצירת סוג של Web Service. מה שמיוחד ב-REST זה שהוא משתמש בפרוטוקול HTTP בשביל לשלוח ולקבל מידע. הוא מגדיר שישה אילוצים שאם אנחנו בונים איזשהו Web Service שמשתמש או מכיל את האילוצים האלה, אז ה-Web Service הזה נחשב REST. REST לא אומר לכם איך לממש את האילוצים האלה,

  3. 00:59

    הוא רק מגדיר גיידליינס כלליים, דיזיין גיידליינס, כלומר קווים כלליים של האילוצים האלה, אתם תממשו אותם בכל שפה, אפשר לבנות את זה ב-C-Sharp, אפשר לבנות את זה ב-Java, אפשר לבנות את זה ב-Node.js, JavaScript וכדומה.

  4. 01:14

    מי שהגה את כל הרעיון הזה נקרא רוי פלדינג, בשנת 2000 הוא הגה את זה, וכאמור כל Web Service שמממש את הקווים האלה של REST נחשב ה-Restful Service, או קוראים לזה RESTful API, או פשוט רסט API. אז מה הם השישה אילוצים שמגדירים את רסט?

  5. 01:33

    אילוץ ראשון נקרא Uniform Interface. מה שזה אומר, ושהמטרה של רסט זה לחשוף מידע, להנגיש מידע. מידע יושב בדאטאבייסים או בטבלאות, לדוגמה בדאטאבייס SQLי כלשהו, או ב-Collections, בדאטאבייס מסוג MongoDB לדוגמה, והטבלה הזאת או הקולקשן הזה, קולקשן זה משהו שמקביל לטבלה בדאטאבייס אחר, נקראים ריסורסז.

  6. 02:04

    זה בעצם השם שנכון להתעסק איתו עם המידע עצמו של רסט. וכל ריסורס כזה חייב להיחשף על ידי לוג'יקל url ספציפי, url לוגי ספציפי אחד ויחיד ומדויק.

  7. 02:22

    בואו נראה כמה דוגמאות. אם יש לנו לדוגמת טבלה של ספרים ואנחנו רוצים לחשוף אותה לעולם בעזרת רסט, אז אנחנו צריכים לתאר לינק ספציפי שאם גולשים אליו מקבלים את הספרים האלה.

  8. 02:36

    לדוגמה, http://read.com/api/books. הרבה פעמים מקובל שה-URLים האלה יהיו נגישים על ידי המילה API. לדוגמה, יש לנו אוסף של מטלות באיזשהו אתר אינטרנט שחושף משימות שאנחנו יכולים להגדיר לעצמנו.

  9. 03:00

    אז url כזה שחושף את המשימות יכול להיות http://mytasks.com זה בעצם השם של ה-url שלנו /api/tasks. דרך ה-API הזה אנחנו יכולים, דרך סליחה ה-URL הזה אנחנו יכולים לקבל את המידע ואם יש לנו הרשאות אז אנחנו יכולים גם לשנות את המידע כמו לתקן אותו, להוסיף אליו, למחוק אותו וכדומה.

  10. 03:24

    אילוץ שני נקרא Client Server Model. זה בעצם מדבר על זה שהבנייה של ה-Client וה-Server, ואני מזכיר לכם, ה-Server זה ה-Restful Service שאנחנו בונים.

  11. 03:38

    Client זה מי שמשתמש ב-Restful Server שלנו, גולש ומקבל את המידע. הם חייבים להיות משהו שנקרא Loosely Coupled בעברית, ונקרא צימוד רפוי.

  12. 03:52

    אבל יותר מקובל השם loosely coupled. מה זה אומר? זה אומר שהקליינט והסרבר חייבים להיבנות ולהתפתח מבלי שיהיה ביניהם תלות אחד בשני.

  13. 04:11

    זאת אומרת, התלות ביניהם היא ממש ממש loosely, רפואיה כזאת. כל אחד מהם לא יודע כלום או יודע מעט מאוד על האחר.

  14. 04:21

    זה אומר שהקליינט, כל מה שהוא צריך לדעת בשביל לבנות אותו זה רק את ה-URLים של איך לקבל מידע מהסרבר, זה הכל. הוא לא אמור לדעת מה אמר הדאטאבייס, איך המידע מיוצג בדאטאבייס, מה שפת התכנות שהסרבר בנוי בה, איך הסרבר מכיל לוגיקה מסוימת, הוא לא אמור לדעת את כל הדברים האלה.

  15. 04:42

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

  16. 05:01

    האם הלקוח הוא מובייל או ובסייט או וב סרוויס אחר, לא יודע את כל הדברים האלה. אילוץ מספר שלוש נקרא סטייטלס.

  17. 05:11

    סטייטלס מתאר את הדאטה שיושב בצד של השרת. הדאטה שיושב בצד של השרת, במקרה הזה, כן, הוא בעצם לא אמור לזכור מה היה הדאטה הקודם שהלקוח ביקש. האינטראקציה בין הלקוח לשרת אמור להיות סטייטלס בצד של השרת עצמו.

  18. 05:39

    הסרבר לא אמור לשמור שום דבר על הקריאה האחרונה שהלקוח ביצע. הוא אמור להתייחס לכל קריאה של כל לקוח כאילו זאת קריאה חדשה לגמרי, הוא לא זוכר מה היו הקריאות הקודמות, הוא לא זוכר מה הלקוח הקודם ביקש, הוא לא אמור לשמור לו שום דבר בצד של השרת לגבי הקריאות

  19. 05:58

    האלה. אין שום דבר שנקרא סשן. הסשן הזה בעצם אובייקט שניתן לבנות בצד של השרת, שמחזיק מידע על הגלישות האחרונות של אותו לקוח.

  20. 06:09

    אם סשן קיים פר לקוח, שום סשן לא תקף ב-Restful Service. הוא לא אמור לזכור שום דבר לגבי ההיסטוריה של הלקוח, הוא לא אמור לשמור את הבקשות האחרונות, הלקוח ביקש מבחינת היסטוריה בשביל לדעת להנגיש לו אולי דברים יותר טובים.

  21. 06:27

    כל הדברים האלה אולי קיימים בכל מיני מקומות אחרים, מבחינת רסט אין שום דבר שקשור לשמירה של המידע של גלישות קודמות של הלקוחות.

  22. 06:41

    אילוץ מספר 4 נקרא קאשאבל. קאש עושה פרפורמנס טוב יותר, משפר פרפורמנס. כל מה שקאש אומר זה בעצם היכולת לשמור ריסורס בצד של האפליקציה בזיכרון לדוגמה אם יש לנו טבלה מסוימת של מוצרים בוא ניקח טבלה של מוצרים שאותה טבלה אני רוצה לחשוף לגבי כל הלקוחות והמון לקוחות גולשים ורוצים את טבלת המוצרים

  23. 07:08

    אז גלישה לדאטאבייס כל פעם בשביל לטעון את טבלת המוצרים והחזרת הטבלה לכל הלקוחות אולי זה משהו שגוזל זמן רב אז אולי כדאי לקחת את כל הטבלה ולשים אותה בזיכרון ואז גלישות חוזרות פשוט מביאות את כל הטבלה ללקוחות.

  24. 07:24

    שימו לב, זה לא פר לקוח כמו סשן, זה אותו מידע לגבי כל הלקוחות. אז רסט ארכיטקצ'ר אומרת, קאש זה דבר שהוא מקובל וחוקי לגמרי ומבורך לביצוע.

  25. 07:37

    במצב כזה ה-URL שחושף נניח את הטבלה הזאת, אם הוא חושף אותה כטבלה שהיא קשאבול, צריך להודיע או לייצג אותה כטבלה שהיא קשאבול. אולי בדוקומנטציה, אולי ב-URL לציין את זה באופן כלשהו.

  26. 07:54

    אילוץ מספר 5 נקרא Layered System. זה בעצם אומר שהארכיטקטורה צריכה לתמוך במצב שהיא נחשבת Layered. זה אומר שהיא יכולה להיות משולבת על פני מספר מכונות או שרתים נפרדים.

  27. 08:15

    לדוגמה, יש לנו שרת A ששומר את ה-Database, ושרת b שבכלל מבצע אותנטיקציה לראות אם היוזר הוא חוקי או יש לו יוזרנר ופאסוורד נכונים ובשרת גימל בכלל יש לנו חישוב מסוים שאנחנו צריכים.

  28. 08:33

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

  29. 08:50

    אילוץ מספר 6 נקרא Code on Demand. זה נחשב אופציונלי מפני שזה כבר תלוי בלוגיקה של הלקוח עצמו. רסט מאפשרת להחזיר ללקוח קוד שנחשב Executable, כלומר קוד שניתן להרצה.

  30. 09:08

    זאת בשביל לתמוך באיזשהו חלק של האפליקציה בצד של הלקוח. דוגמה יכולה להיות שהשרת לא מחזיר לנו בהכרח דאטה טהור, אלא מחזיר קוד JavaScript שמסוגל לרוץ בצד של הלקוח בשביל לבצע איזשהו חישוב מסוים.

  31. 09:24

    דוגמה אחרת יכולה להיות שהשרת ברסט מחזיר לנו קטע HTML-י שמחזיק איזשהו פיסת UI שאנחנו רוצים להציג בצד של הלקוח. אז קוד-אוד-מימנד מדבר על הדברים האלה שרסט יכול להחזיר את הקודים האלה שירוצו בקליינט סייד.

  32. 09:43

    מה הקשר בין רסט ו-HTTP? אמרנו ש-Rest בנוי על גבי פרוטוקול HTTP. מה זה אומר? המידע שנשלח ומתקבל מ-Restful Service נמצא בתוך המסמכים של ה-HTTP.

  33. 10:00

    ה-HTTP request מחזיק את המידע שנשלח מהקליינט ל-Restful Service שאנחנו בונים. ה-HTTP response מחזיר את המידע שאנחנו רוצים להחזיר ללקוח מה-Rest שאנחנו בונים בחזרה למי שביצע את הגלישה אלינו.

  34. 10:19

    אז בואו נבין רגע איפה בדיוק המידע יושב בתוך מסמכי ה-HTTP, Request ו-Response. בואו נעשה איזושהי תזכורת קודם כל על ה-HTTP Request פורמט, על הפורמט עצמו.

  35. 10:33

    אמרנו שיש סדרה של אזורים במסמך ה-Request של ה-HTTP. יש לנו את ה-Method או לפעמים קוראים לזה Verb, שמחזיק את מה הייעוד של הרקווסט, גט, פוסט וכדומה.

  36. 10:48

    יש לנו את האזור של לאיזה דף אנחנו גולשים, ושוב זה HTTP רקווסט, כאילו אנחנו גולשים לדף רגיל. יש לנו את הגרסה של ה-HTTP. יש לנו את ההדרים והמידע הנלווה לרקווסט.

  37. 11:04

    יש לנו Empty Line, שורה ריקה, ואז יש לנו את ה-Body, שזה המידע המרכזי שאנחנו רוצים לשלוח מהלקוח לשרת. הפורמט של ה-HTTP. איפה פה משתלב ה-Rest Data, ה-Rest Request?

  38. 11:20

    שוב, יש את ששת החלקים האלה, ויש לנו את ה-Verb, מה אנחנו רוצים לבצע. אם אנחנו רוצים to get data, אם אנחנו רוצים to post data, זה באזור של ה-Verb.

  39. 11:34

    כאן, במקום הדף שאליו אנחנו רוצים לגלוש, יש את אותו Resource URL, אותו חלק ב-URL שאומר לאן בדיוק אנחנו רוצים לגלוש, לא כולל הכתובת הראשית של האתר.

  40. 11:48

    אנחנו תכף נראה דוגמה יותר ספציפית. לדוגמה, api/food, api/books, api/tasks וכדומה. כאן יש לנו את הגרסה של ה-HTTP, מפני שאנחנו HTTP request.

  41. 12:05

    כל ההדרים של ה-HTTP נמצאים באזור הזה. כאן שוב יש לנו את ה-empty line ויש לנו את ה-arrest request data, אם אנחנו רוצים לשלוח מידע מסוים ב-Rest, כאן אנחנו עושים את זה.

  42. 12:18

    HTTP ריספונס פורמט היה בא לחלקים הבאים. פה הייתה גרסת ה-HTTP, HTTP סטטוס קוד זה מספר שמתאר מה בעצם קרה, הצלחנו, לא הצלחנו, אם לא הצלחנו אז מה בדיוק הסיבה שלא הצלחנו.

  43. 12:35

    HTTP סטטוס טקסט זה מילה או מספר מילים שמתארות את הסטטוס קוד. יש לנו את ה-HTTP Response Headers, שזה בעצם מה המידע הנלווה שהשרת שולח ללקוח.

  44. 12:50

    יש לנו שורה ריקה, ויש לנו את המידע המרכזי שאנחנו שולחים מהשרת ללקוח. לדוגמה, אם הלקוח היה גולש לדף, כאן היינו שמים את ה-HTML של הדף.

  45. 13:01

    איך רסט משתמשת בפורמט הזה בשביל לשלוח מידע מהשרת ללקוח? אזור ראשון, HTTP Version, נשאר אותו דבר, מה הגרסה של ה-HTTP?

  46. 13:11

    סטטוס קוד נשאר אותו הדבר, מה בעצם קרה בצד של השרת? האם הצלחנו לתת לך את הבקשה? האם הייתה איזושהי שגיאה? HTTP סטטוס טקסט, בול אותו הדבר, נשאר מילה או מספר מילים שמתארות את הסטטוס קוד.

  47. 13:27

    כל ההדרים, המידע הנלווה שאנחנו רוצים לשלוח מהשרת ללקוח, סיים אותו הדבר, שורה ריקה, והדאטה שאנחנו שולחים מהשרת ללקוח ברסט, נמצא באזור הזה, היה פה ה-HTTP ריספונס בודי.

  48. 13:45

    פה ה-REST ריספונס דאטה יושב. בואו נראה כמה דוגמאות לריקווסט ולריספונס בארכיטקטוריית רסט. אז בואו נניח שאנחנו רוצים to get request, אנחנו רוצים להביא מידע משרת רסט.

  49. 14:01

    המידע שאנחנו רוצים להביא נמצא ב-URL שנקרא /api/books. אנחנו כנראה רוצים להביא מידע לגבי ספרים. יש לנו כאן את גרסת ה-HTTP, בואו נניח ה-HTTP היא גרסה 1.1, והנה ההדרים, המידע הנלווה שאנחנו צריכים לתאר לסרבר.

  50. 14:23

    לדוגמה, איפה הסרבר נמצא? בואו נניח שהסרבר, הכתובת שלו זה http.read.com, איזשהו אתר שהמצאתי. והכתובת IP address של היוזר נמצאת, אנחנו רואים כאן,

לקורס המלא: קורס NodeJS אונליין בעברית

ההרצאה הקודמת: הסבר על Web Service

ההרצאה הבאה: הסבר על REST URLs

הרצאות קשורות מקורסים אחרים

  • ארכיטקטורה של MVC
  • ארכיטקטורה של Kubernetes
  • מוסכמות ב-REST API
  • לוח אם ומעבד - ארכיטקטורה של המעבד

קורסים נוספים במסלול

  • קורס יסודות HTML - בניית אתר אינטרנט פשוט
  • קורס CSS 3 - בדגש על Flex & Grid
  • קורס Javascript כולל JQuery
  • קורס ג'אווה סקריפט מעשי - JavaScript
  • קורס TypeScript
  • קורס ריאקט - React