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:
- System A wysyła żądanie generowania raportu do systemu B i otrzymuje unikalny identyfikator zadania.
- System B uruchamia proces generowania raportu w tle.
- System A okresowo pyta system B o status za pomocą identyfikatora zadania (np. przez REST API).
- Gdy raport jest gotowy, system B udostępnia link do pobrania (np. przez HTTP lub przechowywanie S3).
- 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.