
GET לנתיב /api/books, בלי גוף בקשה. בהצלחה מוחזר קוד 200 ו-JSON array עם כל הספרים.GET לנתיב /api/books/<id> (ה-ID הוא חלק מהנתיב). בהצלחה מוחזר קוד 200 ו-JSON object של הפריט המבוקש.POST לאותו נתיב /api/books, עם גוף הבקשה שמכיל את פרטי הפריט החדש (בלי ID). בהצלחה מוחזר קוד 200/201 ו-JSON object של הפריט כפי שנשמר בדאטהבייס (כולל ID שנוצר).PUT לנתיב /api/books/<id>, עם גוף בקשה שמכיל את כל פרטי הפריט לעדכון. מוחזר קוד 200 ו-JSON object של הפריט המעודכן.PATCH לאותו נתיב, עם גוף בקשה שמכיל רק את השדות שרוצים לעדכן (למשל רק מחיר). מוחזר קוד 200 ו-JSON object של הפריט המעודכן.DELETE לנתיב /api/books/<id>, בלי גוף בקשה. מוחזר קוד 200 או 204 (No Content), ובלי גוף בתשובה.Not Found).הטקסט המלא של הדקות הראשונות בהרצאה «מוסכמות ב-REST API» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
ל-rest API יש איזושהי מוסכמה לגבי איך נכון לקרוא לראותים השונים שאני גולש אליהם, מה נכון לשלוח, מה נכון לקבל, בוא נגיד בכל מיני מצבים מאוד מאוד נפוצים.
יש לנו פה טבלת Excel שרציתי לרשום את המצבים השונים האלה. אז נתחיל עם מה ה-desired operation שאנחנו רוצים. מה אנחנו בעצם רוצים לבצע.
אני רוצה to get, all books, בואו נעבור שלב שלב ונראה מה אנחנו צריכים לשלוח ומה אנחנו רוצים לקבל בשביל ה-desired operation הזה. אז דבר ראשון יש לנו request, מה יש לנו ב-request?
ב-request יש לנו את ה-route שאנחנו גולשים, אפילו לפני ה-route יש לנו את המתוד, איזה מתוד נכון לבצע? יש לנו את ה, בוא נשים רגע את ה-desired operation פה, יש לנו את ה-route שאליו אנחנו גולשים, ומה אנחנו שולחים בבאדי.
כלושת הדברים האלה שייכים ל-request. אז בואו נשים כאן request. עכשיו, בר-response, מה אנחנו מחזירים בחזרה? אז קודם כל, יש לנו את ה-status code, עבור הצלחה.
נניח אנחנו רוצים success status code. בואו נרשום. אם הייתה לנו הצלחה, איזה status code אנחנו מחזירים בחזרה? מהסוכס?
סטטוס טקסט. אם יש הצלחה, מה אנחנו מחזירים בסטטוס טקסט? ו מה אנחנו מחזירים בבאדי? בואו נגיד שזה יהיה response body, וזה יהיה request body.
ועכשיו מה שאנחנו רוצים לעשות זה לעבור שלב שלב ולראות את המוסכמות האלה. זה בעצם ה-response. איזה מתוד אנחנו צריכים לשלוח ברקווסט אם אנחנו רוצים לקבל את כל הספרים? כמובן, get.
לאיזה ראוט אנחנו רוצים, ראוט כמובן זה רק הכתובת הפנימית, slash API, slash books, מה אני רוצה בבאדי? אין כלום בבאדי, אנחנו לא צריכים לרשום ברקווסט בדי, החלק התחתון של המסמך של הרקווסט, איזשהו דבר הוא כבר יודע, השרת ידע, אנחנו צריכים להחזיר מכל הספרים,
מה השרת מחזיר במקרה של סטטוס קוד של הצלחה? 200, מה הטקסט? אוקיי, מה הוא מחזיר בבאדי? JSON of all books, כי ביקשנו את כל הספרים. מה קורה אם אנחנו רוצים to get one book by ID?
לפי מה אנחנו רוצים ספר בודד? לפי השם של הספר? אולי יש כמה ספרים עם אותו שם. הרבה פעמים ברסט API אתם אומרים מה אתם רוצים בעזרת איזשהו ID.
קוד שיש מזהה ייחודי עבור כל אחד מהערכים. מה המתוד? ליאן אני גולש? פלש API. ppi, slash, books, אבל, בתוך הראוט, כחלק מהראוט, אנחנו רושמים את ה-id, לדוגמה, 7, נניח שאני רוצה לראות, את הפרטים של ספר מספר 7, שימו לב, זה רק דוגמה, מה אני שולח בבאדי?
שום דבר, מה השרת נותן לי, כאשר הוא מצליח לשרת, את הבקשה שלי, 200, זה אוקיי, מה הוא מחזיר? json, off, one book, ה-json הראשון, והיה json array, of all books, ה-json הזה יהיה, json object, of one book, a זה book, עם id 7, מה קורה אם אנחנו רוצים to add new book, המתוד יהיה post, אנחנו
גולשים ל-slash api, slash books, ראינו, זה יכול להיות אותו הראוט, כי, המתוד של הריקווסט הוא שונה והשרת באמת משתמש בתשלובת של שני החבר'ה האלה בשביל לדעת איזו פונקציה באה Backend להפעיל.
זה אחד העקרונות החשובים ביותר של Rest API. התשלובת הזאת אסור לה לחזור על עצמה עוד פעם. זאת אומרת אני לא יכול שיהיה לי איפשהו עוד תשלובת כזאת.
כי זה נקרא Route Conflict. אנחנו נדבר על זה בהמשך, נראה דוגמה. השרת לא ידע. יש לנו שני ראוטים, זה תביא לי את הספר ה... לא יודע, הכי יפה או הכי נמכר, וזה תביא לי את כל הספרים.
אז השרת התבלבל בהקשר הזה ומשהו לא בסדר יהיה. או שיש גאיה, או שהוא יחזיר לי משהו לא אחד מהם, הוא יתעלם, תלוי באיזה מערכת אנחנו בונים את השרת.
אבל כאן יש לי תשלובת שונה. פה get ו-Route א', פה get ו-Route ב', ופה post ו-Route א'. מותר. מה אנחנו שולחים? בבאדי.
בבאדי אנחנו שולחים JSON object of the, ו-add, הנה הבאדי, מה השארת מחזיר לנו? 200 ו-1, כי הוא מוסיף אותו לדטאבייס, ה-success status text זה created, ויש לנו כאן, הוא מחזיר את ה-json object of the added book, לפי מה שקיים בדטאבייס, הוא כאילו שולף אותו מהדטאבייס, ואומר, זה מה אוספתי לך, קח אותו.
הלקוח עכשיו, או הפרונטנד, רואה בול מה יש בדטאבייס, כי מה שהלקוח שלח זה זה, זה לא קיים בדטאבייס. אולי הדטאבייס אוסיף עוד כל מיני דברים, נתיב לתמונה, קוד, זמן יצירת הספר בדטאבייס.
אז מה שמקובל זה פשוט להגיד לו זה מה שיש לי עכשיו ב-database, קח אותו הדבר הבא שהוא מאוד נפוץ זה update full book זאת אומרת יש לנו כבר ספר אנחנו רוצים לעדכן את כולו זה יהיה put request אנחנו גולשים לזה זאת אומרת אנחנו גולשים ל-api books אבל שולחים לו את ה-id ה-id נשלח
ב-route זה מה שמקובל במקרה הזה תודה ומה שאנחנו רוצים לשלוח ב-body, ברקווסט של ה-body זה json object of the whole book to update.
זה מה שאנחנו שולחים. השרת מחזיר לנו 200, אין איזה סטטוס אחר מדויק בשביל update, חבל שאין, אבל אין. 200 זה יהיה אוקיי, והוא מחזיר לנו json object of the updated book לפי מה שקיים בדטאבס.
as in db. הדבר הבא שיש לנו זה, update partial book. אני רוצה להתקן ספר, אבל אני לא רוצה לשלוח לך את כל הפרטים, אני רוצה לשלוח חלק, זה יהיה patch,