Networking

REST API לאנשי רשת: המדריך המלא בעברית — HTTP Verbs, קודי סטטוס, JSON ואימות, עם מבחנון CCNA

14 דק׳ קריאהמכללת נטמי
REST API לאנשי רשת: המדריך המלא בעברית — HTTP Verbs, קודי סטטוס, JSON ואימות, עם מבחנון CCNA

בעולם שבו Controller מנהל מאות מתגים, אף אחד לא נכנס יותר לכל התקן ב-SSH. הממשק שדרכו תוכנה מדברת עם תוכנה נקרא API, ובעולם הרשתות הסגנון הנפוץ ביותר הוא REST. אם אתם ניגשים למבחן 200-301 או פשוט רוצים להיכנס לעולם האוטומציה — זהו הנושא שאי אפשר לדלג עליו.

מהו API ומה הופך אותו ל-RESTful

API הוא חוזה: הוא מגדיר אילו בקשות אפשר לשלוח לשירות, באיזה פורמט, ומה יוחזר בתגובה. REST, ראשי תיבות של Representational State Transfer, אינו פרוטוקול אלא סגנון ארכיטקטוני שהוגדר בשנת 2000. ממשק נחשב RESTful כשהוא עומד במספר עקרונות מרכזיים.

  • Client-Server — הפרדה מלאה בין הלקוח שמבקש לבין השרת שמספק.
  • Stateless — השרת אינו שומר הקשר בין בקשות. כל בקשה חייבת להכיל את כל המידע הדרוש, כולל פרטי האימות.
  • Cacheable — התגובה מציינת אם ניתן לשמור אותה במטמון.
  • Uniform Interface — משאבים מזוהים באמצעות URI ומטופלים בפעולות סטנדרטיות.
  • Layered System — ייתכנו שרתי ביניים, Proxy או Load Balancer, והלקוח אינו צריך לדעת עליהם.

פעולות CRUD ושיטות HTTP

REST משתמש בשיטות ה-HTTP הקיימות כדי לבטא פעולות על משאבים. ההתאמה למודל CRUD היא הדבר הראשון שנבדק במבחן.

  • GET — קריאה (Read). אינו משנה דבר, ולכן נחשב בטוח ואידמפוטנטי.
  • POST — יצירה (Create) של משאב חדש. אינו אידמפוטנטי — שליחה כפולה תיצור שני משאבים.
  • PUT — עדכון או החלפה מלאה (Update). אידמפוטנטי — שליחה חוזרת מביאה לאותה תוצאה.
  • PATCH — עדכון חלקי של שדות מסוימים בלבד.
  • DELETE — מחיקה (Delete) של המשאב.
תרשים זרימת בקשת REST API מלקוח אל נתב וחזרה עם תגובת JSON
מחזור חיים של קריאת REST API: בקשת HTTP עם Verb ו-URI, ותגובה בפורמט JSON. איור: מכללת נטמי.

מבנה ה-URI — לקרוא כתובת כמו מהנדס

כתובת של קריאת API מורכבת מרכיבים קבועים, וכדאי לדעת לזהות כל אחד מהם: הסכימה (https), שם המארח (dnac.netme.local), נתיב הבסיס עם גרסה (‎/dna/intent/api/v1‎), המשאב (‎/network-device‎), מזהה ספציפי (‎/12345‎) ופרמטרים אחרי סימן השאלה (‎?limit=50&offset=0‎). שימוש בגרסה בנתיב הוא תרגול חובה — הוא מאפשר לשנות את ה-API בעתיד בלי לשבור לקוחות קיימים.

קודי תגובה שחייבים לזכור

  • 200 OK — הבקשה הצליחה והתשובה מצורפת.
  • 201 Created — משאב חדש נוצר בהצלחה, בדרך כלל בתגובה ל-POST.
  • 204 No Content — הפעולה הצליחה ואין גוף תגובה, נפוץ ב-DELETE.
  • 400 Bad Request — הבקשה שגויה תחבירית או שחסר בה שדה חובה.
  • 401 Unauthorized — לא בוצע אימות או שהטוקן פג תוקף.
  • 403 Forbidden — האימות תקין אך אין הרשאה לפעולה.
  • 404 Not Found — המשאב אינו קיים בכתובת שנשלחה.
  • 429 Too Many Requests — חריגה ממגבלת קצב הקריאות (Rate Limit).
  • 500 Internal Server Error — תקלה בצד השרת, לא בבקשה שלכם.
כלל זהב לפתרון תקלות: 4xx אומר שהבעיה אצלכם, 5xx אומר שהבעיה אצל השרת. ההבחנה הזו חוסכת שעות של חיפוש במקום הלא נכון.

JSON — שפת הנתונים של האוטומציה

רוב ממשקי ה-REST בעולם הרשתות מחזירים JSON. המבנה שלו פשוט: סוגריים מסולסלים מגדירים אובייקט של זוגות מפתח-ערך, סוגריים מרובעים מגדירים מערך, ומפתחות תמיד עטופים במרכאות כפולות. ב-Python אובייקט הופך ל-dictionary ומערך הופך ל-list, וההמרה מתבצעת בעזרת json.loads לקריאה ו-json.dumps לכתיבה.

NetMe College — REST API Call to a Network Controller
import requests, json

BASE = "https://dnac.netme.local/dna"

# 1. Authenticate and receive a token
auth = requests.post(f"{BASE}/system/api/v1/auth/token",
                     auth=("netme_api", "S3cure!Pass"), verify=True)
token = auth.json()["Token"]

# 2. Use the token on every subsequent request (REST is stateless)
headers = {"X-Auth-Token": token, "Content-Type": "application/json"}

r = requests.get(f"{BASE}/intent/api/v1/network-device",
                 headers=headers, params={"limit": 3})

print(r.status_code)          # 200
for dev in r.json()["response"]:
    print(dev["hostname"], dev["managementIpAddress"], dev["softwareVersion"])
קריאת REST API אמיתית: קבלת טוקן, שליחתו בכותרת בכל בקשה, ופענוח תגובת JSON בפייתון.
NetMe College — JSON Response Sample
{
  "response": [
    {
      "hostname": "NETME-CORE-SW1",
      "managementIpAddress": "10.10.0.11",
      "platformId": "C9300-48U",
      "softwareVersion": "17.12.3",
      "reachabilityStatus": "Reachable",
      "interfaces": ["Gi1/0/1", "Gi1/0/2", "Te1/1/1"]
    }
  ],
  "version": "1.0"
}
מבנה JSON טיפוסי: אובייקט עליון, מערך תחת המפתח response, ובתוכו אובייקטים עם זוגות מפתח-ערך.

אימות ואבטחה

  • Basic Authentication — שם משתמש וסיסמה מקודדים ב-Base64. קידוד אינו הצפנה, ולכן חובה HTTPS.
  • API Key — מפתח קבוע בכותרת. פשוט ליישום, אך קשה לביטול סלקטיבי ולסבב מפתחות.
  • Bearer Token או OAuth 2.0 — טוקן זמני עם תוקף מוגבל. השיטה המומלצת בסביבות ייצור.
  • לעולם אל תשמרו סיסמאות או טוקנים בתוך הקוד — השתמשו במשתני סביבה או בכספת סודות.
  • אכפו TLS ובדקו את תעודת השרת. ביטול אימות התעודה בסקריפט הוא פתח למתקפת Man-in-the-Middle.

REST מול פרוטוקולי ניהול אחרים

לצד REST קיימים בעולם הרשתות גם NETCONF ו-RESTCONF. NETCONF עובד מעל SSH בפורט 830, משתמש ב-XML ומבוסס על מודלי YANG, ומספק יכולות חזקות כמו Candidate Configuration ו-Commit אטומי. RESTCONF הוא גשר בין העולמות: ממשק בסגנון REST מעל HTTPS שמשתמש גם הוא במודלי YANG ותומך ב-JSON וב-XML. SNMP, לעומתם, נשאר בעיקר לניטור ולא לתצורה.

מבחנון קצר

מבחנון REST API — 8 שאלות בסגנון CCNA 200-301

1. איזו שיטת HTTP משמשת ליצירת משאב חדש?

2. מה משמעות המאפיין Stateless ב-REST?

3. קוד תגובה 401 מציין:

4. איזה קוד תגובה תקבלו בדרך כלל לאחר POST מוצלח שיצר משאב?

5. בפורמט JSON, מה מייצגים סוגריים מרובעים?

6. איזו שיטה מתאימה לעדכון חלקי של שדה בודד במשאב קיים?

7. באיזה פורט ובאיזה פרוטוקול תעבורה פועל NETCONF כברירת מחדל?

8. קיבלתם קוד 429 בתגובה לסקריפט שרץ בלולאה. מה הסיבה הסבירה?

ענית על 0 מתוך 8

לסיכום

REST API הוא שער הכניסה לעולם האוטומציה. ברגע שאתם יודעים לקרוא URI, לבחור Verb נכון, להבין קוד תגובה ולפרק JSON — אתם כבר לא רק מתפעלים רשת, אתם מתכנתים אותה. זו בדיוק ההבחנה שמעלה שכר בשוק היום.

בקורס CCNA של מכללת נטמי מתרגלים את הנושא במעבדות אמיתיות: שליפת מידע מ-Controller, כתיבת סקריפט Python ראשון, טיפול בשגיאות והבנת ההבדל בין REST, RESTCONF ו-NETCONF — הכול בעברית, צעד אחר צעד, עד למבחן 200-301.

רוצים להתמקצע?

הפוסט הזה הוא רק טעימה. הקורס המלא של Cisco CCNA — רשתות תקשורת ילמד אתכם הכל מא׳ עד ת׳.