מדריך למפתחים ל-API של monday.com - שלוש הכותרות ההכרחיות, תקציב המורכבות שעוצר אינטגרציות הרבה לפני מגבלת הקריאות היומית, column_values כמחרוזות JSON, ואיך לתכנן סנכרון שלא ימות בקנה מידה.
עיקרי הדברים
- מגבלת הקריאות היומית כמעט אף פעם לא זו שעוצרת אותך. תקציב המורכבות - נקודות לדקה, בחלון נע של 60 שניות - הוא האילוץ האמיתי, ושאילתה אחת מקוננת רע יכולה למצות אותו בבקשה בודדת.
- הוסף את שדה ה-complexity לשאילתות. הוא מדווח על עלות השאילתה, על התקציב שנותר לפני ואחרי, ומתי החלון מתאפס - והופך תכנון קיבולת מניחוש למדידה.
- כותרת ה-API-Version היא חובה והיא מקבעת התנהגות לגרסה מתוארכת. השמטה שלה או נטישה שלה היא הדרך שבה אינטגרציה שעבדה חודשים משנה התנהגות בלי שום deploy.
- ערכי עמודות חוזרים כ-JSON מקודד בתוך מחרוזת, וכתיבה שלהם דורשת את אותו קידוד כפול. הפרט הזה לבדו אחראי לרוב הכשלים ביום הראשון מול ה-API של monday.
ל-monday.com יש API אחד בלבד, והוא GraphQL. אין REST, אין נקודות קצה לכל משאב - הכול הוא בקשת POST אחת לאותה כתובת, וההבדל בין בקשות הוא בשאילתה עצמה. זה משחרר מאוד, אבל זה גם מעביר את כל האחריות על היעילות אליך, וכאן רוב האינטגרציות נכשלות.
הבסיס
נקודת הקצה היחידה היא https://api.monday.com/v2, וכל בקשה היא POST עם שלוש כותרות חובה:
Authorization- טוקן ה-API שלךContent-Type: application/jsonAPI-Version- גרסה מתוארכת, למשל2023-07
כותרת הגרסה אינה אופציונלית וזו לא פורמליות. היא מקבעת את התנהגות ה-API לגרסה מסוימת. אינטגרציה שלא מציינת גרסה מפורשת, או שמציינת גרסה שהוצאה משימוש, יכולה לשנות התנהגות בלי שאף אחד נגע בקוד. כשמעדכנים גרסה - עושים את זה במודע, בסביבת בדיקות, ולא כברירת מחדל.
מה שבאמת מגביל: תקציב המורכבות
זו הנקודה החשובה ביותר במאמר. יש שתי מגבלות שונות לחלוטין, ורוב האנשים שמים לב רק לזו הלא נכונה.
מגבלת קריאות יומית
| מסלול | קריאות ביום |
|---|---|
| Free / Basic / Standard | 1,000 |
| Pro | 10,000 |
| Enterprise | 25,000 |
תקציב מורכבות - האילוץ האמיתי
לכל שאילתה מחושב ניקוד מורכבות, והתקציב הוא נקודות לדקה: כמיליון נקודות בחשבונות חינמיים וניסיון, ובין 5 ל-10 מיליון בהתאם לסוג הטוקן. החלון נע ומתאפס 60 שניות אחרי הקריאה הראשונה. חריגה מחזירה ComplexityException.
ההבדל המעשי: אתה יכול להיחסם אחרי קריאה אחת. שאילתה שמבקשת את כל הלוחות, ובכל לוח את כל הפריטים, ובכל פריט את כל ערכי העמודות ואת כל העדכונים - היא מכפלה, והמכפלה הזו יכולה לבלוע מיליוני נקודות בבת אחת. מגבלת ה-1,000 קריאות ביום נשארת רחוקה, והאינטגרציה בכל זאת מתה.
איך מודדים במקום לנחש
אפשר להוסיף לשאילתה את שדה complexity, והתשובה תכלול את עלות השאילתה, את התקציב שנותר לפני ואחרי, ואת מועד האיפוס. זה הכלי המרכזי לתכנון קיבולת. להריץ את השאילתה על לוח קטן, לקרוא את המספר, ולהכפיל בגודל הצפוי - זה ההבדל בין אינטגרציה שמחזיקה ובין כזו שנופלת ביום שהלקוח מוסיף עוד 5,000 פריטים.
יש גם מגבלת מקביליות, שמפורסמת בכותרת RateLimit-Policy בתשובה. יש לקרוא אותה מהתשובה במקום להניח מספר.
המלכודת שתופסת ביום הראשון: column_values
ב-monday, ערכי העמודות של פריט אינם שדות רגילים. הם חוזרים כ-JSON שמקודד בתוך מחרוזת, ולכל סוג עמודה יש מבנה משלו - עמודת סטטוס, עמודת תאריך ועמודת אנשים נראות שונה לגמרי.
בכתיבה זה נעשה מבלבל עוד יותר: המוטציה מקבלת את הערכים כמחרוזת JSON, שבתוכה יש את המבנה של אותו סוג עמודה. כלומר יש כאן קידוד כפול - אתה בונה אובייקט, ממיר אותו למחרוזת, ומשבץ את המחרוזת הזו כערך בשאילתת GraphQL.
שתי הנחיות מעשיות:
- אל תבנה את המחרוזת בשרשור. להשתמש בפונקציית ה-JSON של השפה. שרשור ידני שובר על מרכאות, על עברית ועל ערכים ריקים.
- אל תנחש את מבנה העמודה. לקרוא פריט קיים שכבר מוגדר נכון, לראות בדיוק מה חוזר, ולכתוב באותו מבנה. זה חוסך שעות מול התיעוד.
עוד ארבע נקודות ששוות זמן
- GraphQL מחזיר 200 גם על שגיאה. זו התנהגות סטנדרטית של GraphQL, לא של monday: הסטטוס הוא 200 והשגיאה נמצאת במערך
errorsבגוף התשובה. קוד שבודק רק את קוד הסטטוס יחשוב שהכול הצליח. יש לבדוק את הגוף תמיד. - עימוד. אין להסתמך על שליפה של הכול בבת אחת. עבודה בעמודים היא גם החובה התפעולית וגם הדרך הישירה להוריד מורכבות.
- לבקש רק שדות שצריך. זו כל הנקודה של GraphQL, וב-monday זה גם מה שקובע כמה נקודות מורכבות תשלם. שאילתה שמבקשת שלושה שדות זולה בהרבה מאחת שמבקשת עשרים.
- Webhooks במקום תשאול. monday מאפשרת webhooks, ובכל תרחיש של "כשמשהו משתנה" הם עדיפים על תשאול מחזורי - הן מבחינת מורכבות והן מבחינת עדכניות.
מתי monday מספיקה ומתי לא
ה-API של monday מצוין לקריאה ולכתיבה של פריטים, ליצירת אוטומציות סביב לוחות, ולחיבור monday למערכות אחרות. הוא פחות מתאים כשמנסים להפוך את monday למסד נתונים תפעולי - דוחות כבדים, שאילתות חוצות-לוחות והצטלבויות מורכבות ישרפו את תקציב המורכבות.
בפרויקטים שבהם הנפח גדל, הדפוס שמחזיק הוא לסנכרן את מה שצריך למסד נתונים משלך ולהריץ את הדוחות שם, ולהשאיר את monday כממשק העבודה של הצוות. זו גם השאלה הרחבה יותר של מתי מערכת מדף מספיקה ומתי צריך CRM ייעודי.
שאלות נפוצות
האם ל-monday.com יש REST API?
לא. ל-monday.com יש API אחד מסוג GraphQL בכתובת https://api.monday.com/v2. כל בקשה היא POST לאותה כתובת עם שלוש כותרות - Authorization, Content-Type: application/json וכותרת API-Version מתוארכת. כל השוני בין בקשות נמצא בשאילתת ה-GraphQL עצמה.
מהי מגבלת המורכבות של ה-API של monday.com?
לכל שאילתה מחושב ניקוד מורכבות מול תקציב שנמדד בנקודות לדקה - כמיליון בחשבונות חינמיים וניסיון, ובין חמישה לעשרה מיליון בהתאם לסוג הטוקן. החלון נע ומתאפס 60 שניות אחרי הקריאה הראשונה, וחריגה מחזירה ComplexityException. המגבלה הזו, ולא מספר הקריאות היומי, היא בדרך כלל מה שעוצר אינטגרציה.
איך בודקים מורכבות של שאילתה לפני שהיא נכשלת?
להוסיף את שדה ה-complexity לשאילתה. התשובה תכלול אז את עלות השאילתה, את התקציב שנותר לפניה ואחריה, ומתי המגבלה מתאפסת. הרצה על לוח קטן והכפלה בנפח הנתונים הצפוי היא הדרך האמינה לתכנן סנכרון לפני שהוא מגיע לייצור.
למה ערכי עמודות ב-monday.com חוזרים כמחרוזת?
כי ערכי העמודות הם JSON מקודד בתוך מחרוזת, עם מבנה פנימי שונה לכל סוג עמודה. כתיבה שלהם דורשת את אותו קידוד כפול - לבנות אובייקט, להמיר אותו למחרוזת, ולהעביר את המחרוזת למוטציה. תמיד להשתמש בממיר JSON ולא בשרשור מחרוזות, ולהעתיק את המבנה מפריט קיים שמוגדר נכון במקום לנחש אותו.
למה קריאת ה-API של monday.com מחזירה 200 אבל כלום לא קרה?
GraphQL מחזיר HTTP 200 גם לפעולות שנכשלו - הכשל מופיע במערך errors בגוף התשובה. כל לקוח שמסתעף רק לפי קוד הסטטוס יתייחס למוטציה שנדחתה כאל הצלחה. תמיד לפרסר את הגוף ולבדוק שגיאות לפני שמחשיבים את הקריאה כמוצלחת.
כמה קריאות API ביום מאפשרת monday.com?
1,000 ביום במסלולי Free, Basic ו-Standard, 10,000 ב-Pro ו-25,000 ב-Enterprise. בפועל כמעט לא מגיעים לתקרה הזו, כי תקציב המורכבות לדקה הוא המגבלה שנתקלים בה קודם - שאילתה מקוננת אחת יכולה למצות אותו לבדה.
להמשך קריאה
שירות רלוונטי
מערכת CRM בהתאמה אישית
CRM שנבנה סביב הפייפליין שלכם, מחובר לכלים שאתם כבר עובדים איתם.
על הכותב
יהונתן סעדיה
מהנדס פרילנסר לאוטומציה, אתרים ו-MVP
אני יהונתן סעדיה, מהנדס בכיר שבונה אוטומציה עסקית, אתרים מותאמים ומוצרי MVP לעסקים קטנים ובינוניים בארה"ב, אירופה וישראל. המדריכים האלה נכתבים מתוך עבודה אמיתית עם לקוחות, לא מתיאוריה.
בוא נעבוד יחדיש לך פרויקט דומה?
ספר לי מה אתה מנסה להפוך לאוטומטי או לבנות, ואומר לך מהי הדרך המהירה והאמינה ביותר ליישם את זה.
