PracticU

גלישה למשאב שאינו קיים

בלי כתוביותעם כתוביות
PracticU › קורס דוט-נט - NET Core. - עם Rest API › גלישה למשאב שאינו קיים
גלישה למשאב שאינו קיים
הסוג השני של שגיאת 404 ב-REST API: לא כתובת שלא קיימת, אלא משאב שלא קיים, כלומר ניסיון להשיג נתון עם ID שאין לו. הסרטון עובר על כל הפונקציות שמקבלות ID ומוסיף להן טיפול.
השלבים העיקריים
1. מחלקה ResourceNotFound: מקבלת int ID ומרכיבה הודעה שנשלח ID ואין כזה. עדיין מחזירים 404.
2. למה אין בעיה ב-get all ובהוספה: בקשה לכל הספרים לא כוללת ID, ואם אין ספרים מחזירים מערך ריק. גם Add לא מקבלת ID, כי ה-database מייצר אותו.
3. GetOneBook: השירות משתמש ב-singleOrDefault, ש"single" אומר שיש לכל היותר תוצאה אחת ו"OrDefault" מחזיר null אם אין. ה-controller לא בדק את ה-null, ולכן החזיר 204 no content. מוסיפים בדיקה, ואם הספר null מחזירים NotFound עם ResourceNotFound Error וה-ID שחיפשו. בבדיקה ID 123 החזיר 404 עם ההודעה, ו-ID 1 החזיר 200.
4. Update: ה-ID מגיע מה-route והספר מה-body. השירות כבר מחזיר null כשהספר לא קיים, אבל ה-controller לא טיפל. מעתיקים אליו את אותה בדיקה (עם השם dbBook). עדכון ID 1 הצליח, ו-ID 123 החזיר 404.
5. Update book price: אותו טיפול, כשהשירות מחזיר null ה-controller מחזיר 404. עדכון ID 1 הצליח ו-ID 1234 החזיר 404.
6. מחיקה, שתי גישות: הפונקציה החזירה return ריק, ולכן ל-controller אין אינדיקציה אם הפריט נמצא. גישה ראשונה: למחוק פריט שלא קיים זה בסדר, ומחזירים 204 no content. גישה שנייה: להודיע ל-frontend שה-ID לא קיים, כי אולי הוא לא היה אמור לשלוח אותו.
7. מימוש הגישה השנייה: משנים את delete לפונקציה שמחזירה boolean, false כשלא נמצא ו-true אחרי מחיקה. ה-controller בודק exist ואם לא, מחזיר NotFound. בבדיקה ID 1234 החזיר 404, ומחיקת ID 6 החזירה 204 בלי נתונים. ניסיון שני למחוק את 6 החזיר שהוא לא קיים.
שימו לב
הבעיה היא בלקוח ולא בשרת: הלקוח שלח ID שלא קיים. לכן מחזירים 404, וכל קוד שמתחיל ב-4 הוא שגיאת לקוח. 204 הוא הצלחה, ולכן אסור להחזיר אותו כשלא הייתה הצלחה.
אחרי הסרטון תוכלו להבחין בין route שלא קיים ל-resource שלא קיים, ולהחזיר 404 מתאים בכל פעולה שמקבלת ID.
השיעור הבא בקורס: שגיאות וולידציה

פרקי ההרצאה: גלישה למשאב שאינו קיים

  1. 00:00

    שגיאת resource שאינו נמצא

  2. 00:38

    מחלקת ResourceNotFound לפי ID

  3. 01:13

    החזרת null מ-getOneBook

  4. 02:08

    הבעיה בהחזרת 204 no content

  5. 02:59

    החזרת 404 עם ResourceNotFoundError

  6. 03:38

    בדיקת התוצאה ושגיאות לקוח

תמלול ההרצאה: גלישה למשאב שאינו קיים

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

  1. 00:02

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

  2. 00:20

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

  3. 00:35

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

  4. 00:54

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

  5. 01:10

    אם כן, זה מתבצע גם ב-service וגם ב-controller. בואו נתחיל לראות שלב שלב איפה זה יכול להיות. אז אם אני כמובן מ-מחפש את כל הספרים, אין פה בכלל ID, אז אין מצב שהוא ירצה להגיד לי, "אני רוצה לקבל את כל הספרים" ויקרה מצב של ID לא קיים.

  6. 01:26

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

  7. 01:42

    לכן זה טוב מאוד שהחזרנו Book? זה אומר שאנחנו יכולים להחזיר פה null, ואז מי שקורא לפונקציה שזה ה-controller יכול לקבל את ה-null ולהגיד, "אה, קיבלתי null. זה אומר שהוא לא קיים." זאת הסיבה גם שהשתמשנו ב-singleOrDefault.

  8. 01:58

    single זה אומר שיכול להיות תוצאה אחת מקסימום ולא שתיים או שלוש. OrDefault זה אומר שיכול להיות שגם יש אפס ואנחנו נחזיר את ה-default שזה אומר null. אז הפונקציה הזאת היא בסדר גמור.

  9. 02:11

    בואו נראה איפה אנחנו קוראים לה. יש לנו פה את ה-controller ואנחנו קוראים לה פה ופה לא טיפלנו בזה. זאת אומרת, אנחנו קוראים ל-getOneBook עם איזשהו ID ואם חוזר null, אז אנחנו פשוט מחזירים null.

  10. 02:27

    אם אוקיי, ואוקיי זה מאתיים. זה אומר שכבר כאן יש איזושהי בעיה. זאת אומרת, בואו נחפש את מאה עשרים ושלוש. גו. רגע, השרת לא רץ.

  11. 02:38

    נריץ אותו כמובן, כמובן. גו, גו, גו. כן, היום תרוץ אולי? תודה. וניגש ונחפש את ה-ID הזה, ושימו לב שהוא מחזיר לי מאתיים וארבע.

  12. 02:49

    האמת הוא החזיר לא מאתיים, מאתיים וארבע. מאתיים וארבע זה אומר שאין לי content להחזיר. זה בדיוק ה-null ששלחנו בחזרה. איפה זה היה?

  13. 02:59

    getOneBook, פה. אז הוא החליף את האוקיי ל-no content כזה, וזה לא מה שאנחנו רוצים להחזיר. אנחנו רוצים להחזיר ארבע מאות וארבע. קודם כל נבדוק האם ה-book שחזר שווה null.

  14. 03:13

    אם כן, returnNotFound. ואנחנו רוצים new ResourceNotFound Error, ולתת לו את אותו ID שניסו לחפש והוא לא נמצא, וזה בעצם מטפל בבעיה. בואו נעצור, נריץ שוב, נלך לכאן ונחפש את מאה עשרים ושלוש.

  15. 03:38

    גו, גו, גו. קודם כל קיבלנו ארבע מאות וארבע בדיוק כמו שאנחנו אמורים לקבל, והנה הודעת השגיאה message ID מאה עשרים ושלוש not found. אפשר not found, אפשר not exist, מה שבא לכם.

  16. 03:49

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

  17. 03:59

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

  18. 04:09

    אז הוא מחזיר ארבע מאות וארבע. כל מה שמתחיל בארבע זה שגיאות לקוח. בואו נראה את המקרה הבא. הפונקציה הבאה שמקבלת ID זה update.

ההרצאה הקודמת: גלישה ל-Route שאינו קיים

ההרצאה הבאה: שגיאות וולידציה

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

  • גלישה באינטרנט עם כתובת IPv6
  • ריאקט - דף 404 - עמוד לא קיים / דף לא נמצא
  • פתיחת פרויקט קיים ב-Android Studio
  • מחיקת מוצר קיים בנוד NodeJS

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

  • קורס Entity Framework Core - עבודה עם מסד נתונים בדוט-נט
  • קורס ASP.NET
  • קורס MVC
  • קורס Git ו-GitHub עם Visual Studio