מטקסט HTTP לאובייקטים של בעלי חיים


מנסים ב־Swagger, קוראים JSON ועובדים עם אובייקטי Java

שמות הכפתורים, הקוד וקובצי ההורדה נשארו באנגלית וזהים לגרסה האנגלית. לאורך ההסבר נשתמש ב״סריאליזציה״ להמרה מאובייקטים ל־JSON, וב״דה־סריאליזציה״ לשחזור אובייקטים מטקסט JSON.

מפת השיעור · Swagger Petstore · English version

לחלופה מתקדמת יותר, ראו מעבדה 08 — מבקשת HTTP למודל Java עם Retrofit. שם לומדים המרה טיפוסית מ־JSON, הבחנה בין כשלי HTTP, רשת ונתונים, timeout, ביטול, Retry ובדיקות נשלטות עם MockWebServer. התחילו כאן כדי להתנסות במעבר הגלוי בין טקסט לאובייקטים; בחרו במעבדה 08 כשהיסודות האלה כבר מוכרים.

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

נשאיר שלושה ייצוגים גלויים: גוף תשובת HTTP כפי שהתקבל, טקסט JSON שאפשר לערוך, וטבלה שנבנית מאובייקטי Java. ההמרות בין טקסט לאובייקטים יופיעו בשורות קוד מפורשות, כדי שנוכל לעקוב אחריהן.

flowchart LR
    S["שרת Petstore"] -->|גוף תשובת HTTP| T["טקסט JSON"]
    T -->|"gson.fromJson"| O["אובייקטים במערך Pet[]"]
    O -->|"לולאה על השדות"| V["טבלת בעלי חיים"]
    O -->|"gson.toJson"| J["טקסט JSON לשליחה"]
    J -->|"גוף בקשת POST"| S
תצוגה מקדימה: ב־JSON עדיין כתוב Dog 1, ובאובייקט ששינינו כבר כתוב Pixel

בתמונה מהאמולטור גללנו אל התשובה, טקסט ה־JSON לעריכה והטבלה. אחרי GET והמרה לאובייקטים, הכפתור Rename first משנה את שם האובייקט ל־Pixel. שני אזורי הטקסט שומרים על השם המקורי. בעלי החיים ומספרם בשרת הציבורי עשויים להשתנות.

טקסט JSON מעל טבלת בעלי חיים: שם האובייקט הראשון הוא Pixel, ובטקסט המקורי שמו עדיין Dog 1

מסלול הלמידה ונקודת ההתחלה

שלב מה נראה בסיומו?
1. בקשה ותשובה נשלח GET ב־Swagger ובאנדרואיד ונראה את טקסט התשובה.
2. מ־JSON לאובייקטים נערוך JSON ב־Notepad++, נשחזר אובייקטים ונציג טבלת בעלי חיים.
3. עובדים עם האובייקטים נסנן בעלי חיים ונשנה שם בלי לעבד שוב את ה־JSON.
4. מאובייקט לגוף בקשת POST נראה את ה־JSON היוצא ונשווה אותו לתשובת השרת.
רשות: שמירה ושחזור נשמור טקסט JSON ונשחזר את הטבלה אחרי הפעלה מחדש.

מתחילים מפרויקט Empty Views Activity, בשפת Java, בחבילה com.example.topic. תבנית הבסיס שבה השתמשנו היא Topic3; ה־commit שלה הוא bf0b0bd. הורדת קוד נקודת ההתחלה. לעותק עצמאי, חלצו לתיקייה חדשה, פתחו את תיקיית Topic3 ב־Android Studio והמתינו לסנכרון Gradle. קובצי השלבים להורדה מיועדים להשוואה או להתאוששות; במהלך הלמידה מבצעים את השינויים בעצמנו.

כל פרק ממשיך מהמצב הרץ של הפרק הקודם. משאירים את התלויות, ערכות הנושא, כללי הגיבוי וקובצי הבדיקות שלא נדרש לשנות. גם קוד התבנית לטיפול בשולי המסך — edge-to-edge ו־insets — נשאר. ייתכן שלפרויקטים בתיקיית TopicProjects יש אותו מזהה אפליקציה; השתמשו באמולטור ייעודי כדי לשמור על תרגילים אחרים בטלפון שלכם.

דוגמאות ההמרה עצמן קצרות. המסך הרץ דורש גם XML, פקודות import, פונקציות תגובה, הצגת מצב ושגיאות וביטול בקשות. בטבלה נספרות כל שורות Java שנוספו, כולל imports, הערות ושורות ריקות. שינויי XML ו־Gradle נוספים לספירה הזאת.

מעבר שורות Java שנוספו שורות Java שהוסרו
01-get 66 2
02-objects 67 0
03-use-objects 23 0
04-post 47 0
05-preferences 17 0

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

ארבעה מושגים שונים

מושג משמעותו בשיעור
HTTP פרוטוקול בקשה ותשובה, ובו method, כתובת URL, כותרות וקוד מצב.
JSON צורת כתיבה טקסטואלית לערכים: אובייקטים, מערכים, מחרוזות, מספרים, ערכים בוליאניים ו־null.
אובייקט Java מופע בזיכרון, בעל שדות מטיפוסים מוגדרים, שקוד Java יכול לקרוא ולשנות.
Swagger UI תיעוד API אינטראקטיבי שבו ננסה בקשות לפני שנכתוב קוד.

אובייקט JSON כמו {"name":"Milo"} מגיע כטקסט. הוא אינו הופך מעצמו ל־Pet. בכיוון השני, שינוי של pet.name משנה אובייקט בזיכרון; המחרוזת שכבר התקבלה והמידע בשרת נשארים כפי שהיו.

בהמשך: בקשות לשירותי LLM

אותו מסלול ישמש אותנו בהמשך: נבנה נתונים, נמיר אותם ל־JSON, נשלח בקשת HTTP, נקבל טקסט JSON ונשחזר את השדות הדרושים. בשירותי LLM נוספים מבני נתונים ייעודיים, אימות, עלויות ולעיתים תשובה בהזרמה. כאן נבסס תחילה את ההבחנה בין טקסט לאובייקטים.

מקורות: הגדרת ה־API של Petstore, בקשות ב־Volley, מדריך Gson.