PracticU

החזרת אובייקט ב-JSON

בלי כתוביותעם כתוביות
PracticU › קורס דוט-נט - NET Core. - עם Rest API › החזרת אובייקט ב-JSON
החזרת אובייקט ב-JSON
מוסיפים Endpoint שמחזיר מדינה בודדת לפי קוד, ולומדים להתמודד עם Route Parameter, ערכי null ו-warnings של C# בדרך.
השלבים העיקריים
1. הגדרת Route Parameter: נתיב כמו api/countries/{code} מגדיר פרמטר בתוך סוגריים מסולסלים - כל מה שהמשתמש ישלח במקום זה (למשל IL או ABC) ייקלט כערך הפרמטר. שימוש בשני נתיבים זהים (api/countries פעמיים) יוצר שגיאת Ambiguous route, ולכן חייבים לבדל את הנתיבים.
2. קריאת הפרמטר מהבקשה: הפונקציה מקבלת אובייקט מסוג HttpContext, שמייצג את הבקשה (Request) והתשובה (Response) הנוכחיות. גישה ל-request.RouteValues (אוסף מסוג Dictionary) מאפשרת לשלוף את ערך הפרמטר לפי השם שהוגדר בנתיב, ולהמיר אותו ל-string.
3. טיפול ב-Warnings של nullable: C# מזהיר שהערך שמתקבל עשוי להיות null. כשניתן להוכיח שבפועל זה לא יקרה (כי ברירת המחדל בלעדיו מובילה לנתיב אחר), אפשר להשתמש בסימן קריאה (!) כדי לציין ל-C# שבנקודה הזו בוודאות אין null - אך אפשר גם לכבות את הבדיקה כולה ברמת הפרויקט (לא מומלץ) או להשאיר ? כשבאמת יכול להיות null.
4. חיפוש המדינה: בעזרת SingleOrDefault על אוסף המדינות ועם lambda expression שמשווה את הקוד, מוצאים מדינה בודדת לפי הקוד שהתקבל, או מקבלים null אם לא נמצאה כזו.
5. רגישות לאותיות (Case Sensitivity): כדי שהחיפוש יעבוד בלי תלות באם הקוד נשלח באותיות גדולות או קטנות, ממירים את שני הצדדים להשוואה ל-lower case (ToLower).
6. כלי עזר להצגה: תוסף Chrome בשם JSON Viewer Pro מציג את תוצאת ה-JSON בצורה נוחה וקריאה יותר בדפדפן.
שימו לב
- בניגוד למערך של כל המדינות, כאן מוחזר אובייקט בודד בפורמט JSON - או null אם לא נמצאה מדינה עם הקוד המבוקש.
- עדיף לדייק בטיפול ב-null (באמצעות סימני ? ו-! נקודתיים) ולא לכבות באופן גורף את ההגנה מפני null ברמת הפרויקט.
בסיום ההרצאה יודעים לקלוט פרמטר מתוך הנתיב, לחפש איתו פריט בודד באוסף, ולהחזיר אותו (או null) כאובייקט JSON.
השיעור הבא בקורס: בעיות בניתובים דוט נט NET Core.
מילון מושגים:
JSON – פורמט טקסט קריא לייצוג נתונים מובְנים כזוגות מפתח-ערך, נפוץ להחלפת מידע בין שרת ללקוח.
Endpoint – נקודת קצה שאליה פונים ב-API, המזוהה בכתובת ומטפלת בסוג מסוים של בקשות; גם מכשיר קצה ברשת.
ראוט – הגדרה שמקשרת כתובת בקשה לקוד שמטפל בה באפליקציה; גם מסלול שדרכו עוברות חבילות ברשת.
C# – שפת תכנות מונחית עצמים של מיקרוסופט, המשמשת בעיקר לפיתוח יישומים על פלטפורמת .NET.
API – ממשק תכנותי שמגדיר כיצד תוכנה אחת פונה לאחרת ומחליפה איתה נתונים ופעולות.
תגובה – המידע שהשרת מחזיר ללקוח בתשובה לבקשה, הכולל בדרך כלל נתונים וקוד סטטוס.
Dictionary – מבנה נתונים שמאחסן זוגות של מפתח וערך, ומאפשר שליפה מהירה של ערך לפי מפתחו.
Lambda – פונקציה קצרה ואנונימית בקוד; גם שירות של AWS להרצת קוד בענן בלי לנהל שרתים.

פרקי ההרצאה: החזרת אובייקט ב-JSON

  1. 00:00

    החזרת country בודדת לפי code

  2. 00:55

    התנגשות Route ושגיאת Ambiguous

  3. 01:29

    הגדרת Route Parameter

  4. 02:41

    חילוץ הערך מה-Request

  5. 03:15

    אובייקט ה-HTTP Context

  6. 03:51

    קריאת Route Values

  7. 06:01

    טיפול ב-Warnings של null

תמלול ההרצאה: החזרת אובייקט ב-JSON

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

  1. 00:02

    הדבר הבא שאנחנו רוצים להחזיר זה country אחת. נורים שלכל country יש גם name וגם code כמובן. בדרך כלל אמרנו שאם אנחנו רוצים להביא נתון בודד זה יהיה לפי code.

  2. 00:17

    אז בואו נעשה את זה, בואו נגיד שאם מישהו שולח אליי code, אז אני מחזיר לו את האובייקט עצמו וכך הוא יכול לראות גם את הname וגם את הקוד של אותה country.

  3. 00:28

    אולי בהמשך יענו עוד מאפיינים. מה פופיוליישן, מה עיר הבירה, whatever, כאן אנחנו רוצים שיהיה לנו API slash countries, ואם אנחנו שולחים לדוגמה IL, אז שהוא יביא לי את האובייקט, בלבד לא מערך, אובייקט בודד, שמתאר את המדינה, שזה הקוד שלה, שזה כמובן ישראל.

  4. 00:51

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

  5. 01:12

    הנה,.NET קורסת, אומרת לנו תקשיב, יש פה ambiguous, ambiguous זה דו משמעות, של API countries, אתה אסור לך שיהיה דבר כזה, וכמובן זה לא הגיוני, לאן בדיוק המערכת אמורה להיכנס.

  6. 01:25

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

  7. 01:52

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

  8. 02:07

    אם אנחנו נבצע רגע בשביל לראות שני ביניהם, נבצע רגע החזרה של Testing Code Route, רק בשביל לראות את ההבדלים. כמטור אולף חמש, אוקיי, הנה הוא רץ.

  9. 02:23

    אז כשאנחנו גולשים ל-API Countries, הנה אנחנו מקבלים את הראוט הזה עם כל המדינות, ובואו נגלוש ל-slash abc, Enter, והנה אנחנו רואים שהגענו לראוט השני, לפונקציה השנייה.

  10. 02:40

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

  11. 02:53

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

  12. 03:06

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

  13. 03:15

    הפונקציה יכולה לקבל אובייקט מסוג HTTP Context. HTTP Context זה בעצם אובייקט שמייצג את ה-HTTP Request. ריקווסט וריספונס הנוכחיים שמתבצעים כרגע.

  14. 03:28

    אם אני פונה ל-http context. אני רואה שיש לי ריקווסט וריספונס זה שני אובייקטים שמייצגים את התקשורת של הריקווסט ושל הריספונס הריקווסט כבר התבצע והריספונס עדיין לא התבצע בגלל שאנחנו כרגע נמצאים בדיוק בפונקציה בתוך הרסט API.

  15. 03:48

    אם הפונקציה הזאת מתחילה להתבצע, כבר היה ריקווסט אבל עדיין עוד לא היה ריספונס הריספונס יהיה אחרי הריטר אז אני פונה ל-request ופונה ל-route values, שזה collection, והוא אומר לי, תגיד, איזה משתנה יש בתוך ה-collection?

  16. 04:06

    זה משתנה כזה של dictionary, dictionary זה key value collection, הוא אומר לי, תן לי פה את ה-key, זה יהיה קוד, ואני אחזיר לך את ה-value שלו.

  17. 04:19

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

  18. 04:31

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

  19. 04:44

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

  20. 04:55

    כנתור אולף 5, go יופי, נשים רגע את זה פה, נשים את זה פה, נגדיר כאן שאנחנו רוצים לשלוח ABC. אז הנה אני רואה קיבלתי טסטינג, והנה אני רואה פה בקטן כזה את ה-ABC שהתקבל.

  21. 05:13

    בואו נשלח פה משהו אחר, 1, 2, 3, go. הנה אנחנו רואים שאנחנו מקבלים את אותו פרמטר ששולחים. הנה, hello, go, בבקשה, קיבלנו hello. route parameter, אם אני אביא לו.

  22. 05:27

    עוד משהו פה, hello slash bye, בי בצורה כזאת, אז כמובן הוא יגיד לי שאין שום ראוט כזה, נראה ש-slash מייצג, עוד חלק בראוט, ואין לי ראוט שמקבל בדיוק פרמטר פה, ואז את המילה בי, שני פרמטרים, אז כמובן שיש לנו רק את האפשרות הזאת, API countries, ואז כל value

  23. 05:51

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

  24. 06:10

    אז למה יש Warnings? זה בגלל נלים. אפשר לראות את זה כאן. ה-Request is not null here. בואו נראה מה בעצם הוא אומר לנו. הוא אומר לנו, תקשיבו, כל הסיפור הזה יכול להיות נל, אבל, אסור לכם להכניס

לקורס המלא: קורס דוט-נט - NET Core. - עם Rest API

ההרצאה הקודמת: החזרת מערך ב-JSON

ההרצאה הבאה: בעיות בניתובים - דוט נט NET Core.

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

  • JSON
  • החזרת ערכים מה-Controller
  • דוגמאות לעבודה עם JSON - חלק 1
  • אובייקט Canvas באנדרואיד

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

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