
/api/books, בלי גוף בבקשה. מחזירים 200 ומערך JSON של כל הספרים./api/books/{id}. מחזירים 200 ואובייקט JSON של הספר./api/books/{id}, עם כל השדות. ה-ID נלקח מהנתיב ולא מהגוף. מחזירים 200 ואת הספר המעודכן.הטקסט המלא של הדקות הראשונות בהרצאה «הסבר על REST URLs» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
אחרי שהבנו מה זאת ארכיטקטורת רסט ומה היא משמשת, מה הייעוד שלה, אז אנחנו רוצים להתחיל ליישם את זה. אבל לפני שאנחנו הולכים לכתוב קוד יש עוד דבר אחד שאנחנו צריכים להבין וזה בעצם מוסכמה שקיימת לגבי ארכיטקטורת רסט של מה הם אותם url שאנחנו אמורים לבנות בצד של
השרת בשביל להאזין עליהם, איזה מידע בעצם אנחנו אמורים לקבל מהלקוח עבור כל פעולה, איזה מידע אנחנו אמורים להחזיר, כי אם אין את המוסכמה הזאת אז כל שרת יכול להחליט על מוסכמה אחרת וזה יכול לבלבל לקוחות ופתאום כל לקוח צריך רגע ללמוד בדיוק איזה פורמט השרת מצפה שישלחו אליו ולדוגמה שרת אחד יכול להגיד אני
חושף ספרים ובוא נניח שיש לי אתר שנקרא read.com ואם אתם רוצים לגלוש אליי אז תגלשו ל-all books ואני אביא לכם בעצם מידע טקסטואלי לא json בכלל אני אמציא לכם איזשהו מידע משלי עם כל הספרים ושרת אחר יכול להגיד אוקיי אני http-reading.com ואם אתם רוצים לגלוש אליי תגלשו ל-api/mybooks בצורה כזאת ואז אני
אביא לכם xml עם כל הספרים אז אתם רואים שכל שרת שמחליט לבנות רסט פול סרוויס יכול להחליט על איזשהו פורמט אחר משלו שהוא חושב באותו רגע לנכון לבנות.
הדבר הזה כמובן יכול לבלבל לקוחות וכל לקוח צריך עכשיו לבדוק מה הפורמט של אותו שרת, אבל אמרו רגע בואו ניקח איזושהי מוסכמה בינלאומית איך נכון לבנות את ה-URLים האלה, כלומר מה הפורמט שלהם בצורה מדויקת ומה בעצם המידע שכל לקוח צריך לשלוח ומה המידע שהשרה צריך להחזיר לו עבור כל אחת משש בקשות נפוצות של מידע.
אז לצורך כך בואו נבנה לעצמנו כאן טבלת אקסל, שבטבלה הזאת אנחנו הולכים לראות את ששת הבקשות הנפוצות שקיימות למידע, תכף נבין למה זה שש, הרי יש רק חמישה ורבים מרכזיים, זוכרים אותם?
get, post, put, patch ו- delete. למה יש פה שש פעולות מרכזיות? בכל פעולה מה נכון להגדיר מבחינת מוסכמה, מה חייבים להגדיר מבחינת מוסכמה ליתר דיוק בשביל שבאמת יהיה לנו רסט שהוא מקובל לשימוש גם על השרת וגם על הלקוחות.
אז בואו נתחיל, עמודה ראשונה אנחנו רוצים לראות את ה-Desired Operation, מה בעצם הפעולה שאנחנו רוצים לבצע. כאן אנחנו רוצים לראות בעצם את ה-Request של אותה פעולה, יש מספר דברים שאנחנו צריכים לגבי ה-request ולאחר מכן מספר דברים שאנחנו רוצים לגבי ה-response.
אז למעשה יש לנו כאן desired operation ובואו נעשה את זה כאן. ראשית אנחנו רוצים to get all books. בואו נניח שזאת הפעולה שאנחנו רוצים לבצע.
אז הדבר הראשון זה מה ה-verb או המתוד שאנחנו צריכים לשלוח לשרת עבור בקשה של קבלת כל הספרים, וכמובן שאנחנו מדברים על get request.
הדבר הבא שאנחנו רוצים לדעת זה מה בעצם אנחנו צריכים לשלוח באזור של ה-route עצמו. ראוט זה האזור של ה-HTML, של הפורמט של ה-HTTP שמכיל ב-HTTP ריקווסט את הדף, אותו דף שגלשו אליו.
ברסט אנחנו לא גולשים לדף, אנחנו גולשים לכתובת ריסורס. הכתובת הזאת בשפה מקצועית נקראת ראוט. אז אם אנחנו רוצים לגלוש לריסורס של ספרים, אז אנחנו רוצים לגשת ל-slash api/books, ושימו לב שהמוסכמה כבר מדברת על הפורמט הזה.
אנחנו לא גולשים ל-all books, אנחנו לא גולשים ל-my books, אנחנו לא גולשים לכל ראוט שהוא מומצא על ידינו. מה שנכון ומקובל בכל העולם זה /api / ואז שם הקולקשן שאתם רוצים לחשוף ברבים לא ביחיד.
זאת גם נקודה חשובה. אם אני רוצה לגלוש לקולקשן שמחזיר לי מטלות, אני אגלוש ל-api/tasks ברבים, אם אני רוצה לגלוש לטבלה של חתולים אני אגלוש ל-api/cats ברבים ובוקס זה כמובן בוקס ברבים, זה הראוט.
הדבר הבא זה מה בעצם ה-request body מה נמצא ב-body עצמו של ה-request כאשר אנחנו מבצעים גלישת get request אף פעם אין שום דבר ב-body, body הוא תמיד ריק מתוכן.
שלושת אלה מדברים על ה-request עצמו, לכן בואו נעשה מרג' עבור התאים האלה ופשוט request. עכשיו אנחנו רוצים לטפל ברספונס, מה בעצם הסרבר צריך להחזיר לנו בחזרה אם ביקשנו את כל הספרים.
בואו נאחד גם את שני אלה ונגדיר שזה יהיה בדיוק פה באמצע, לא, נגדיר את זה למטה, פה. טוב, אז מה בעצם אנחנו רוצים לעשות ברספונס? אז קודם כל, כאשר אנחנו מחזירים תשובה בחזרה, הדבר הראשון שאנחנו צריכים לחשוב עליו זה מה הסטטוס קוד שלנו.
ולמעשה סטטוס קוד יכול להיות או הצלחה או כישלון, ובכישלון הוא יכול להיות כל מיני דברים אחרים. אז למעשה נרשום פה SuccessStatusCode.
זאת אומרת, אנחנו מדברים על מצב שבו אנחנו הצלחנו בעצם לתת את מה שהיוזר רוצה. ותכף אנחנו נתאר מה קורה אם יש כל מיני שגיאות. גם אם יש שגיאות צריך לדעת מה להחזיר.
אז אם אנחנו הצלחנו לשרת את הבקשה ואנחנו הולכים להחזיר תשובה ללקוח עבור ה-GetRequest שלו, זה יהיה 200. למה הוא יושב כאן על right to left? בואו נעשה את הכל left to right, בצורה כזאת. יופי, יש לנו success סטטוס קוד, זה 200. עכשיו, מה ה-success סטטוס טקסט?
כאן אנחנו ראינו ש-200 זה אוקיי. זה מה שאנחנו צריכים להחזיר. מה אנחנו מחזירים ב-response body? עצמו של הרספונס אז אם אנחנו מנגישים מידע לגבי ספרים והבקשה הייתה כל הספרים אז אנחנו מן הסתם רוצים להחזיר את כל הספרים אבל מה בעצם אנחנו רוצים להחזיר אנחנו רוצים להחזיר קולקשן או מערך של כל הספרים ומה שמקובל היום לבצע בכל העולם זה ג'ייסון הריי אוף אול בוקס מערך
ג'ייסון של כל הספרים שלושת החבר'ה האלה הופכים להיות ה-Response שלנו, אז הנה יש לנו כרגע מצב של טיפול רק בסוג של בקשה אחת ויחידה. בואו טיפה נעשה את זה קצת יותר ברור לעין, זה בעצם הכותרת עצמה ויש לנו כאן את החבר'ה האלה. בואו נעשה פה שיהיה עוד יותר ברור, בורדר בצורה כזאת.
טוב, אז יש לנו כרגע בעצם את בקשה של תביא לי את כל הספרים. אחלה. אני רוצה עכשיו to get one book. אני רוצה ספר אחד ויחיד.
מה ה-verb שלי? get. כי אני רוצה לקבל מהסרבר משהו. מה ה-rout שלי? ה-rout שלנו זה api/book/איזה שהוא ID מסוים.
בוא נניח ID 8. אנחנו רוצים לקבל את הפרמטרים של ספר מספר 8. כמובן ה-ID יכול להשתנות אז ה-Route שלנו זה כל ה-Route שהיה מקודם עבור כל הספרים סלאש ואיזה ID אנחנו רוצים.
מבחינת Body אין לנו אנחנו לא שולחים שום דבר ב-Request Body. Success יהיה 200 כי הצלחנו לתאר או להביא ליוזר מה שאנחנו רוצים.
עבור 200 הסטטוס טקסט יהיה אוקיי ומה שאנחנו מחזירים ללקוח זה json object ולא array of one book איזשהו אובייקט של ה-desired book שאנחנו רוצים להחזיר עכשיו היוזר רוצה to add new book ה-verb שלנו יהיה פוסט במקרה הזה ה-rout שלנו יהיה ה-rout הזה בדיוק.
ראוט שאנחנו גולשים בשביל לקבל את כל הספרים כאשר אנחנו רוצים להוסיף ספר מן הסתם אנחנו צריכים לשלוח מידע מה הספר שאנחנו רוצים להוסיף אז כאן יש לנו את ה-request body וה-request body מחזיק את ה-JSON object of the book to add without ID. ID זה משהו שהסרבר מייצר ברוב המקרים לא צריך לשלוח איי-די, אין שום צורך, אנחנו גם לא יודעים מה האיי-די שהדאטאבייס
הולך לייצר לנו, זה מה שאנחנו שולחים ב-request body. כאשר השרת מוסיף את אותו ספר לדאטאבייס,