PracticU

שגיאות וולידציה

בלי כתוביותעם כתוביות
PracticU › קורס דוט-נט - NET Core. - עם Rest API › שגיאות וולידציה
שגיאות וולידציה
מה קורה כשהלקוח שולח ל-REST API נתונים שגויים, כמו ספר בלי title או עם מחיר שלילי, ואיך מגדירים בכל מאפיין של המודל כללי ולידציה והודעות שגיאה משלנו.
הבעיה: Bad Request ולידציה
ולידציה היא אימות קלט המשתמש בעת הוספה או עדכון, והסטטוס שמתאים לה הוא 400 (Bad Request). בהדגמה: ספר חוקי נוסף בהצלחה. ספר בלי title מחזיר 400 עם הודעה The title field is required, וספר בלי title וגם בלי description מחזיר שתי שגיאות באוסף. אבל מחיר שלילי נכנס ל-database בלי בעיה. גם אילוץ ב-database לא פותר את זה: הוא יזרוק exception, והלקוח יקבל שגיאה 500, כלומר קריסת שרת, בלי לדעת מה הבעיה שלו.
למה title נתפס אוטומטית
במודל book, title מוגדר כ-string בלי סימן שאלה, ולכן הוא שדה חובה. כשהמרצה הוסיף ?, ה-migration הפך את השדה ל-allow null, והמערכת עברה את הבדיקה, אבל ה-database סירב ונוצרה שגיאת 500. זו חריגה שלא רוצים, כי הבעיה היא של הלקוח ולא של השרת.
הגדרת ולידציה על המודל
1. required עם הודעה משלנו: לכל מאפיין (title, description, price) מגדירים required עם error message, למשל "Missing book title".
2. אורך מינימלי ומקסימלי: min_length ל-title של 2 תווים, ול-description של 10, ו-max_length של 50 ל-title ושל 2500 ל-description, כל אחד עם הודעה. title של האות J בלבד נדחה, ו-JS התקבל.
3. ביטוי regular expression: כדי לדרוש title שמתחיל באות גדולה. המרצה הדגים תחביר של התחלה, אות גדולה בסוגריים מרובעים ו-.*, ואמר שאין צורך להכיר Regex כרגע אך כדאי להשלים. ABC התקבל. המרצה ציין שהכלל הזה פחות הגיוני, כי "Seven Ways to Success" נדחה.
4. range על המחיר: מאפס ועד גבול עליון שנראה הגיוני לחנות ספרים (אלף), עם הודעה. מחיר של מינוס 100 נדחה, כמו גם 2,100, ו-100 עבר.
המנגנון נקרא data annotation (data validation attributes), ומונע כניסה של מידע שגוי או ארוך מדי ל-database.
שימו לב
כשיש כמה שגיאות, התשובה כוללת אובייקט JSON מוזר עם trace ID. זה נראה כמו פיתוח ולא כמו production. המרצה רוצה לשלוט במה שמוחזר ל-front: מערך או מחרוזת עם השגיאות, או רק הראשונה, ולכן הנושא הבא הוא מניעת הבדיקה האוטומטית.
אחרי הסרטון תוכלו להגדיר על מודל כללי required, אורך, regular expression ו-range, עם הודעות שגיאה משלכם.
השיעור הבא בקורס: מניעת וולידציה אוטומטית

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

  1. 00:00

    שגיאות Bad Request וולידציה

  2. 00:55

    הוספת ספר ללא title

  3. 01:46

    אוסף שגיאות הוולידציה

  4. 02:21

    סכנת קריסת השרת מהדאטה בייס

  5. 03:01

    מניעת שגיאות הוולידציה

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

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

  1. 00:02

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

  2. 00:17

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

  3. 00:29

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

  4. 00:40

    אין לי title לספר. מותר להוסיף ספר בלי שם של ספר? ממש לא. אז מה יקרה אם נעשה את זה? אז כל הדברים האלה זה בעצם Bad Request או שגיאות ולידציה.

  5. 00:51

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

  6. 01:03

    נבצע גלישה ונקבל באמת Bad Request. איכשהו הצלחנו, המערכת הצליחה לגלות שיש פה איזושהי בעיה. שלחה לנו פה איזשהו אובייקט. יש לי פה type.

  7. 01:15

    לא יודע בדיוק מה זה ה-type. אני לא ממש רוצה להחזיר את זה למשתמש, אבל לא משנה. title, one or more validation errors occurred.

  8. 01:24

    אוקיי, שימו לב, בדיקות ולידציה זה לא ה-title הזה לא קשור. במקרה זה title. סטטוס ארבע מאות errors של ה-title שלנו, של הספר The title field is required.

  9. 01:36

    זה מה שכתוב לי. בואו ננסה גם לא לשלוח description. Go. והוא אומר לי שיש לי שתי שגיאות. אחד title של הספר חסר ואחד ה-description חסר.

  10. 01:47

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

  11. 02:00

    אז יש לי title, יש לי description, מחיר שלילי. בוא תוסיף לי בבקשה את הספר, והוא אומר לי "הכול בסדר, הוספתי". מה?

  12. 02:07

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

  13. 02:27

    האתר היה זורק ל-front שגיאת exception. exception זה שגיאת חמש מאות וזה אומר שהשרת קרס, אבל אנחנו לא רוצים שהשרת יקרוס. אז גם אם הדאטה בייס היה בודק ואומר לי, "תקשיב, יש פה, אני לא מסכים, אני קורס לך", אז היוזר יקבל קריסת שרת ויגיד, "מה זה השרת המוזר הזה?

  14. 02:50

    הוא קורס לי". הרי היוזר לא יודע מה הבעיה. הוא, מבחינתו זה בסדר. מחיר שלילי זה בסדר. אחרת למה הוא שלח לי?

  15. 02:56

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

  16. 03:10

    חלק אוטומטית המערכת מצליחה לגלות וחלק לא. דרך אגב, למה היא הצליחה לגלות? כי המודל שלנו, בואו נסתכל רגע על המודל book. המודל book אמר ש-title מבחינתו זה שדה

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

ההרצאה הבאה: מניעת וולידציה אוטומטית

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

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