Tryb rozgłoszeniowy (zdarzenia)
Tryb rozgłoszeniowy odwraca kierunek inicjatywy względem trybu żądaniowego: to system dziedzinowy zgłasza zdarzenie (utworzenie, zmiana, usunięcie zasobu), a API.ERP natychmiast eksportuje pełną zawartość powstałego/zmienionego zasobu do repozytorium integratora — bez konieczności cyklicznego odpytywania API.
Tryb rozgłoszeniowy działa naprzemiennie z trybem notyfikacyjnym — dla danego zasobu obowiązuje zawsze tylko jeden z nich, ustalony w ramach integracji.
Charakterystyka
- Obsługa zdarzeń w systemach dziedzinowych — setki zdarzeń (księgowość, magazyn, kadry, majątek) mogą powodować eksport zasobu.
- Pełna zawartość zasobu — do repozytorium integratora trafia kompletny, przekonwertowany model kanoniczny (np.
Party,Invoice), bez potrzeby dodatkowego zapytania zwrotnego. - Natychmiastowy przepływ informacji po wystąpieniu zdarzenia w systemie źródłowym.
Przepływ informacji
Celem eksportu jest magazyn docelowy integratora (magazyn obiektowy, endpoint HTTP albo katalog w systemie plików) — API.ERP zapisuje tam każdy zasób, a integrator odczytuje dane we własnym zakresie (asynchronicznie). Poniżej wariant z magazynem obiektowym.
flowchart RL
D1["FK"]:::domain --> A["API.ERP"]:::api
D2["WMS"]:::domain --> A
D3["HR"]:::domain --> A
A -- "zasób — zapis obiektu" --> B["Magazyn obiektowy"]:::repo
B -. "odczyt (integrator)" .-> I["Aplikacja integratora"]:::integrator
classDef integrator fill:#8BC34A,stroke:#558B2F,color:#000
classDef api fill:#03A9F4,stroke:#0277BD,color:#000
classDef domain fill:#FFA000,stroke:#E65100,color:#000
classDef repo fill:#FFFFFF,stroke:#333,color:#000
Sekwencja przetworzenia jednego zdarzenia:
sequenceDiagram
participant D as Systemy dziedzinowe (księgowość / magazyn / kadry / majątek)
participant A as API.ERP
participant R as Magazyn obiektowy (integratora)
D->>A: Zdarzenie (utworzenie / zmiana / usunięcie zasobu)
A->>A: Konwersja do modelu kanonicznego
A->>R: Zapis obiektu (zasób)
Note over R: integrator odczytuje asynchronicznie
Szczegóły: Repozytorium danych.
Repozytorium danych
Tryb rozgłoszeniowy dostarcza do celu ustalanego w ramach integracji: magazyn obiektowy (storage.type: blob), endpoint HTTP (http, POST zasobu) albo katalog w systemie plików (local). Wspólny model celu, pola połączenia i uprawnienia opisano w Cel dostarczenia (storage.type). W wariancie magazynu obiektowego API.ERP zapisuje każdy zasób jako obiekt JSON w kontenerze integratora; integrator odczytuje go we własnym zakresie (asynchronicznie).
- Nazwa obiektu:
{resourceType}/{id}_{znacznik-czasu}.json.
Zgodność z eksportem API.ERP
Zapisany obiekt to model kanoniczny serializowany camelCase, z polem resourceType identyfikującym rodzaj zasobu (zgodnie z DomainResource). Dla akcji create/update zapisywany jest pełny zasób; dla delete — ponieważ zasób źródłowy już nie istnieje — eksportowane są metadane elementu kolejki (typ zasobu, identyfikator, akcja, czas), a format docelowy tego komunikatu nie jest jeszcze ustalony. W trybie notyfikacyjnym wszystkie operacje, w tym deleted, są przenoszone jako Notification.
Potwierdzenie odbioru
Brak potwierdzenia zwrotnego — dostarczenie jest uznane po udanym zapisie obiektu do magazynu lub katalogu albo po odpowiedzi 2xx endpointu HTTP. Integrator konsumuje obiekty asynchronicznie we własnym zakresie (np. nasłuch zdarzeń magazynu lub cykliczny odczyt).
Ponawianie, martwa kolejka (dead-letter), idempotencja (rozróżnianie duplikatów po id) i brak gwarancji kolejności są wspólne dla trybów wychodzących — zob. Cel dostarczenia → Dostarczanie, ponawianie, idempotencja. Nie zakładaj, że zdarzenia przychodzą w kolejności ich wystąpienia.
Kiedy używać
Tryb rozgłoszeniowy pasuje tam, gdzie integrator potrzebuje kompletnych danych od razu, bez dodatkowego zapytania zwrotnego — np. pełna synchronizacja danych kontrahenta. Jeśli integratorowi wystarczy sama informacja o zmianie (a pełne dane pobiera na żądanie, gdy faktycznie ich potrzebuje), właściwy jest lżejszy tryb notyfikacyjny. Dla operacji inicjowanych przez integratora (zapis, zapytanie ad-hoc) właściwy jest tryb żądaniowy.
Odniesienia
- Tryb notyfikacyjny — wariant lekkiego powiadomienia bez treści zasobu
- Tryb żądaniowy, Tryb raportowy