# מערך שיעור: מבוא ל-Backend ו-HTTP<no value>

**משך:** יום לימוד מלא — 6 שעות אקדמיות (270 דקות).

**מטרת השיעור:** הסטודנטים יבינו את תפקיד ה-Backend ואת שפת ה-HTTP, ויקימו מאפס שרת FastAPI שמקבל Path, Query ו-Body ומחזיר קודים נכונים.

**בסוף השיעור הסטודנטים צריכים:**

1. לתכנן API: למפות פעולות CRUD ל-Methods, Paths וקודי סטטוס.
2. להקים פרויקט FastAPI מאפס: venv, התקנה, `app = FastAPI()`, Route, `uvicorn main:app --reload` ו-`/docs`.
3. לכתוב 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 אמיתי?"

**מהלך:**

1. הכיתה מונה דרישות. צפוי: לפענח HTTP (Method, Path, Headers), להחזיר JSON, קודי סטטוס, לבדוק קלט, לטפל בהרבה בקשות, ותיעוד.
2. המרצה כותב רשימה על הלוח: "כמה שורות קוד זה ידרוש?" (מאות).
3. מקימים FastAPI (10 שורות). לעבור על הרשימה ולסמן ✓ על כל מה ש-FastAPI נתן: HTTP ✓, JSON ✓, 404 אוטומטי ✓, 422 על קלט שגוי ✓, תיעוד ב-`/docs` ✓.

**מה המרצה מראה בסוף:** את קוד ה-socket מנושא מחשב, מערכת הפעלה ורשת ליד `students_memory.py`, ואת הרשימה המסומנת. משפט סיום: "**Framework טוב לוקח את מה שחוזר על עצמו בכל שרת, ומשאיר לכם רק את מה שייחודי לבעיה שלכם.** אבל כדי להבין מה הוא עושה, היה שווה לכתוב פעם אחת שרת ביד." ולסיים עם הטיזר: הפעלה מחדש, הסטודנט שנוצר נעלם. "מחר: Database."
