Przejdź do głównej treści
APIXO używa asynchronicznego wzorca dla wszystkich zadań generowania. To podejście obsługuje rzeczywistość, że generowanie AI wymaga czasu — od kilku sekund dla obrazów do kilku minut dla wideo.

Wzorzec

┌─────────────┐     ┌─────────────┐     ┌─────────────┐
│   Submit    │────▶│  Poll or    │────▶│   Retrieve  │
│   Task      │     │  Callback   │     │   Results   │
└─────────────┘     └─────────────┘     └─────────────┘
      │                   │                   │
      ▼                   ▼                   ▼
   taskId            state check          resultUrls

Krok 1: Zgłoś zadanie

Wyślij żądanie POST, aby utworzyć zadanie generowania:
POST https://api.apixo.ai/api/v1/generateTask/{model}
Żądanie:
{
  "request_type": "async",
  "input": {
    "mode": "text-to-image",
    "prompt": "A beautiful sunset over mountains"
  }
}
Odpowiedź:
{
  "code": 200,
  "message": "success",
  "data": {
    "taskId": "task_abc123xyz"
  }
}
API natychmiast zwraca taskId. Rzeczywiste generowanie odbywa się w tle.

Krok 2: Pobierz wyniki

Masz dwie opcje otrzymania wyników:

Opcja A: Polling (zalecane na początek)

Okresowo sprawdzaj status zadania:
GET https://api.apixo.ai/api/v1/statusTask/{model}?taskId={taskId}
Odpowiedź (w trakcie):
{
  "data": {
    "taskId": "task_abc123xyz",
    "state": "processing"
  }
}
Odpowiedź (zakończone):
{
  "data": {
    "taskId": "task_abc123xyz",
    "state": "success",
    "resultJson": "{\"resultUrls\":[\"https://cdn.apixo.ai/...\"]}",
    "costTime": 12500
  }
}

Opcja B: Webhooks (zalecane w produkcji)

Podaj callback_url przy zgłaszaniu:
{
  "request_type": "callback",
  "callback_url": "https://your-server.com/webhook/apixo",
  "input": { ... }
}
APIXO wyśle żądanie POST z wynikiem na Twój URL po zakończeniu zadania. Szczegóły implementacji patrz Webhooks.

Stany zadania

StanOpis
pendingZadanie w kolejce, oczekuje na start
processingZadanie jest przetwarzane
successZadanie zakończone pomyślnie
failedZadanie nie powiodło się (sprawdź failMsg)

Najlepsze praktyki pollingu

  1. Zacznij od odstępów 3–5 sekund dla większości zadań
  2. Użyj exponential backoff dla długotrwałych zadań (wideo)
  3. Ustaw maksymalny timeout (np. 5 minut)
  4. Obsługuj błędy elegancko z logiką ponowień
const pollWithBackoff = async (taskId, maxWait = 300000) => {
  let interval = 3000; // Start at 3s
  const startTime = Date.now();
  
  while (Date.now() - startTime < maxWait) {
    const result = await checkStatus(taskId);
    
    if (result.state === 'success') return result;
    if (result.state === 'failed') throw new Error(result.failMsg);
    
    await sleep(interval);
    interval = Math.min(interval * 1.5, 30000); // Max 30s
  }
  
  throw new Error('Timeout waiting for result');
};

Kiedy użyć którego podejścia

PodejścieNajlepsze dla
PollingProste integracje, aplikacje klienckie, testowanie
WebhooksSerwery produkcyjne, aplikacje real-time, duży ruch

Następne kroki