廣告位招商中 歡迎洽談

Web 應用程式整合 DeepAI Text-to-Image API 完全指南:金鑰鑑權、REST 接口與生產級架構實踐

365Finds Editorial
已收錄 11,430 篇 Wiki 文章

讓你的 AI 用上 365 Wiki

複製下方的提示詞,貼給你常用的 AI,然後直接提問。

下載完整版 Skill

先用提示詞體驗;經常使用時,安裝完整版 365Wiki Skill,以後無需重複複製。沒有常用 AI?Gemini、Microsoft Copilot 等網頁版也可以。

365Wiki Skill

在現代 Web 應用程式中引入 AI 影像生成技術,能為使用者提供個人化頭像建立、社群行銷素材繪製及視覺內容創作等功能。然而,對於獨立開發者與初創團隊來說,自行建置與維護 GPU 推理伺服器(例如維護 Stable Diffusion 實例、CUDA 驅動程式以及處理冷啟動和負載平衡)往往面臨龐大的初期建置成本與繁雜的運維工作。

DeepAI 提供了解決方案:透過其 Text-to-Image REST API,開發者無需涉足任何底層算力硬體,僅需透過標準 HTTP POST 請求傳遞提示詞與樣式參數,即可迅速產出高品質影像。本文將深入剖析此 API 的技術規格、金鑰鑑權設定、前後端協同架構與生產級整合注意事項。


架構設計:為何必須採用後端代理模式?

許多初次整合第三方 AI 服務的開發者,容易嘗試直接從前端瀏覽器(例如 React、Vue 或原生 fetch)呼叫 DeepAI API。然而,DeepAI 透過靜態 API Key 進行請求鑑權;若直接在前端發送請求,API 金鑰將毫無保留地暴露在瀏覽器的 Network 標籤頁與客戶端程式碼封裝中,極易招致惡意盜用與配額被刷盡的風險。

符合生產標準的架構必須實施後端代理模式(Backend Proxy Pattern):

[前端瀏覽器 UI]
       │
       ▼  (1) POST /api/generate-image { prompt, style, width, height }
[業務後端伺服器 (Node.js / Next.js / Python)]
       │  - 驗證使用者登入狀態、輸入有效性與請求頻率
       │  - 自環境變數讀取 process.env.DEEPAI_API_KEY
       ▼  (2) POST https://api.deepai.org/api/text2img (Header: api-key)
[DeepAI 推理伺服器群]
       │
       ▼  (3) 回傳 JSON { id, output_url }
[業務後端伺服器]
       │  - 選用:非同步轉存至自有物件儲存 (S3 / Cloudflare R2)
       ▼  (4) 回傳 { imageUrl, id } 給前端
[前端瀏覽器 UI]

採用後端代理不僅能確保金鑰安全,還能讓後端統一實施業務級限流、內容過濾,以及對生成影像進行持久化轉存。


DeepAI Text-to-Image REST API 規範詳解

DeepAI 的文字生圖服務提供單一 REST 端點,同時相容 application/json 與 multipart/form-data 的請求主體格式。

請求端點與身分鑑權

請求參數列表

參數名稱類型必要性預設值說明與數值條件
textstring是—描述所需生成畫面的英文文字提示詞(Prompt)。
image_generator_versionstring否standard模型版本,支援:standard、hd、genius、super_genius。
widthstring / int否512影像寬度,需為 32 的倍數,範圍 128 至 1536(如 512、768、1024)。
heightstring / int否512影像高度,需為 32 的倍數,範圍 128 至 1536(如 512、768、1024)。
negative_promptstring否—反向提示詞,用以排除模糊、變形、瑕疵手部或浮水印等不良細節。
genius_preferencestring否—genius 模式下的風格偏好:anime、photography、graphic、cinematic。
resolutionstring否2ksuper_genius 模式下的解析度:2k 或 4k。

長寬比與尺寸建議:

成功回傳資料結構

生成完成後,API 會以同步方式回傳 HTTP 200 OK 及 JSON 響應:

{
  "id": "59a0e8a9-1123-44b2-9a8c-7981b2345678",
  "output_url": "https://api.deepai.org/job-view-file/59a0e8a9-1123-44b2-9a8c-7981b2345678/output.jpg"
}

生產級程式碼實作示範

本節以 Node.js(Express)後端與現代瀏覽器原生 JavaScript 前端為例,示範完整的參數封裝、錯誤攔截與前端載入狀態維護。

1. 伺服器端路由實作(Node.js / Express 範例)

在伺服器環境設定變數 DEEPAI_API_KEY,並使用 Fetch API 轉發請求:

// server/routes/imageGenRoute.js
import express from 'express';

const router = express.Router();

router.post('/generate-image', async (req, res) => {
  try {
    const { prompt, style = 'standard', width = '512', height = '512', negativePrompt } = req.body;

    if (!prompt || typeof prompt !== 'string' || prompt.trim().length === 0) {
      return res.status(400).json({ error: '必須提供有效的提示詞內容。' });
    }

    const apiKey = process.env.DEEPAI_API_KEY;
    if (!apiKey) {
      return res.status(500).json({ error: '伺服器設定錯誤:找不到 DeepAI API Key。' });
    }

    // 封裝發送給 DeepAI 的資料
    const payload = {
      text: prompt.trim(),
      image_generator_version: style,
      width: String(width),
      height: String(height)
    };

    if (negativePrompt) {
      payload.negative_prompt = negativePrompt.trim();
    }

    // 發送 POST 請求至 DeepAI REST API,設定 30 秒逾時中斷機制
    const response = await fetch('https://api.deepai.org/api/text2img', {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
        'api-key': apiKey
      },
      body: JSON.stringify(payload),
      signal: AbortSignal.timeout(30000)
    });

    const data = await response.json();

    if (!response.ok) {
      const errorMessage = data.err || data.status || 'DeepAI 遠端服務異常';
      return res.status(response.status).json({ error: errorMessage });
    }

    // 回傳圖片網址與任務 ID
    return res.status(200).json({
      success: true,
      id: data.id,
      imageUrl: data.output_url
    });
  } catch (error) {
    if (error.name === 'TimeoutError') {
      return res.status(504).json({ error: '圖片生成超時,請稍後重試。' });
    }
    return res.status(500).json({ error: '伺服器處理生圖請求時發生非預期錯誤。' });
  }
});

export default router;

2. 客戶端請求與 UI 互動狀態控制

生圖運算需要一定推理時間(通常約 2 至 8 秒),前端必須提供適當的進度提示,並阻絕重複點擊:

// client/app.js
async function requestAiImage(promptText) {
  const submitBtn = document.getElementById('btn-generate');
  const previewArea = document.getElementById('preview-box');
  const statusLabel = document.getElementById('status-text');

  try {
    // 進入等待載入狀態
    submitBtn.disabled = true;
    statusLabel.textContent = 'AI 繪圖處理中,請稍候(約 3-6 秒)...';
    previewArea.classList.add('loading-skeleton');

    const response = await fetch('/api/generate-image', {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json'
      },
      body: JSON.stringify({
        prompt: promptText,
        style: 'standard',
        width: '512',
        height: '512',
        negativePrompt: 'blurry, deformed, bad anatomy, watermark'
      })
    });

    const result = await response.json();

    if (!response.ok) {
      throw new Error(result.error || `請求失敗,狀態碼 ${response.status}`);
    }

    // 呈現生圖結果
    previewArea.innerHTML = `<img src="${result.imageUrl}" alt="${promptText}" class="image-render" />`;
    statusLabel.textContent = '影像生成完畢!';
  } catch (err) {
    statusLabel.textContent = `錯誤:${err.message}`;
  } finally {
    submitBtn.disabled = false;
    previewArea.classList.remove('loading-skeleton');
  }
}

異常狀態碼應對與韌性防護

在線上環境調用 DeepAI API 時,應建立精準的錯誤監控與處置機制:


永久儲存:轉存自有物件儲存與 CDN

DeepAI 傳回的 output_url 屬於第三方託管網址。若長期直接依賴外部連結,可能會面臨外部檔案過期失效、連線延遲或 CORS 存取限制等隱憂。

生產級系統的最佳實踐為:當後端收到 output_url 後,以串流方式將圖片下載並轉存至自家雲端儲存(如 AWS S3、Cloudflare R2 或 Google Cloud Storage),並綁定自身的 CDN 域名回傳給前端。這不僅能確保資產永久受控,還能依業務需求進行 WebP/AVIF 自動轉換與快取加速。


費用架構與技術選型權衡

呼叫 DeepAI API 需具備 DeepAI Pro 訂閱(每月 9.99 美元或每年 89.99 美元)。訂閱提供基本配額,超出後依用量扣款:

適用時機

DeepAI 非常適合獨立開發者、新創產品原型(MVP)以及中小型 Web 平台。它完全免除了 GPU 伺服器租賃、驅動更新及 Kubernetes 叢集擴展的維運負擔,計費透明且即開即用。

自建模型的評估邊界

如果業務具有高度特定的客製化訴求(如指定微調 LoRA 模型、搭配 ControlNet 精確控制肢體),或每月生圖規模超過十萬張、自建專用 GPU 執行個體的邊際成本更具優勢時,才需要考慮自行架設 Diffusers/ComfyUI 伺服器。

對於追求敏捷開發與穩定服務的 Web 應用而言,DeepAI REST API 提供了在開發效率、成本投入與生成品質之間的平衡選擇。


參考資料