טיפול בשגיאות API, מגבלות קצב וניסיונות חוזרים של Notiondesk

קודי שגיאה ומעטפת של ה-API Notiondesk, מגבלות קצב של 120 קריאות ו-20 כתיבות לדקה, ניסיון חוזר לאחר מכן, וניסיונות חוזרים בטוחים עם מפתח Idempotency.

2 דקות קריאה

ממשק ה-API Notiondesk עונה על כל שגיאה עם אותה מעטפת JSON וקובץ code הניתן לקריאה על ידי מכונה, מגביל כל מפתח ל-120 קריאות ו-20 כתיבות לדקה, ומאפשר לך לנסות שוב כל שינוי בבטחה עם כותרת Idempotency-Key. מאמר זה מפרט כל קוד שגיאה של Notiondesk ב-API, מסביר את מגבלות הקצב ואת הכותרות שלהן, ומראה כיצד לבנות ניסיונות חוזרים שלא ישנו דבר פעמיים.

מעטפת השגיאה של ה-API Notiondesk

כל שגיאה עונה על אותה צורה, וכל שדה תמיד קיים:

{
  "object": "error",
  "code": "validation_error",
  "message": "The request parameters are invalid.",
  "request_id": "0f2c1e94-7a1b-4c2d-9e3f-5a6b7c8d9e0f",
  "errors": [
    {"field": "page_size", "message": "This value should be between 1 and 100."}
  ]
}
שָׂדֶה מַשְׁמָעוּת
objectתמיד __נשמר_78__
codeהשגיאה הניתנת לקריאה על ידי מכונה. הסתעפו את הקוד שלכם בשדה זה בלבד.
messageהסבר קריא לבני אדם. הוא יכול להשתנות, לכן לעולם אל תנתחו אותו
request_idמזהה את הבקשה בעת פנייה לתמיכה. null כאשר הבקשה נכשלה לפני הגעה למסלול, לדוגמה בנתיב לא ידוע.
errorsבעיות ברמת השדה, כל אחת עם field ו-message. ריק כאשר השגיאה אינה קשורה לקלט ספציפי.

כיצד field נותן שם לערך

  • שדה ברמה העליונה הוא שמו: page_size.
  • שדה בתוך רשימה נותן את השם לרשימה, לערך שבסוגריים, ולאחר מכן לשדה: items[fr].page_title.
  • הסוגריים מכילים את מזהה הערך כפי ששלחת אותו (locale ב-items, category_id ב-changelog_categories) כאשר לכל ערך יש מזהה ייחודי. אחרת, הוא מכיל את מיקום האפס של הערך: items[0].locale.
  • בעיה בבקשה בכללותה כוללת את "field": null.

קודי שגיאה של Notiondesk ב-API

codeסטטוס HTTP מַשְׁמָעוּת מה לעשות
authentication_error401 המפתח או אסימון הגישה חסרים או שלא ניתן להשתמש בהם בדוק את המפתח, את תוקפו ואת התוכנית. ראה אימות באמצעות Notiondesk API
insufficient_scope403 לתעודה חסר ההיקף הנדרש מהמסלול השתמש במפתח עם ההיקף ששמו מופיע ב-WWW-Authenticate
permission_denied402, 403 לאישור אין אפשרות לבצע פעולה זו על משאב זה, לדוגמה מכיוון שהתוכנית חסרה התכונה. בדוק את התוכנית ואת הגדרות מרכז העזרה. אל תנסה שוב ללא שינוי.
invalid_version400 הכותרת nd-version שמה גרסה לא ידועה שלח 2026-10-16 או השמט את הכותרת
validation_error400, 422 פרמטר או שדה גוף אינם חוקיים, לא ידועים או מחוץ לטווח תקן את השדות המפורטים ב-errors
not_found404, 405 הנתיב, המשאב או המתודה אינם קיימים בדוק את המזהים ואת המתודה
conflict_error409 הבקשה מתנגשת עם המצב הנוכחי, לדוגמה, סנכרון כבר פועל המתן, ואז נסה שוב
idempotency_key_invalid400 הכותרת Idempotency-Key ריקה או ארוכה מ-255 תווים שלח 1 עד 255 תווים
idempotency_key_reused422 ה-Idempotency-Key כבר היה בשימוש עבור בקשה אחרת. השתמש במפתח חדש עבור בקשה חדשה
request_in_progress409 בקשה עם אותו Idempotency-Key עדיין פועלת המתן, ואז נסה שוב עם אותו מקש
rate_limited429 יותר מדי בקשות המתן Retry-After שניות
internal_error500 ומעלה Notiondesk נכשל נסה שוב מאוחר יותר, וציין את request_id אם תפנה לתמיכה

בקשה למרכז עזרה או משאב מחוץ לסביבת העבודה שלך עונה על שאלה 404 not_found, כך שה-API לעולם לא חושף אם הוא קיים.

מגבלות קצב של API Notiondesk

לכל מפתח API ולכל מענק OAuth יש שני תקציבי בקשה, הנספרים על פני חלון הזזה של דקה אחת:

תַקצִיב מסלולים בקשות לדקה
קורא GET מסלולים 120
כותב מסלולים POST, PATCH ו-DELETE 20

דוחות אנליטיקס נחשבים גם כחלק מתקציב של 30 בקשות לדקה לכל מרכז עזרה , המשותף לכל מפתח ואפליקציית OAuth בסביבת העבודה.

לתגובות יש שלוש כותרות:

כּוֹתֶרֶת מַשְׁמָעוּת
X-RateLimit-Limitבקשות המותרות בחלון הנוכחי
X-RateLimit-Remainingבקשות שנותרו בחלון הנוכחי
Retry-Afterשניות עד לקבלת הבקשה הבאה; 0 כל עוד נותרות הבקשות

בקשה חורגת מהתקציב עונה על 429 rate_limited. המתן את מספר השניות ב-Retry-After לפני שליחת הבקשה הבאה.

הערה: מגבלות התעריפים נספרות לפי מפתח או לפי מתן OAuth, ולא לפי סביבת עבודה. שתי אינטגרציות עם מפתחות נפרדים אינן מאטות זו את זו, למעט בתקציב האנליטיקה המשותף.

נסה שוב בבטחה עם Idempotency-Key

פסק זמן ברשת משאיר אותך לא בטוח האם שינוי התבצע. כותרת Idempotency-Key מאפשרת לך לשלוח את אותה בקשה שוב מבלי לשנות דבר פעמיים.

כל נתיב שמשנה משהו מקבל זאת: שינויים בהפניה מחדש של דף, עדכוני הגדרות ומיתוג, שינויי אינטגרציה וטריגרים של סנכרון. שלח ערך ייחודי של 1 עד 255 תווים, כגון UUID, בניסיון הראשון, ואת אותו ערך בכל ניסיון חוזר:

מה קורה בניסיון חוזר:

curl -X POST "https://api.notiondesk.so/sites/c74781f6-1aea-4e17-ab23-bbb8b4d174b6/page-redirects" \
  -H "Authorization: Bearer $NOTIONDESK_API_KEY" \
  -H "nd-version: 2026-10-16" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: 6f0d6b1e-create-getting-started" \
  -d '{"type": "article", "source_path": "/legacy/getting-started", "target_id": "1761580412", "locale": "en"}'
נסה שוב תוֹצָאָה
אותו מפתח, אותו גוף, אותו מסלול, לאחר סיום הבקשה הראשונה התגובה הראשונה שוב, כולל סטטוס וגוף, עם X-Idempotent-Replay: true. שום דבר לא משתנה.
אותו מפתח בזמן שהבקשה הראשונה עדיין פועלת 409 request_in_progress. המתן ונסה שוב
אותו מפתח עם מזהי גוף, מסלול או נתיב שונים 422 __נשמר_24__
אותו מפתח ואותו גוף לאחר שהבקשה הראשונה ענתה על שגיאה הבקשה פועלת שוב

תגובה מוצלחת נושאת את X-Idempotent-Replay: false בפעם הראשונה ואת true בהשמעה חוזרת. Notiondesk שומר מפתח למשך 24 שעות לפחות. מפתח שייך למפתח ה-API או להענקת OAuth ששלחו אותו, והענקת OAuth שומרת את המפתחות שלו לאורך רענון האסימון.

ללא הכותרת, בקשה רצה פעם אחת, וניסיון חוזר רצה שוב.

אסטרטגיית ניסיון חוזר שעובדת

  1. צור Idempotency-Key אחד לכל שינוי לוגי, והשתמש בו שוב עבור כל ניסיון חוזר של שינוי זה.
  1. ב-429 rate_limited, המתן Retry-After שניות, ולאחר מכן נסה שוב.
  1. ב-409 request_in_progress, המתן מספר שניות, ולאחר מכן נסה שוב עם אותו מקש. ב-409 conflict_error, סנכרון של מרכז העזרה כבר פועל: המתן מספר דקות לפני שתפעיל שוב, או דלג על הפעלה זו.
  1. ב-500 ומעלה, או לאחר שגיאת רשת, יש לנסות שוב עם אפשרות ביטול פעולות אקספוננציאליות, לדוגמה לאחר 1, 2, 4 ו-8 שניות.
  1. לעולם אל תנסה שוב את 400, 401, 403, 404 או 422 ללא שינוי. תקן תחילה את הבקשה.

ב-JavaScript, עבור כל מסלול שמשנה משהו. הוא עוצר ב-conflict_error ומשאיר את ההחלטה הזו לקוד שלך:

שאלות נפוצות

import { randomUUID } from "node:crypto";

const sleep = (seconds) => new Promise((resolve) => setTimeout(resolve, seconds * 1000));

async function notiondeskRequest(method, path, body, attempts = 5) {
  const idempotencyKey = randomUUID();

  for (let attempt = 0; attempt < attempts; attempt++) {
    let response;
    try {
      response = await fetch(`https://api.notiondesk.so${path}`, {
        method,
        headers: {
          Authorization: `Bearer ${process.env.NOTIONDESK_API_KEY}`,
          "nd-version": "2026-10-16",
          "Content-Type": "application/json",
          "Idempotency-Key": idempotencyKey,
        },
        body: body ? JSON.stringify(body) : undefined,
      });
    } catch {
      await sleep(2 ** attempt);
      continue;
    }

    if (response.ok) {
      return response.status === 204 ? null : response.json();
    }

    const error = await response.json().catch(() => ({}));
    const retryable = response.status === 429 || response.status >= 500 || error.code === "request_in_progress";
    if (!retryable) {
      throw new Error(`${response.status} ${error.code}: ${error.message}`);
    }

    const retryAfter = Number(response.headers.get("Retry-After"));
    await sleep(retryAfter > 0 ? retryAfter : 2 ** attempt);
  }

  throw new Error(`Notiondesk request failed after ${attempts} attempts`);
}

מהן מגבלות התעריף של Notiondesk ב-API?

120 בקשות קריאה ו-20 בקשות כתיבה לדקה עבור כל מפתח API או אישור OAuth, בנוסף ל-30 בקשות ניתוח נתונים לדקה עבור כל מרכז עזרה. בקשה מעבר לתקציב עונה על 429 עם כותרת Retry-After.

באיזה שדה הקוד שלי צריך לבדוק אם יש שגיאה?

code. זהו המסווג היציב היחיד הניתן לקריאה על ידי מכונה. ה-message מיועד לאנשים ויכול להשתנות.

מה עליי לשלוח לתמיכה כאשר בקשה נכשלת?

ה-request_id מתגובת השגיאה, הנתיב שאליו התקשרת וזמן הבקשה.

האם בטוח לנסות שוב טריגר סנכרון?

כן, עם Idempotency-Key. ניסיון חוזר עם אותו מפתח עונה שוב על התוצאה הראשונה ולא יוצר דבר בתור. ללא מפתח, טריגר סנכרון אתר שני בזמן שהראשון פועל עונה על 409 conflict_error.

מה הלאה

מאמרים קשורים

האם הדף הזה היה מועיל?

Still need help? Ask us