וובהוקים, הסבר מסודר
מה הם, מה נשבר בהם, והמונחים שמופיעים בתיעוד של כל ספק. כתבו אותו אנשים שמפעילים צינור מסירה בעצמם, ולא כדי לדרג בגוגל.
בקצרה
- וובהוק הוא בקשת POST של HTTP מהמערכת שיודעת משהו אל המערכת שרוצה לדעת.
- הבקשה עצמה פשוטה. הקושי הוא ניסיונות חוזרים, חתימות, סדר, מניעת כפילויות ונראות.
- חתימה מוכיחה מקור ושלמות; מזהה המסירה הוא מה שמונע טיפול כפול באותו אירוע.
- מה שלא נמסר צריך להישמר, כך שאפשר יהיה לשלוח אותו שוב. אסור לזרוק אותו.
איך זה עובד בפועל
נניח שיש לכם חנות, ולקוח משלם. מערכת התשלומים יודעת על התשלום ברגע שהוא עובר, אבל המערכת שלכם,
זו ששולחת חשבונית ומעדכנת מלאי, לא יודעת. בלי וובהוק, המערכת שלכם צריכה לשאול את מערכת התשלומים כל
דקה אם יש תשלום חדש. זה בזבוז, וזה גם איטי. עם וובהוק, ברגע שהתשלום עובר, מערכת התשלומים שולחת בעצמה
בקשת POST לכתובת שהגדרתם. גוף הבקשה הוא JSON שמתאר את האירוע, למשל payment.succeeded.
מכאן מתחילים הדברים שקל לפספס. היעד שלכם יכול להיות באמצע פריסה בדיוק באותה שנייה, ואז הבקשה נכשלת. השולח צריך לנסות שוב, אבל לא מיד ולא לנצח. אם הוא ניסה שוב והבקשה הראשונה בכל זאת הגיעה, אתם עלולים לשלוח שתי חשבוניות. לכן כל מסירה נושאת מזהה שנשאר זהה בכל ניסיון חוזר, והצד המקבל שומר אילו מזהים כבר טופלו. ואם היעד לא עונה במשך יום שלם, האירוע לא נעלם: הוא עובר לתור הכשלים, ומשם אפשר לשלוח אותו שוב כשהיעד חוזר לעבוד.
ויש עוד שאלה אחת שכל צוות תמיכה מכיר: לקוח כותב "לא קיבלנו את האירוע". בלי תיעוד של כל ניסיון, עם הסטטוס והזמן שלו, אי אפשר לענות. כאן נשברות רוב המערכות שנבנו בבית: החלק הזה לא נראה חשוב, עד היום שבו הוא הדבר היחיד שחשוב.
המונחים
| מונח | מה זה אומר |
|---|---|
| אירוע (event) | הדבר שקרה, עם סוג ותוכן. מתפרסם פעם אחת ונמסר פעמים רבות |
| יעד (endpoint) | כתובת URL ששייכת לצרכן, בדרך כלל אחד הלקוחות שלכם |
| פיזור (fan-out) | הפיכת אירוע אחד למסירה אחת לכל יעד שנרשם אליו |
| ניסיון (attempt) | בקשת HTTP בודדת ליעד, עם סטטוס וזמן תגובה |
| לוח ניסיונות חוזרים | המרווחים בין ניסיונות אחרי כשל, בדרך כלל הולכים וגדלים |
| תור הכשלים (DLQ) | מסירה שהניסיונות שלה נגמרו, והיא נשמרת לבדיקה ולשליחה חוזרת |
| המפסק (circuit breaker) | השבתה אוטומטית של יעד שממשיך להיכשל, כדי לא להציף אותו |
| חתימה | HMAC על הגוף המקורי של הבקשה, שמוכיח מקור ושלמות |
| מפתח ייחודיות (idempotency key) | מזהה יציב שמאפשר לצד המקבל להתעלם ממשהו שכבר טיפל בו |
| שליחה חוזרת (replay) | שליחה מכוונת של אירוע שמור פעם נוספת |
לקריאה נוספת
המדריכים המפורטים, עם קוד שאפשר להריץ: אימות חתימות, ניסיונות חוזרים ומניעת כפילויות, תור הכשלים וכל המדריכים. אם אתם רוצים לראות וובהוק אמיתי מגיע, בודק הוובהוקים החינמי נותן כתובת זמנית ומציג כל בקשה שנשלחת אליה, עם הכותרות והגוף המלאים.
שאלות
מה זה וובהוק?
וובהוק (webhook) הוא בקשת HTTP שמערכת אחת שולחת למערכת אחרת כדי לדווח שמשהו קרה. במקום שהצד המקבל ישאל כל כמה דקות "יש משהו חדש?", הצד השולח מפרסם את האירוע ברגע שהוא קורה. זו דחיפה, והצד המקבל הוא כתובת HTTP רגילה, שנקראת יעד (endpoint).
מה ההבדל בין וובהוק לקריאת API?
הכיוון, ומי יוזם. קריאת API יוצאת מהצד שרוצה משהו; וובהוק יוצא מהצד שיודע משהו. מבחינה טכנית שתיהן בקשות HTTP, ולכן הקושי בוובהוקים הוא לא הבקשה עצמה אלא כל מה שמסביבה: ניסיונות חוזרים, סדר, חתימות, והיכולת לדעת מה בדיוק קרה.
למה וובהוק צריך חתימה?
כי היעד שמקבל אותו פתוח לכל העולם, וכל אחד יכול לשלוח אליו JSON. החתימה מאפשרת לצד המקבל להוכיח שהתוכן הגיע מהשולח שמחזיק בסוד המשותף ושלא שונה בדרך. בלי חתימה, וובהוק הוא טופס שכל אחד יכול למלא.
כמה פעמים כדאי לנסות שוב מסירה שנכשלה?
מספיק כדי לעבור פריסה או תקלה קצרה, ולא כל כך הרבה שיעד מת יופגז במשך שבוע. לוח זמנים שמתחיל בשניות ומתרחב לשעות, לאורך בערך יממה, מכסה את רוב הכשלים האמיתיים. חשוב יותר מהמספר: כשל שאין טעם לנסות שוב נעצר מיד, ומה שלא נמסר בסוף נשמר.
מה זה תור הכשלים (DLQ)?
המקום שאליו מגיעה מסירה אחרי שכל הניסיונות החוזרים שלה נגמרו. החלופה היא לזרוק אותה, ואז בעיית מסירה הופכת לנתונים חסרים שאף אחד לא יכול לשחזר. את מה שיושב בתור הכשלים צריך להיות אפשר לראות, ולשלוח שוב ברגע שהיעד תוקן.
לבנות מערכת וובהוקים לבד או להשתמש בשירות?
הגרסה הראשונה היא טבלה ומשימת רקע, והיא עובדת. מה שמצטבר אחריה הוא הסיבה שיש שירותים: מגבלת קצב לכל יעד, השבתה אוטומטית של יעד שנכשל שוב ושוב, החלפת סודות חתימה, שליחה חוזרת, תור שאי אפשר לסמוך עליו לבד, ומסך תמיכה ללקוחות ששואלים "שלחתם או לא?". אם המסירה היא המוצר שלכם, בנו אותה בעצמכם. אחרת זו תשתית שלא מפסיקה לבקש תשומת לב.
להתחיל למסור וובהוקים היום
מפנים את הוובהוקים ל-HookGet ורואים את המסירה הראשונה מגיעה, חתומה, תוך פחות מדקה.
פתיחת חשבון חינם לנסות את בודק הוובהוקים החינמי
10,000 מסירות בחודש בחינם, בלי כרטיס אשראי. המסלול החינמי חוסם ולא מחייב, כך שניסיון לא יכול להסתיים בחשבונית.