
ResourceNotFound: מקבלת int ID ומרכיבה הודעה שנשלח ID ואין כזה. עדיין מחזירים 404.Add לא מקבלת ID, כי ה-database מייצר אותו.singleOrDefault, ש"single" אומר שיש לכל היותר תוצאה אחת ו"OrDefault" מחזיר null אם אין. ה-controller לא בדק את ה-null, ולכן החזיר 204 no content. מוסיפים בדיקה, ואם הספר null מחזירים NotFound עם ResourceNotFound Error וה-ID שחיפשו. בבדיקה ID 123 החזיר 404 עם ההודעה, ו-ID 1 החזיר 200.null כשהספר לא קיים, אבל ה-controller לא טיפל. מעתיקים אליו את אותה בדיקה (עם השם dbBook). עדכון ID 1 הצליח, ו-ID 123 החזיר 404.null ה-controller מחזיר 404. עדכון ID 1 הצליח ו-ID 1234 החזיר 404.return ריק, ולכן ל-controller אין אינדיקציה אם הפריט נמצא. גישה ראשונה: למחוק פריט שלא קיים זה בסדר, ומחזירים 204 no content. גישה שנייה: להודיע ל-frontend שה-ID לא קיים, כי אולי הוא לא היה אמור לשלוח אותו.delete לפונקציה שמחזירה boolean, false כשלא נמצא ו-true אחרי מחיקה. ה-controller בודק exist ואם לא, מחזיר NotFound. בבדיקה ID 1234 החזיר 404, ומחיקת ID 6 החזירה 204 בלי נתונים. ניסיון שני למחוק את 6 החזיר שהוא לא קיים.הטקסט המלא של הדקות הראשונות בהרצאה «גלישה למשאב שאינו קיים» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
הסוג הבא של השגיאות שאנחנו הולכים לטפל זה עדיין ארבע מאות וארבע. זאת אומרת, משהו לא נמצא, אבל לא route שלא נמצא אלא resource שלא נמצא. route זה אומר שגלשו לאיזשהו מקום שלא קיים, בדיוק כמו שמקודם ראינו.
resource שלא נמצא זה אומר שאני מנסה להשיג איזשהו דאטה עם ID שלא קיים. עדיין אנחנו אמורים לקבל ארבע מאות וארבע. דבר ראשון בואו נבנה לעצמנו כאן איזושהי מחלקה שמתארת את השגיאה הספציפית הזאת.
בואו נקרא לה ResourceNotFound, ResourceNotFound בצורה כזאת, ומה שאנחנו רוצים לעשות זה לקבל רק את ה-ID. זה יהיה int ID כי אנחנו מתעסקים עם ID, ובואו נרשום את ההודעה ID, מה ששלחו לי בצורה כזאת.
שלחתם לי איזשהו ID ואין לי את ה-ID הזה. עכשיו אנחנו צריכים לזרוק ליוזר או, או לה-להחזיר ליוזר אובייקט כזה כאשר באמת הוא מנסה להשיג ID שלא קיים. איפה בדיוק קורה מצב שהוא שולח ID שלא קיים?
אם כן, זה מתבצע גם ב-service וגם ב-controller. בואו נתחיל לראות שלב שלב איפה זה יכול להיות. אז אם אני כמובן מ-מחפש את כל הספרים, אין פה בכלל ID, אז אין מצב שהוא ירצה להגיד לי, "אני רוצה לקבל את כל הספרים" ויקרה מצב של ID לא קיים.
מקסימום אם אין לי בכלל ספרים זה לא נחשב ID שלא קיים. זה אומר שאני אחזיר לו מערך ריק וזה ממש בסדר. אם הוא מחפש getOneBook ונותן לי ID, יכול להיות שיהיה פה מצב של ID שלא קיים.
לכן זה טוב מאוד שהחזרנו Book? זה אומר שאנחנו יכולים להחזיר פה null, ואז מי שקורא לפונקציה שזה ה-controller יכול לקבל את ה-null ולהגיד, "אה, קיבלתי null. זה אומר שהוא לא קיים." זאת הסיבה גם שהשתמשנו ב-singleOrDefault.
single זה אומר שיכול להיות תוצאה אחת מקסימום ולא שתיים או שלוש. OrDefault זה אומר שיכול להיות שגם יש אפס ואנחנו נחזיר את ה-default שזה אומר null. אז הפונקציה הזאת היא בסדר גמור.
בואו נראה איפה אנחנו קוראים לה. יש לנו פה את ה-controller ואנחנו קוראים לה פה ופה לא טיפלנו בזה. זאת אומרת, אנחנו קוראים ל-getOneBook עם איזשהו ID ואם חוזר null, אז אנחנו פשוט מחזירים null.
אם אוקיי, ואוקיי זה מאתיים. זה אומר שכבר כאן יש איזושהי בעיה. זאת אומרת, בואו נחפש את מאה עשרים ושלוש. גו. רגע, השרת לא רץ.
נריץ אותו כמובן, כמובן. גו, גו, גו. כן, היום תרוץ אולי? תודה. וניגש ונחפש את ה-ID הזה, ושימו לב שהוא מחזיר לי מאתיים וארבע.
האמת הוא החזיר לא מאתיים, מאתיים וארבע. מאתיים וארבע זה אומר שאין לי content להחזיר. זה בדיוק ה-null ששלחנו בחזרה. איפה זה היה?
getOneBook, פה. אז הוא החליף את האוקיי ל-no content כזה, וזה לא מה שאנחנו רוצים להחזיר. אנחנו רוצים להחזיר ארבע מאות וארבע. קודם כל נבדוק האם ה-book שחזר שווה null.
אם כן, returnNotFound. ואנחנו רוצים new ResourceNotFound Error, ולתת לו את אותו ID שניסו לחפש והוא לא נמצא, וזה בעצם מטפל בבעיה. בואו נעצור, נריץ שוב, נלך לכאן ונחפש את מאה עשרים ושלוש.
גו, גו, גו. קודם כל קיבלנו ארבע מאות וארבע בדיוק כמו שאנחנו אמורים לקבל, והנה הודעת השגיאה message ID מאה עשרים ושלוש not found. אפשר not found, אפשר not exist, מה שבא לכם.
בואו ננסה את, אה, מספר אחד. מספר אחד בסדר, אנחנו מקבלים מאתיים בחזרה. מאתיים וארבע זה כמובן הצלחה, ולא הייתה הצלחה כאן. אוקיי?
היה כישלון. אז אנחנו צריכים להחזיר ארבע מאות וארבע. הבעיה היא לא של השרת, הבעיה של הלקוח. הלקוח שלח ID לא נכון, לא השרת. השרת היה בסדר, פשוט הוא לא קיים.
אז הוא מחזיר ארבע מאות וארבע. כל מה שמתחיל בארבע זה שגיאות לקוח. בואו נראה את המקרה הבא. הפונקציה הבאה שמקבלת ID זה update.