Blue GraphQL API 中所有錯誤代碼的綜合參考,按類別組織


錯誤回應格式

Blue 的 GraphQL API 根據 GraphQL 規範以標準化格式返回錯誤。當發生錯誤時,回應會包含一個 errors 陣列,詳細說明發生了什麼問題。

示例錯誤回應

{
  "errors": [
    {
      "message": "Todo was not found.",
      "extensions": {
        "code": "TODO_NOT_FOUND"
      }
    }
  ]
}

錯誤結構

每個錯誤對象包含:

  • message: 錯誤的可讀描述
  • extensions.code: 用於程式化處理的機器可讀錯誤代碼

生產環境錯誤安全

Blue 實施了一個錯誤暴露的安全系統:

  • 安全錯誤: 將實際錯誤代碼和消息顯示給客戶端
  • 非安全錯誤: 返回通用的 INTERNAL_SERVER_ERROR 以隱藏敏感細節
  • 資源未找到: 所有 *_NOT_FOUND 錯誤被視為安全並始終暴露

錯誤類別

Blue 定義了 108 個自定義錯誤代碼,按以下類別組織:

認證與授權錯誤

錯誤代碼 消息 描述
UNAUTHENTICATED "需要認證。" 請求需要認證但未提供
FORBIDDEN "您未獲授權。" 已認證但缺少所需權限

資源未找到錯誤(共 52 個)

核心資源

錯誤代碼 消息 描述
TODO_NOT_FOUND "待辦事項未找到。" 記錄/待辦事項不存在或用戶缺乏訪問權限
TODO_LIST_NOT_FOUND "待辦列表未找到。" 列表不存在或用戶缺乏訪問權限
PROJECT_NOT_FOUND "項目未找到。" 項目不存在或用戶缺乏訪問權限
COMPANY_NOT_FOUND "公司未找到。" 公司不存在或用戶缺乏訪問權限
USER_NOT_FOUND "用戶未找到。" 用戶在系統中不存在

自定義字段與表單

錯誤代碼 消息 描述
CUSTOM_FIELD_NOT_FOUND "自定義字段未找到。" 自定義字段不存在
CUSTOM_FIELD_OPTION_NOT_FOUND "自定義字段選項未找到。" 選擇字段選項不存在
FORM_NOT_FOUND "表單未找到。" 表單模板不存在
FORM_FIELD_NOT_FOUND "表單字段未找到。" 表單字段不存在

項目組件

錯誤代碼 消息 描述
TAG_NOT_FOUND "標籤未找到。" 標籤在項目中不存在
AUTOMATION_NOT_FOUND "自動化未找到。" 自動化規則不存在
CHART_NOT_FOUND "圖表未找到。" 儀表板圖表不存在
WEBHOOK_NOT_FOUND "Webhook 未找到。" Webhook 配置不存在
TEMPLATE_NOT_FOUND "模板未找到。" 項目模板不存在

評論與活動

錯誤代碼 消息 描述
COMMENT_NOT_FOUND "評論未找到。" 評論不存在
ACTIVITY_NOT_FOUND "活動未找到。" 活動日誌條目不存在
REACTION_NOT_FOUND "反應未找到。" 評論反應不存在

其他資源

錯誤代碼 消息 描述
FILE_NOT_FOUND "文件未找到。" 文件附件不存在
SUBSCRIPTION_NOT_FOUND "訂閱未找到。" 計費訂閱不存在
INVOICE_NOT_FOUND "發票未找到。" 發票記錄不存在
CHECKLIST_NOT_FOUND "檢查清單未找到。" 檢查清單不存在
CHECKLIST_ITEM_NOT_FOUND "檢查清單項目未找到。" 檢查清單項目不存在
PROJECT_ROLE_NOT_FOUND "項目角色未找到。" 自定義項目角色不存在
PROJECT_ACCESS_NOT_FOUND "項目訪問未找到。" 用戶項目訪問不存在
NOTIFICATION_NOT_FOUND "通知未找到。" 通知不存在
DASHBOARD_NOT_FOUND "儀表板未找到。" 儀表板不存在
KEY_NOT_FOUND "密鑰未找到。" 設定密鑰不存在

驗證錯誤

錯誤代碼 消息 描述
BAD_USER_INPUT "無效的輸入。" 通用輸入驗證失敗
VALIDATION_ERROR "無效的參數" 請求參數驗證失敗
BAD_EMAIL "您需要輸入有效的電子郵件。" 無效的電子郵件格式
INVALID_IDS "無效的 ID。" 請求中的一個或多個 ID 無效
PHONE_INVALID "電話無效。" 無效的電話號碼格式
URL_INVALID "URL 無效。" 無效的 URL 格式
INVALID_RECURRING_DUE_DATE "無效的重複任務截止日期" 重複任務日期驗證失敗
INVALID_COLOR "無效的顏色" 顏色值不符合預期格式

商業邏輯錯誤

限制與配額

錯誤代碼 消息 描述
COMPANY_LIMIT "您已達到帳戶的公司限制。" 最大公司數量已達到
PROJECT_LIMIT "您已達到公司項目的限制。" 最大項目數量已達到
USER_LIMIT "您已達到公司用戶的限制。" 最大用戶數量已達到
PROJECT_TEMPLATE_LIMIT "您已達到公司模板的限制。" 最大模板數量已達到
CUSTOM_FIELD_LIMIT "自定義字段限制已達到。" 最大自定義字段數量已達到
TODO_LIST_LIMIT "您已達到項目的列表限制。" 每個項目的最大列表數量
TOO_MANY_TODOS "待辦事項過多。" 記錄數量限制已超過
TOO_MANY_OPTIONS "選項過多。" 選擇字段選項數量限制已超過
MAX_FILE_SIZE "最大文件大小為 4.8GB" 文件上傳大小限制已超過

資源衝突

錯誤代碼 消息 描述
TAG_ALREADY_EXISTS "標籤已存在。" 項目中存在同名標籤
COMPANY_SLUG_ALREADY_EXISTS "公司已存在。" 公司 slug/URL 已被佔用
USER_ALREADY_EXISTS "用戶已存在。" 用戶電子郵件已註冊
ALREADY_INVITED "用戶已被邀請。" 用戶已經有待處理的邀請
USER_ALREADY_IN_PROJECT "用戶已在此項目中。" 用戶已經有項目訪問權限
FILE_TYPE_NOT_ALLOWED "不允許的文件類型。" 上傳的文件類型受到限制

權限與訪問錯誤

錯誤代碼 消息 描述
UNABLE_TO_DELETE_ONLY_ADMIN "無法刪除公司中的唯一管理員。" 無法移除最後一位管理員
UNABLE_TO_UPDATE_OWNER "無法更新擁有者。" 無法修改擁有者權限
TODO_LIST_IS_HIDDEN "待辦列表被隱藏。" 列表對用戶的角色隱藏
COMPANY_NOT_ACTIVE "公司未激活。" 公司訂閱未激活
PROJECT_NOT_ACTIVE "項目未激活。" 項目已存檔/未激活

數據完整性錯誤

錯誤代碼 消息 描述
UNABLE_TO_DELETE_LIST_WITH_TODOS "無法刪除有待辦事項的列表。" 列表必須為空才能刪除
UNABLE_TO_DELTE_FILE "無法刪除文件。" 文件刪除失敗(代碼中有錯字)
UNABLE_TO_MOVE_TODO "無法移動待辦事項。" 無法在列表之間移動記錄
DEPENDENCY_HAS_DEPENDENCY "依賴項有依賴項" 檢測到循環依賴
TODO_DEPENDS_ON_ITSELF "待辦事項依賴於自身" 自我參考依賴

Stripe/支付錯誤

錯誤代碼 消息 描述
STRIPE_CREATING_CUSTOMER "在 Stripe 中創建客戶時出錯。" Stripe 客戶創建失敗
STRIPE_ALREADY_SUBSCRIBED "已經訂閱。" 存在有效訂閱
STRIPE_MISSING_PAYMENT_METHOD "缺少支付方式。" 沒有支付方式
STRIPE_CREATING_SUBSCRIPTION "在 Stripe 中創建訂閱時出錯。" 訂閱創建失敗
STRIPE_UPDATING_SUBSCRIPTION "在 Stripe 中更新訂閱時出錯。" 訂閱更新失敗
STRIPE_CHECKOUT_SESSION "在 Stripe 中創建結帳會話時出錯。" 結帳會話創建失敗
STRIPE_CUSTOMER_PORTAL "在 Stripe 中創建客戶門戶時出錯。" 門戶會話創建失敗
STRIPE_TAX_ID "無法保存稅號" 稅號驗證/保存失敗
PAYMENT_REQUIRED "需要支付。" 功能需要有效訂閱
NO_PAYMENT_REQUIRED "不需要支付。" 操作不需要支付

認證與會話錯誤

錯誤代碼 消息 描述
INVALID_CREDENTIALS "無效的憑證。" 用戶名/密碼不正確
EXPIRED_RESET_TOKEN "重置令牌已過期。" 密碼重置令牌已過期
OAUTH_FAILED "OAuth 流程失敗。" OAuth 認證失敗
SAML_NOT_ENABLED "SSO (SAML) 未啟用。" SAML SSO 未配置
SSO_AUTO_PROVISION_DISABLED "自動配置已禁用。" 無法自動創建 SSO 用戶

速率限制

速率限制由 graphql-rate-limit 套件處理,具有不同的配置:

限制類型 窗口 最大請求 應用於
Standard 60s 500 Most queries/mutations
Sensitive 300s 10 Password reset, auth operations
Expensive 60s 20 Complex queries, bulk operations
Search 60s 60 Search operations
File Upload 60s 100 File upload operations

當達到速率限制時,您將收到一個標準的 GraphQL 錯誤,消息指示超過了限制。

系統與內部錯誤

錯誤代碼 消息 描述
INTERNAL_SERVER_ERROR "內部伺服器錯誤。" 生產環境中非安全錯誤的通用錯誤
UNKNOWN_ERROR "未知錯誤。" 發生了意外錯誤
RESOLVER_NOT_FOUND "解析器未找到" 缺少 GraphQL 解析器
FIELD_NOT_IN_SCHEMA "字段不在架構中" 請求的字段不存在

錯誤處理最佳實踐

客戶端處理

try {
  const result = await client.mutate({
    mutation: CREATE_TODO,
    variables: { input }
  });
} catch (error) {
  if (error.graphQLErrors?.length > 0) {
    const errorCode = error.graphQLErrors[0].extensions?.code;
    
    switch (errorCode) {
      case 'UNAUTHENTICATED':
        // Redirect to login
        break;
      case 'TODO_NOT_FOUND':
        // Show "Record not found" message
        break;
      case 'VALIDATION_ERROR':
        // Display validation errors
        break;
      default:
        // Show generic error message
    }
  }
}

常見錯誤場景

  1. 需要認證: UNAUTHENTICATED - 用戶需要登錄
  2. 權限被拒絕: FORBIDDEN - 用戶缺少所需角色/權限
  3. 資源未找到: *_NOT_FOUND - 資源不存在或用戶無法訪問
  4. 驗證失敗: VALIDATION_ERROR, BAD_USER_INPUT - 檢查輸入參數
  5. 速率限制: 檢查速率限制標頭並實施退避
  6. 需要支付: PAYMENT_REQUIRED - 功能需要訂閱

相關文檔

AI 助手

回應是使用人工智慧生成的,可能包含錯誤。

我能幫助您什麼?

隨時詢問我有關 Blue 或此文件的任何問題。

輸入發送 • Shift+Enter 進行換行 • ⌘I 打開