On this page
מערך שיעור: Middleware Pipeline
משך: 2 שעות אקדמיות (90 דקות).
מטרת השיעור: הסטודנטים יבינו שכל בקשה עוברת שרשרת שכבות מסודרת, ויכתבו Middleware בסיסי משלהם.
בסוף השיעור הסטודנטים צריכים: לרשום Middleware עם app.Use, להסביר את תפקיד next(), ולעצור שרשרת Middleware בתנאי (כמו הרשאה חסרה).
דגש קריטי: קשרו במפורש ל-SRP/OCP מיחידת ה-SOLID — זה לא נושא חדש לגמרי, זה יישום קונקרטי של עקרונות מוכרים.
מהלך השיעור
| חלק בשיעור | משך | הערות ודגשים |
|---|---|---|
| פתיחה וחיבור | 5 דקות | הזכירו: “כל endpoint צריך לוג + הרשאה — לחזור על זה בכל אחד?” |
| הבעיה: כפילות בכל endpoint | 10 דקות | הראו בקוד חי את שני ה-endpoints המכפילים (① לוג, ② הרשאה) — לא רק לתאר, להראות ממש |
| שלב 1: Middleware הכי בסיסי (רק לוג) | 15 דקות | app.Use, await next() — היכן ממש לכתוב את זה ב-Program.cs |
| שלב 2: Middleware עוצר (הרשאה) | 15 דקות | 401 בלי next() — הדגמה חיה |
| שלב 3: שילוב שניהם + סדר קובע ריצה | 15 דקות | לפני/אחרי next(), מה קורה כשמחליפים סדר |
| קישור ל-SRP/OCP | 10 דקות | “בדיוק מה שלמדתם, עכשיו בתשתית אמיתית” |
| תרגול מודרך | 10 דקות | תרגיל 1+2 |
דגשים להעברת השיעור
- הדגמה חיה עם
Console.WriteLineלפני ואחריnext()בכל Middleware עוזרת מאוד להמחיש את “שרשרת” הריצה — לא רק “שכבות” מופשטות, אלא סדר ריצה ממשי וניתן-למעקב. - ודאו שסטודנטים מבינים בבירור: שכחת
next()היא הבאג הכי נפוץ בנושא הזה — כדאי להראות אותו בכוונה (בקשה שנתקעת ולעולם לא מגיעה ל-endpoint). - אל תתקדמו ל-Controllers (השיעור הבא) לפני שהמושג Pipeline מבוסס — Controllers הם רק “עוד תחנה” בפייפליין הזה, לא נושא נפרד.
מושגים
Middleware — רכיב שרץ על כל בקשה, יכול לבדוק/לשנות ולהעביר הלאה.
Pipeline — שרשרת מלאה של Middleware, בסדר הרישום.
next() — מעביר לשכבה הבאה; בלעדיו הבקשה נעצרת.
תרגיל חשיבה
שאלת פתיחה: “אם תרשמו Middleware של בדיקת הרשאה אחרי Middleware שמבצע לוגיקה עסקית כלשהי (למשל שמירה למסד נתונים) — מה יכול להשתבש?”
מהלך: הובילו לתובנה חמורה: פעולה עסקית (כמו כתיבה למסד נתונים) עלולה לקרות לפני שבכלל בדקו שהמשתמש מורשה לבצע אותה — פרצת אבטחה ממשית, לא רק “סדר לא-אופטימלי”. זו בדיוק הסיבה שסדר Middleware הוא החלטת עיצוב קריטית, לא פרט טכני שולי.
מה המרצה מראה בסוף: הריצו שני תרחישים בשידור חי — פעם עם הרשאה לפני הלוגיקה העסקית (הבקשה הלא-מורשית נעצרת ב-401, הלוגיקה לא רצה בכלל), ופעם עם הרשאה אחרי (הלוגיקה כבר רצה, ורק אז מתגלה שאין הרשאה — מאוחר מדי). ההבדל הוויזואלי בין השניים מבסס את החשיבות של סדר נכון.