Ciekaw jestem Waszych pomysłów na problem jak niżej.
- Mamy zbiór API RESTowych (N różnych mikroserwisów) będących pewnym standardem
- Mamy zbiór M systemów (w przyszłości mogą się pojawić nowe, stare zniknąć) z zupełnie innym API (inna technologia, model danych)
- Nie mamy możliwości modyfikacji systemów z pkt. 2
W skrócie: istniejące systemy chcemy przykryć standaryzowanym API za pomocą nowej warstwy.
Jak powinien wyglądać box, który będzie z jednej strony wystawiał N API RESTowych, a z drugiej wywoływał API przykrywanych systemów?
Jak dla mnie potrzeba co najmniej dwóch istotnych elementów:
- dekompozycja operacji RESTowej na operacje w systemach, które przykrywamy. Tu widziałbym jakiś silnik procesów biznesowych/workflow, który pozwoli na zamienienie np. "Utwórz klienta" na listę aktywności: "Utwórz klienta w systemie X", "Utwórz wpis w Y", "Zmień profil w Z".
Technicznie wpada REST uruchamiający proces biznesowy, którego aktywności przekładają się na wywołania API przykrywanych systemów.
- mapowanie produktów/usług z języka używanego w REST na obiekty znane systemom, które są przykrywane. Tu chyba jest największa trudność, bo chcemy obsłużyć potencjalnie nieograniczony (dynamiczny) zbiór usług/produktów. Przykład takiego produktu (z sufitu, ale ilustrującego ideę "produktów złożonych") - "Ubezpieczenie na życie z Canal+ dostępnym przez 30 dni za free i przeglądem auta do wykorzystania w ciągu 30 dni".
Po tym jak ktoś w systemie klasy CRM sprzeda taki produkt, to trzeba go "włączyć" i pojawia się naturalne pytanie, co to znaczy włączyć ten produkt (które zasoby wykorzystać i jak, które systemy kontrolują zasoby itd.)
Gdzie umieścilibyście informację o mapowaniu produktów/usług i dlaczego? np. adapter dla każdego z systemów, dedykowany katalog produktów/usług (odpowiadający na pytania "jestem systemem X, powiedz mi co to znaczy po mojemu produkt A", "które zasoby mam włączyć dla produktu A"), inne?