Fankex

輸入關鍵字搜尋已發布文件。

mywebdrive

API 使用約定

同源接口、認證類型、參數編碼、分頁與不能自動重試的請求。

入口與憑據類型

公共 API 前綴是實例的 /api/v1,準確請求/響應 schema 由原始碼中的 docs/openapi.yaml 定義。瀏覽器從同源 Nginx 訪問,不應直接訪問內部 Core、資料庫或 Worker 端口。

| 請求類型 | 認證方式 | | --- | --- | | 申請驗證碼、驗證驗證碼、公開目錄、分享/公開票據 | 按各接口的挑戰、口令和可用性檢查;不需要登入 token | | 個人檔案、配額、分享管理、發佈管理 | Authorization: Bearer <accessToken> | | 管理使用者、看板、通知 | Bearer 身份並通過服務端 admin 檢查 | | 上傳分片和完成 | Core 簽發的 uploadGrant | | 對象下載 | Core 簽發的單次 downloadGrant | | 刷新與退出 | 同源 refresh cookie;不是把 refresh token 放進請求體 |

grant、access token、refresh cookie 不能互換。客戶端只使用 Core 返回的對象標識和授權,不自行生成 grant 或調用私有完成回調。

一個只讀的登入後檢查

在你自己的 MyWebDrive 實例頁面登入後,可以在受控開發客戶端用已有 accessToken 檢查檔案和額度。下面函數不申請驗證碼、不修改檔案,也不把憑據打印出來;只接受運行時參數,不把真實 token 寫進原始碼。

async function inspectMyWebDrive(accessToken) {
  if (typeof accessToken !== 'string' || !accessToken.trim()) {
    throw new Error('An authenticated access token is required');
  }
  const read = async (path) => {
    const response = await fetch(`/api/v1${path}`, {
      headers: { Authorization: `Bearer ${accessToken}` },
      credentials: 'same-origin',
    });
    if (!response.ok) throw new Error(`Request failed: ${response.status}`);
    return response.json();
  };
  const [files, quota] = await Promise.all([
    read('/files?limit=20'),
    read('/quota'),
  ]);
  return {
    files: files.items,
    nextCursor: files.nextCursor,
    availableBytes: BigInt(quota.availableBytes),
  };
}

這是瀏覽器同源示例,不能原樣在沒有 base URL 的 Node.js 中運行;應由實際認證流程傳入 token,不要求使用者複製 HttpOnly cookie。返回的檔案信息也應留在自己的受控環境。

參數與分頁

fileId、shareId、userId 等資源標識使用接口返回的 UUID。分享 token、publication slug 與 fileId 不是同一種標識。將路徑段逐個 encodeURIComponent,查詢參數用 URLSearchParams,不拼接未轉義使用者輸入。

位元組數用十進制字符串,計算用 BigInt。檔案、版本和公開目錄用 nextCursor,管理員使用者和通知列表用頁碼。cursor 應原樣使用且綁定請求上下文,改變篩選後重置分頁。null cursor 表示本次響應無後續頁,不代表所有未來新增記錄都已獲得。

不要一律自動重試

GET 可在合適退避後重試,但驗證碼請求、驗證、會話刷新、分享票據與公開票據都有副作用。尤其分享票據重試可能再次消耗次數,refresh token 重用可能導致會話撤銷。

上傳意圖使用 Idempotency-Key:同一次操作的重試保留原鍵和完全相同的參數;不同操作換新鍵。不要把冪等性泛化到所有 POST。請求不確定是否成功時先查詢當前狀態,重試策略應按接口定義處理。

狀態碼與報告

400 檢查參數,401 檢查身份或 grant,403 檢查管理員權限,404 可能是有意隱藏不可訪問資源,409 是狀態或唯一性衝突,413 是上傳體積邊界,429 是限流,503 是依賴暫不可用。詳細含義仍以對應功能頁為準。

報告包含方法、去掉憑據後的路徑形狀、狀態碼和時間。不要提供 Authorization、Cookie、分享 token、驗證碼或完整使用者資料。需要功能指引可使用本頁的“詢問文件”。