מערך שיעור: מבוא ל-Backend ו-HTTP
משך: יום לימוד מלא — 6 שעות אקדמיות (270 דקות).
מטרת השיעור: הסטודנטים יבינו את תפקיד ה-Backend ואת שפת ה-HTTP, ויקימו מאפס שרת FastAPI שמקבל Path, Query ו-Body ומחזיר קודים נכונים.
בסוף השיעור הסטודנטים צריכים:
- לתכנן API: למפות פעולות CRUD ל-Methods, Paths וקודי סטטוס.
- להקים פרויקט FastAPI מאפס: venv, התקנה,
app = FastAPI(), Route,uvicorn main:app --reloadו-/docs. - לכתוב Endpoints עם Path Parameter, Query Parameters ו-Body (Pydantic), ולהחזיר 201/404/400, ולהבין את 422 האוטומטי.
דגש קריטי: ההקמה מאפס (הסילבוס מדגיש: איך מתקינים, איך יוצרים קובץ, איך מייבאים, איך יוצרים app, Route ראשון, הרצה). לוודא שכל סטודנט הריץ שרת לפני ההפסקה השנייה. תקלות venv ו-ExecutionPolicy ב-Windows הן החסם העיקרי.
לא בסקופ: אימות משתמשים, Middleware, async/await, Dependencies, תבניות HTML. אם נשאלים, “בהמשך המסלול”.
מהלך השיעור
| חלק בשיעור | משך | הערות ודגשים |
|---|---|---|
| מהו Backend + Client/Server/DB + API | 35 דק' | אנלוגיית המסעדה. Client אמיתי ל-GitHub API. טבלת “OOP ↔ Web API”. |
| HTTP Methods ו-Status Codes | 40 דק' | CRUD ↔ Methods על הלוח (נשארת כל השבוע). httpbin. “שופט קודים”. |
| Path / Query / Body | 25 דק' | הפיצרייה. all_three.py מול httpbin. |
| הפסקה | 15 דק' | |
| FastAPI מאפס | 55 דק' | צעד אחר צעד, כל הכיתה יחד: venv → activate → install → main.py → uvicorn → דפדפן → /docs. עוזר הוראה עובר על תקלות. |
| הפסקה | 15 דק' | |
| Params, Query, Body ב-FastAPI | 45 דק' | students_memory.py. להפיק בכוונה 422 בכל אחד משלושת המקומות, ולקרוא את loc. סדר Routes. |
| תרגול + בדוק את עצמך | 40 דק' | Movies API (Mini Project). מי שתקוע בהקמה, עם המרצה. |
דגשים להעברת השיעור
- לחבר לנושא מחשב, מערכת הפעלה ורשת: השרת עם
socket(bind/listen/accept) מול FastAPI. “כל מה שכתבנו ביד, FastAPI עושה בשבילנו”. - לחבר לנושא OOP:
app = FastAPI()הוא אובייקט.BaseModelהוא Class שיורשים ממנה.@app.getהוא מתודה. ה-API הוא “Public Interface” ברמת הרשת. - venv: להסביר למה לפני איך. לכתוב על הלוח את שלושת השלבים (create, activate, install) ולהדגיש “בכל Terminal חדש — activate”.
- ExecutionPolicy: להכין מראש את הפקודה על המסך. היא תידרש לרוב סטודנטי Windows.
- שני Terminals: אחד לשרת (תפוס), אחד ל-curl/ל-Git. לוודא שכולם יודעים לפצל.
- 422 הוא חבר: להראות כמה מידע הוא נותן (
loc,msg,input), ושהפונקציה לא רצה בכלל. להשוות לשרת המחשבון שקרס. - RAM: בסוף היום, להפעיל מחדש את השרת ולהראות שהסטודנט שנוצר נעלם. זה הגשר לנושא מסדי נתונים ו-MySQL.
מושגים
| מושג | הסבר קצר |
|---|---|
| Frontend / Backend | תצוגה אצל המשתמש / לוגיקה ונתונים בשרת. |
| API / Web API | ממשק לתוכנות אחרות / דרך HTTP ו-JSON. |
| Endpoint | Method + Path. |
| Resource | המשאב שה-API מנהל (students). |
| REST (מוסכמה) | Path = שם עצם, Method = פעולה. |
| CRUD | Create/Read/Update/Delete ↔ POST/GET/PUT/DELETE. |
| Safe / Idempotent | לא משנה נתונים (GET) / חזרה נותנת אותה תוצאה (PUT, DELETE). |
| Status Codes | 200, 201, 204, 400, 404, 409, 422, 500. |
| Path / Query / Body | איזה / סינון ואפשרויות / הנתונים. |
| URL Encoding | קידוד תווים מיוחדים ב-URL. |
| curl | Client של HTTP משורת הפקודה. |
| FastAPI / Uvicorn | Framework ל-API / שרת ה-HTTP. |
| venv / pip / PyPI | סביבה וירטואלית / מנהל חבילות / מאגר הספריות. |
| Decorator / Route | @app.get(...) / קישור Endpoint לפונקציה. |
| Type Hint | x: int. FastAPI משתמש בו להמרה ולולידציה. |
| Pydantic / BaseModel | מודל נתונים עם טיפוסים ל-Body. |
| HTTPException | raise שהופך לתשובת שגיאה. |
| Swagger UI (/docs) | תיעוד ובדיקה אוטומטיים. |
תרגיל חשיבה
שאלת פתיחה (לפני FastAPI): “בנושא מחשב, מערכת הפעלה ורשת כתבנו שרת מחשבון עם socket. הוא קרס על ‘hello’, לא ידע HTTP, ולא החזיר JSON. בואו נרשום על הלוח: מה חסר לו כדי להיות שרת API אמיתי?”
מהלך:
- הכיתה מונה דרישות. צפוי: לפענח HTTP (Method, Path, Headers), להחזיר JSON, קודי סטטוס, לבדוק קלט, לטפל בהרבה בקשות, ותיעוד.
- המרצה כותב רשימה על הלוח: “כמה שורות קוד זה ידרוש?” (מאות).
- מקימים FastAPI (10 שורות). לעבור על הרשימה ולסמן ✓ על כל מה ש-FastAPI נתן: HTTP ✓, JSON ✓, 404 אוטומטי ✓, 422 על קלט שגוי ✓, תיעוד ב-
/docs✓.
מה המרצה מראה בסוף: את קוד ה-socket מנושא מחשב, מערכת הפעלה ורשת ליד students_memory.py, ואת הרשימה המסומנת. משפט סיום: “Framework טוב לוקח את מה שחוזר על עצמו בכל שרת, ומשאיר לכם רק את מה שייחודי לבעיה שלכם. אבל כדי להבין מה הוא עושה, היה שווה לכתוב פעם אחת שרת ביד.” ולסיים עם הטיזר: הפעלה מחדש, הסטודנט שנוצר נעלם. “מחר: Database.”