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

<div dir="rtl" lang="he">

# תרגילים - שיעור 5.1: מהו API - HTTP, REST, Headers, Authentication, OAuth

## מידע כללי
- **שיעור:** 5.1 - מהו API
- **סוג השיעור:** מעשי (4 שעות)
- **הערה:** השיעור מעשי - רוב התרגילים דורשים ביצוע בפועל וגישה לאינטרנט. יש להצטייד מראש במפתח API (חינמי) לשירות OpenAI/Anthropic.

---

## תרגיל 1: חקירת API ציבורי עם הדפדפן (תיאורטי ומעשי - 20 דקות)
### הנחיות:
נשתמש ב-API הממשלתי הפתוח של ישראל (`data.gov.il`) כדי להבין איך נראית בקשת API ותשובה בסיסית, ישירות מהדפדפן.

### משימות:
1.  פתחו דפדפן Chrome, היכנסו לכתובת הבאה ולחצו Enter:
    `https://data.gov.il/api/3/action/datastore_search?resource_id=c8b9f9c8-4612-4068-934f-d4acd2e3c06e&limit=5`
2.  התבוננו בתשובה שקיבלתם. זהו מבנה נתונים מסוג JSON. נסו להבין מהו המידע שחזר.
3.  פתחו את כלי המפתחים של הדפדפן (F12 או Ctrl+Shift+I) ועברו ללשונית **Network**.
4.  רעננו את הדף (F5). תחת הלשונית Network, מצאו את הבקשה `datastore_search...` ולחצו עליה.
5.  **ענו על השאלות הבאות:**
    *   תחת לשונית **Headers**, מהו ה-**Request Method**?
    *   מהו **Status Code** שקיבלתם? מה משמעותו?
    *   תחת לשונית **Response**, מהו ה-`Content-Type` של התשובה? מה זה אומר על סוג המידע שקיבלנו?

---

## תרגיל 2: שליחת בקשת API עם Postman (מעשי - 25 דקות)
### הנחיות:
Postman הוא כלי חיוני לעבודה עם APIs. נשתמש בו כדי לשלוח את אותה בקשה מתרגיל 1, ולאחר מכן בקשה מורכבת יותר עם פרמטרים.

### משימות:
1.  פתחו את Postman וצרו בקשה חדשה.
2.  הגדירו את סוג הבקשה (Method) ל-**GET**.
3.  הדביקו את כתובת ה-URL מתרגיל 1 בשורת הכתובת ולחצו **Send**.
4.  ודאו שקיבלתם את אותה תשובת JSON בחלק התחתון של המסך (Body) וסטטוס `200 OK`.
5.  כעת נבצע חיפוש. עברו ללשונית **Params** (מתחת לשורת הכתובת).
6.  הוסיפו **Key** חדש בשם `q` ואת ה-**Value** `משרד החינוך`.
7.  לחצו **Send** שוב.
8.  **שאלה:** התבוננו בתשובה שקיבלתם. כיצד היא השתנתה בעקבות הוספת פרמטר החיפוש `q`?

---

## תרגיל 3: אימות באמצעות API Key (מעשי - 30 דקות)
### הנחיות:
רוב ה-APIs דורשים אימות כלשהו. נתנסה באימות פשוט מסוג API Key, שבו אנו מזהים את עצמנו באמצעות מפתח ייחודי. נשתמש ב-API למזג אוויר כדי לבדוק את טמפרטורה בתל אביב.

### משימות:
1.  (כהכנה מוקדמת) הירשמו לאתר [OpenWeatherMap](https://openweathermap.org/api) וקבלו API Key אישי וחינמי.
2.  ב-Postman, צרו בקשת **GET** חדשה לכתובת:
    `https://api.openweathermap.org/data/2.5/weather`
3.  הוסיפו שני פרמטרים (בטאב `Params`):
    *   `q`: `Tel Aviv,IL`
    *   `appid`: `YOUR_API_KEY` (החליפו במפתח האישי שלכם)
4.  שלחו את הבקשה ובחנו את התשובה.
5.  כעת, נסו לשלוח את אותה בקשה **ללא** הפרמטר `appid`.
6.  **שאלה:** מהו ה-Status Code שקיבלתם בבקשה השנייה, ומה משמעות הודעת השגיאה שקיבלתם בגוף התשובה (Body)?

---

## תרגיל 4: קריאה ראשונה ל-API של מודל שפה (AI) (מעשי - 35 דקות)
### הנחיות:
כעת ניגש לליבת הקורס: שימוש ב-AI דרך API. נשלח בקשת POST עם גוף JSON ל-API של OpenAI כדי לקבל תשובה ממודל שפה.

### משימות:
1.  ב-Postman, צרו בקשה חדשה מסוג **POST** לכתובת: `https://api.openai.com/v1/chat/completions`
2.  עברו ללשונית **Authorization**:
    *   בחרו **Type** מסוג `Bearer Token`.
    *   בתיבת ה-**Token**, הדביקו את מפתח ה-API שלכם מ-OpenAI.
3.  עברו ללשונית **Headers**:
    *   ודאו שקיים Header בשם `Content-Type` עם ערך `application/json`.
4.  עברו ללשונית **Body**:
    *   בחרו באפשרות `raw` ובסוג `JSON`.
    *   הדביקו בתיבת הטקסט את ה-JSON הבא:
    ```json
    {
      "model": "gpt-3.5-turbo",
      "messages": [
        {
          "role": "system",
          "content": "אתה עוזר וירטואלי שמנוסח באופן מקצועי ועסקי."
        },
        {
          "role": "user",
          "content": "כתוב לי 3 כותרות קצרות למייל שיווקי עבור חברת הייטק ישראלית המשיקה מוצר חדש בתחום אבטחת הסייבר בענן."
        }
      ]
    }
    ```
5.  שלחו את הבקשה ובחנו את התשובה שקיבלתם מהמודל.

---

## תרגיל 5: אוטומציה עם Python וספריית requests (מעשי - 40 דקות)
### הנחיות:
אחרי שהבנו איך לשלוח בקשות עם Postman, נעבור לעשות זאת באמצעות קוד. נשכפל את הפעולה מהתרגיל הקודם באמצעות סקריפט Python.

### משימות:
1.  פתחו סביבת פיתוח של Python (כמו VS Code, PyCharm, או Google Colab).
2.  התקינו את ספריית `requests` אם אינה מותקנת (`pip install requests`).
3.  כתבו את הקוד הבא והשלימו את מפתח ה-API שלכם:

    ```python
    import requests
    import json

    # הגדרת נקודת הקצה והמפתח
    api_url = "https://api.openai.com/v1/chat/completions"
    api_key = "YOUR_OPENAI_API_KEY" # <--- החליפו במפתח שלכם

    # הגדרת ה-Headers לבקשה
    headers = {
        "Authorization": f"Bearer {api_key}",
        "Content-Type": "application/json"
    }

    # הגדרת גוף הבקשה (payload)
    payload = {
      "model": "gpt-3.5-turbo",
      "messages": [
        {
          "role": "system",
          "content": "אתה עוזר וירטואלי שמנוסח באופן מקצועי ועסקי."
        },
        {
          "role": "user",
          "content": "כתוב לי 3 כותרות קצרות למייל שיווקי עבור חברת הייטק ישראלית המשיקה מוצר חדש בתחום אבטחת הסייבר בענן."
        }
      ]
    }

    # שליחת בקשת POST
    response = requests.post(api_url, headers=headers, data=json.dumps(payload))

    # בדיקת תקינות התשובה והדפסתה
    if response.status_code == 200:
        response_data = response.json()
        # הדפסת התוכן של התשובה הראשונה מהמודל
        print(response_data['choices'][0]['message']['content'])
    else:
        print(f"Error: {response.status_code}")
        print(response.text)

    ```
4.  הריצו את הסקריפט.
5.  **שאלה:** שנו את ה-`content` של ה-`user` לשאלה עסקית אחרת (למשל, "מהם 3 היתרונות המרכזיים של שימוש ב-API בעולם העסקי?") והריצו שוב.

---

## תרגיל 6: הבנת תהליך OAuth 2.0 (תיאורטי ומעשי - 40 דקות)
### הנחיות:
OAuth 2.0 הוא סטנדרט אימות מורכב יותר, המאפשר לאפליקציה לבקש גישה לנתוני משתמש בשירות אחר (למשל, אפליקציה שמבקשת גישה לאנשי הקשר בגוגל). ננתח את השלבים הראשונים בתהליך באמצעות דוגמה של ה-API של Wix.

### משימות:
1.  **שלב תיאורטי:** קראו את תקציר השלבים של תהליך `Authorization Code Flow`:
    *   **שלב 1:** האפליקציה (למשל, אפליקציית צד ג') מפנה את המשתמש לדף אימות של השירות (למשל, Wix) עם פרמטרים כמו `client_id`, `redirect_uri` ו-`scope` (הרשאות מבוקשות).
    *   **שלב 2:** המשתמש מתחבר לחשבון ה-Wix שלו ומאשר את הגישה לאפליקציה.
    *   **שלב 3:** Wix מפנה את המשתמש בחזרה ל-`redirect_uri` של האפליקציה, יחד עם `code` (קוד אישור) חד-פעמי כפרמטר ב-URL.
    *   **שלב 4 (צד שרת):** השרת של האפליקציה מקבל את ה-`code` ושולח אותו לשרת של Wix (יחד עם `client_secret`) כדי לקבל `access_token`.
    *   **שלב 5:** עם ה-`access_token` שהתקבל, האפליקציה יכולה כעת לבצע קריאות API בשם המשתמש.

2.  **שלב מעשי (חקירה):**
    *   היכנסו לקישור הבא בדפדפן (זהו קישור הדגמה, אין צורך להתחבר):
        `https://www.wix.com/installer/install?appId=1380b703-ce81-ff0b-3956-45ba67112d69&redirectUrl=https%3A%2F%2Fwww.wix.com%2Fmy-account&metaSiteId=...`
    *   התבוננו בכתובת ה-URL. **זהו את הפרמטרים הבאים ונסו להסביר מה תפקידו של כל אחד על סמך השלב התיאורטי:**
        *   `appId` (מקביל ל-`client_id`)
        *   `redirectUrl` (מקביל ל-`redirect_uri`)
    *   פתחו את כלי המפתחים (F12) -> לשונית **Network**.
    *   לחצו על כפתור האישור בדף.
    *   ב-Network, חפשו את הבקשה שמתבצעת מיד לאחר הלחיצה. התבוננו בכתובת ה-URL שאליה הופניתם. האם אתם יכולים לזהות פרמטר שנראה כמו `code` או `token` בכתובת החדשה? (התהליך המלא מורכב, אך המטרה היא לזהות את תבנית ההפניה מחדש).

---

## תרגיל 7: משימת בית
### הנחיות:
במשימת הבית תבנו כלי עזר עסקי קטן הממנף את כל מה שלמדנו. הכלי יקבל תיאור של מוצר חדש ויפיק עבורו תיאור שיווקי קצר באמצעות קריאה ל-API של מודל שפה.

### משימות:
1.  צרו קובץ Python חדש.
2.  כתבו פונקציה בשם `generate_marketing_description` המקבלת פרמטר `product_info` (מחרוזת).
3.  בתוך הפונקציה:
    *   בנו `prompt` (הנחיה) מפורט למודל ה-AI. על ההנחיה לבקש מהמודל לכתוב תיאור שיווקי של 100 מילים למוצר, המדגיש את היתרונות המרכזיים ללקוח, וכולל קריאה לפעולה.
    *   בצעו קריאת API מסוג POST ל-OpenAI (בדומה לתרגיל 5) עם ה-`prompt` שבניתם.
    *   הפונקציה צריכה להחזיר את הטקסט השיווקי שהמודל יצר.
4.  בחלק הראשי של הסקריפט:
    *   צרו משתנה לדוגמה עם תיאור מוצר, למשל:
      `my_product = "אפליקציית מובייל ישראלית חדשה לניהול תקציב אישי. האפליקציה מתממשקת אוטומטית לחשבונות בנק וכרטיסי אשראי, מזהה הוצאות חריגות באמצעות AI, ומציעה טיפים לחיסכון."`
    *   קראו לפונקציה שיצרתם עם המוצר לדוגמה.
    *   הדפיסו למסך את התיאור השיווקי שהתקבל.

**הגישו את קובץ ה-Python (.py) עד השיעור הבא.**

---

## קריטריונים להערכה (למשימת הבית)
| קריטריון | ציון |
|---|---|
| הקוד פועל ללא שגיאות ושולח בקשת API תקינה | 40% |
| מבנה הקוד (שימוש נכון בפונקציה, משתנים ברורים) | 20% |
| איכות ה-prompt (האם ההנחיה ברורה, מפורטת ומובילה לתוצאה טובה) | 30% |
| תיעוד והערות בקוד | 10% |
| **סה"כ** | **100%** |

</div>