Sobes.tech
Middle

Wymyśl rozwiązanie integracyjne: system A musi zażądać od systemu B wygenerowania raportu (który tworzy się przez 2 godziny i waży 200 MB) i otrzymać wynik.

sobes.tech AI

Odpowiedź od AI

Dla rozwiązania integracyjnego, w którym system A żąda od systemu B wygenerowania dużego raportu (2 godziny tworzenia, 200 MB), lepiej jest użyć podejścia asynchronicznego z powiadomieniem o gotowości:

  1. System A wysyła żądanie generowania raportu do systemu B i otrzymuje unikalny identyfikator zadania.
  2. System B uruchamia proces generowania raportu w tle.
  3. System A okresowo pyta system B o status za pomocą identyfikatora zadania (np. przez REST API).
  4. Gdy raport jest gotowy, system B udostępnia link do pobrania (np. przez HTTP lub przechowywanie S3).
  5. System A pobiera raport z linku.

Takie podejście pozwala nie utrzymywać połączenia otwartego przez 2 godziny i efektywnie przesyłać duże pliki. Do przesyłania raportu lepiej używać magazynu plików lub obiektowego (S3, Azure Blob itp.), a nie bezpośrednio przez API.

Przykład API:

  • POST /reports - tworzy zadanie, zwraca taskId
  • GET /reports/{taskId}/status - status zadania
  • GET /reports/{taskId}/download - link do pobrania

To klasyczny wzorzec "zadanie-kolejka- powiadomienie" z przetwarzaniem asynchronicznym.