Od tematu magazynowego do praktyki projektowej
Pasujące strony usługowe i techniczne do artykułu
Video-Botschaft
Tworzenie serwera REST w Delphi: architektura, bezpieczeństwo i eksploatacja w praktyce
Kurz erklärt, warum bei Delphi-REST-Servern nicht der erste funktionierende Endpunkt zählt, sondern Architektur, Security und Betrieb: konsistente Fehler, Authentifizierung, Logging/Monitoring und sauberes Deployment für Windows und Linux.
Video mit KI erstellt
Transkript anzeigen
Hallo, ich bin Mark. Der erste funktionierende REST-Endpunkt ist oft der Anfang der Probleme, nicht das Ende.
Im Beitrag „REST-Server mit Delphi entwickeln: Architektur, Sicherheit und Betrieb in der Praxis“ geht es genau darum. In Unternehmen scheitern APIs selten an Delphi oder am Framework.
Sie scheitern an Betrieb: uneinheitliche Fehler, fehlende Zeitlimits, unklare Zuständigkeiten. Und an Sicherheit: Authentifizierung, also wer sich ausweist, und Autorisierung, also was jemand darf.
Wichtig ist eine klare Trennung: vorne HTTP und Validierung, in der Mitte die Fachlogik, hinten Datenzugriff. Dazu gehören Logging und Monitoring, damit Sie Störungen nachvollziehen, bevor Nutzer Tickets schreiben.
Wenn Sie dazu Fragen haben, klären wir gern die typischen Stolperstellen aus der Praxis.
Kto chce opracować REST-Server w Delphi, rzadko robi to jako cel sam w sobie. Zwykle chodzi o solidne interfejsy między ugruntowanymi systemami, portalami, usługami i bazami danych — z jasnymi wymaganiami dotyczącymi eksploatacji, bezpieczeństwa i utrzymania. Istotne nie jest, jak szybko odpowie pierwszy endpoint, lecz czy usługa pozostaje stabilna w codziennej eksploatacji: zrozumiałe wzorce błędów, kontrolowane dostępy do danych, poprawna autoryzacja, klarowne przypisanie odpowiedzialności w architekturze oraz deployment pasujący do środowisk Windows i Linux.
Delphi jest w wielu organizacjach podejściem pragmatycznym: istniejąca logika biznesowa może być dalej wykorzystywana, wydajność zwykle wystarcza, a istnieje kilka dróg do wdrożenia API opartych na HTTP. W praktyce opcje różnią się mniej pod kątem „czy potrafi REST”, a bardziej przezroczystością i obsługą w eksploatacji: jak konsekwentnie wdrożyć logowanie, timeouty, reguły reverse-proxy, wersjonowanie, dokumentację OpenAPI i mechanizmy bezpieczeństwa?
Ten artykuł klasyfikuje najważniejsze podejścia Delphi i pokazuje, na co powinny zwracać uwagę IT-management, administratorzy i techniczne osoby odpowiedzialne za projekty: od projektowania API przez security i BDE-zastąpienie z natywnym dostępem do danych, po observability (logi, metryki, tracing) i deployment jako Windows- lub Windows- i Linux-usługi. Celem jest solidna podstawa integracji z ERP, DMS, CRM czy portalami klientów — bez stawiania wnętrza frameworków w centrum uwagi.
Kiedy REST-Server w Delphi ma szczególny sens
Backend Delphi-REST często ma sens, gdy Delphi jest już zakorzeniony w firmie lub gdy logika domenowa i dostęp do danych mają być ponownie użyte z aplikacji istniejących. Typowe sytuacje B2B:
- Umożliwienie API dla oprogramowania istniejącego: Aplikacja VCL lub rdzeń klient-serwer otrzymuje warstwę REST, żeby portale, systemy zewnętrzne lub usługi wewnętrzne mogły uzyskiwać do nich ustandaryzowany dostęp.
- Integracja i odseparowanie: Wielu konsumentów (desktop, portal webowy, batch, partnerzy) ma korzystać z tych samych procesów biznesowych bez bezpośrednich dostępów do bazy danych czy wymiany plików.
- Modernizacja etapami: Najpierw wprowadzić stabilne API, potem stopniowo przebudowywać UI, moduły lub bazę danych. API staje się kontrolowaną granicą i ogranicza skutki uboczne.
- Eksploatacja i bezpieczeństwo: API oparte na HTTP łatwo obsługiwać za reverse proxy, centralnie uwierzytelniać i integrować z monitoringiem.
Ważne jest nastawienie: REST to interfejs integracyjny, nie zamiennik spójności domenowej. Kto zaczyna bez jasnego modelu domeny, zdefiniowanych granic transakcji lub jednoznacznej odpowiedzialności za dane, szybko stworzy API, które co prawda jest dostępne, lecz długoterminowo kosztowne w utrzymaniu i wsparciu.
REST-Server w Delphi: przegląd opcji
Delphi oferuje kilka dróg do usługi REST. Dla decydentów ważniejsze nie jest „co jest nowoczesne”, lecz: jak dobrze pasuje do struktury zespołu, modelu operacyjnego, oczekiwanej długości życia systemu i wymagań zgodności?
Delphi WebBroker: szczupły, przejrzysty, dobrze kontrolowalny
WebBroker to ugruntowany framework Delphi dla aplikacji HTTP. Jest blisko protokołu (request/response), dzięki czemu jest dobrze zrozumiały i atrakcyjny w wielu scenariuszach B2B, gdzie ważne są kontrolowana obsługa błędów, poprawne przetwarzanie nagłówków i przejrzysty stack. WebBroker zwykle dobrze działa za reverse proxy, które terminują TLS i wdraża centralne reguły bezpieczeństwa.
Konsekwencja w praktyce: wiele funkcji komfortowych (konwencje routingu, łańcuchy middleware, utrzymanie OpenAPI) należy ustrukturyzowanie dodać ręcznie. To nie wada, jeśli standardy architektoniczne i tak stoją na pierwszym miejscu.
Delphi Horse: routing i middleware dla jasnych standardów API
Delphi Horse jest lekki i opiera się na zrozumiałym routingu oraz zasadzie middleware. Middleware to powtarzalne kroki przetwarzania „wokół” endpointu, np. uwierzytelnianie, logowanie, ograniczenia przepustowości czy walidacja żądań. Dla wielu zespołów to produktywne podejście, ponieważ standardy można wymuszać centralnie.
Dla eksploatacji ważne jest wczesne zdefiniowanie jednego formatu błędu, timeoutów, maksymalnych rozmiarów requestu oraz standardu logowania. Bez tych reguł system pozostanie wprawdzie funkcjonalny, ale stanie się niepotrzebnie kosztowny w utrzymaniu i rozbudowie.
RAD Server: podejście platformowe z zintegrowanymi komponentami
RAD Server (dawniej EMS) ma charakter platformowy z funkcjami takimi jak zarządzanie użytkownikami i innymi wbudowanymi komponentami. Może to pasować tam, gdzie wielu klientów korzysta z jednego backendu i gdzie funkcje platformy są wykorzystywane celowo. Dla czystych API integracyjnych nie jest to automatycznie najlepszy wybór; tu często ważniejsza jest przejrzystość, niskie zależności i szczupły model operacyjny.
DataSnap: realistycznie ocenić istniejące instalacje
DataSnap jest historycznie obecny w wielu środowiskach Delphi i potrafi wystawiać endpointy przypominające HTTP/REST. Dla nowych przedsięwzięć warto jednak sprawdzić, czy pasuje do planowanego stylu API, do uwierzytelniania (np. JWT), do OpenAPI/Swagger i do współczesnych wymagań operacyjnych. Często pragmatyczna ścieżka to: dalej używać istniejącej logiki wewnętrznie, ale na zewnątrz wystawić klarowną warstwę REST wymuszającą standardy bezpieczeństwa, logowania i wersjonowania.
Architektura, która udźwignie eksploatację i utrzymanie
Typowy błąd w projektach REST to „handler robi wszystko”: parametry HTTP są wczytywane, bezpośrednio składane jest SQL, implementowane są reguły biznesowe i równocześnie doklejane logi. To działa szybko na początku, ale prowadzi do kodu trudnego do testowania i podatnego na destabilizujące zmiany.
W środowiskach korporacyjnych sprawdza się jasne warstwowanie. Popularna, pragmatyczna struktura to Layer-3-architektura (trzy warstwy), która rozdziela odpowiedzialności:
Warstwa transportu: HTTP, auth, walidacja, format odpowiedzi
Tutaj przyjmowany jest request, wykonywana podstawowa walidacja i generowany spójny format odpowiedzi. Do tej warstwy należą też uwierzytelnianie i autoryzacja (kto może co), oraz reguły techniczne takie jak limity requestów, CORS czy przydzielanie Correlation-ID (unikatowe ID dla każdego zapytania do śledzenia).
Warstwa domenowa: przypadki użycia zamiast logiki endpointu
Domena kapsułuje procesy biznesowe jak „utwórz zamówienie”, „zmień status” czy „powiąż dokument”. Kluczowe: ta logika powinna być możliwie niezależna od frameworku HTTP. Wtedy ta sama domena może być używana także przez Windows- i Linux-usługi, demon Linux lub zadanie batchowe, bez duplikowania logiki.
Persistencja i integracja: FireDAC, baza danych, ERP/DMS/SMTP
Ta warstwa skupia dostęp do baz danych i systemów zewnętrznych. Dla Delphi standardowym stakiem dostępu do danych jest BDE-Ablosung mit nativer Anbindung, aby czysto podłączyć PostgreSQL, SQL Server, MariaDB/MySQL czy Firebird. Ważne jest nie tylko „używać FireDAC”, ale mieć wiążące reguły: obsługa połączeń, granice transakcji, timeouty, wiązanie parametrów, tłumaczenie błędów technicznych na kody błędów API oraz jednolite strategie retry tam, gdzie mają sens biznesowy.
API-Design: stabilne przez lata, nie tylko do Go-live
W środowiskach B2B API jest interfejsem utrzymywanym przez długi czas. Kluczowe pojęcie to kompatybilność: konsumenci polegają na polach, kodach statusu i semantyce. Im wyraźniej zdefiniowane reguły, tym mniej pracy przy integracji, wsparciu i wydaniach.
Zasoby i ścieżki: konsekwencja przed kreatywnością
Stabilne API są zwykle zorientowane na zasoby: „/customers“, „/orders/123“, „/orders/123/items“. Akcje procesowe można modelować jako podzasoby lub jasno uzasadnione endpointy akcyjne, np. „/orders/123/cancel“, jeśli czysty model CRUD nie pasuje do domeny. Kluczowe jest jednolite konwencjonowanie, udokumentowane i stosowane w całym zespole.
Metody HTTP i kody statusu: jasne sygnały dla konsumentów
API jest łatwiej integrowalne, gdy stosuje przewidywalną semantykę HTTP: GET do odczytu, POST do tworzenia, PUT/PATCH do modyfikacji, DELETE do usuwania. Równie ważne jest spójne zachowanie przy błędach. Przydatne w eksploatacji jest ustandaryzowane obiekt błędu zawierający:
- HTTP-Status (np. 400, 401, 403, 404, 409, 422, 500)
- stabilny kod błędu (maszynowo czytelny, udokumentowany)
- Correlation-ID (do szybkiego powiązania w logach)
- opcjonalne szczegóły (np. błędy pól przy walidacji)
Częsty problem to odpowiedzi „200 OK“ z tekstem błędu w body. Utrudnia to integracje i prowadzi do podatnej na błędy logiki po stronie klienta.
Wersjonowanie i kompatybilne rozszerzanie
Wersjonowanie to problem procesu i komunikacji, nie tylko techniki. Typowe podejścia to wersjonowanie w URL (np. „/api/v1“) lub w nagłówkach. Jednak w wielu firmach najważniejsza zasada to: rozszerzać kompatybilnie. Dodawanie nowych pól zwykle nie jest krytyczne. Usuwanie lub zmiana znaczenia pól wymaga nowej wersji i jasno komunikowanego okna migracyjnego. To zmniejsza przerwy w integracjach i pozwala planować wydania.
Bezpieczeństwo: uwierzytelnianie, autoryzacja, powierzchnie ataku
Usługa REST to potencjalne wejście ataku. Wiele problemów bezpieczeństwa nie wynika z braku szyfrowania, lecz z drobnych błędów: zbyt szerokich uprawnień, zbyt długich okresów ważności tokenów, niezabezpieczonych endpointów administracyjnych, niekontrolowanych reguł CORS czy logów zawierających dane wrażliwe.
TLS i Reverse Proxy: jasne odpowiedzialności w sieci
W typowych konfiguracjach TLS terminowany jest na reverse proxy (np. Nginx, Apache lub Microsoft IIS jako reverse proxy). Usługa Delphi działa wewnętrznie na HTTP i jest dostępna tylko z sieci wewnętrznej. Istotne są przejrzyste reguły dla „X-Forwarded-For“ i „X-Forwarded-Proto“, aby poprawnie interpretować IP klienta i protokół. Te informacje są istotne dla audytu, rate limiting i diagnozy błędów.
JWT, API-Keys i SSO: co pasuje w praktyce
Dla integracji system-do-systemu powszechne są API-Keys lub mechanizmy client-credentials. Dla dostępu użytkowników w kontekście korporacyjnym często praktyczne są JWT (JSON Web Token) w połączeniu z centralnym Identity Provider (np. OIDC). W środowiskach SSO istotne może być także SAML 2.0 (standard single sign-on, zwykle między portalem/gateway a Identity Provider).
Niezależnie od wyboru należy zdefiniować:
- rotację kluczy i certyfikatów (jak odnawiane są podpisy?)
- role/scopes (jakie uprawnienia obowiązują dla których endpointów?)
- zarządzanie tenantami (jak wymuszana jest prawidłowa przypisanie Tenanta?)
- audit-logging (kto kiedy wywołał jaką akcję biznesową?)
Walidacja wejścia, CORS i rate limiting
Walidacja wejścia powinna być wielowarstwowa: składniowa (typy danych, struktura JSON), domenowa (zakresy wartości, przejścia statusów) i bezpieczeństwa (nazwy plików, ścieżki, nagłówki). Dla klientów przeglądarkowych istotny jest CORS (reguły, które originy i nagłówki są dozwolone). CORS powinien być skonfigurowany restrykcyjnie. Rate Limiting chroni przed nadużyciami i skokami obciążenia; często realizuje się go na reverse proxy i uzupełnia limitami po stronie serwera (maksymalny rozmiar body, timeouty, ograniczona równoległość).
FireDAC i dostęp do bazy: stabilność przez reguły
W backendach REST dostęp do bazy danych często determinuje opóźnienia i stabilność. FireDAC daje techniczne możliwości, ale bezpieczeństwo operacyjne powstaje przez wytyczne.
Obsługa połączeń i współbieżność
Klasyczny błąd to globalne współdzielone połączenie do bazy, używane równolegle przez wiele requestów. W REST-Server z równoległym przetwarzaniem (wątki/workerzy) trzeba jasno rozumieć, które obiekty są thread-safe, a które nie. W praktyce oznacza to: zarządzanie połączeniami i obiektami zapytań per request lub per unit-of-work albo kontrolowane poolowanie, zależnie od modelu serwera. To zmniejsza deadlocki, sporadyczne błędy i problemy trudne do reprodukcji.
Transakcje zgodnie z przypadkami użycia
Transakcje należą do domeny: przypadek użycia decyduje, co musi być atomowe. Często „jeden request = jedna transakcja” jest sensowny, ale nie zawsze. Endpoints tylko do odczytu często nie wymagają jawnej transakcji, podczas gdy zapisy wymagają spójnych zmian w wielu tabelach. Przy integracjach z systemami zewnętrznymi (ERP, DMS, webhooks) rozproszone transakcje są zwykle nierealistyczne; pomocna jest jasna kolejność operacji i logika kompensacyjna (jak naprawić częściowy sukces?).
Timeouty, backpressure i kontrolowane awarie
Bez timeoutów żądania, wątki i połączenia DB się blokują. Dlatego ustawiaj timeouty na poziomie HTTP i DB. Uzupełniająco ważny jest mechanizm backpressure: ograniczanie równoległości i długości kolejek, aby system pod obciążeniem mógł kontrolowanie reagować 503 (Service Unavailable), zamiast upadać wskutek wyczerpania zasobów. Dla operacji lepszy jest szybki, jasny komunikat błędu niż kilkuminutowe zawieszenie.
Payloady, DTO i długoterminowa kompatybilność
JSON jest standardem, ale interoperacyjność zależy od detali: format daty/czasu, strefy czasowe, wartości null, reprezentacja liczb dziesiętnych, nazwy pól i kodowanie. Ustal standard (np. ISO-8601 w UTC) i konsekwentnie go utrzymuj.
DTO zamiast publikowania struktur bazy
DTO (Data Transfer Objects) to modele danych API zoptymalizowane do wymiany. Nie powinny po prostu odzwierciedlać tabel bazy danych. Dzięki temu unikniesz sytuacji, w której wewnętrzne zmiany schematu natychmiast łamią API. Dodatkowo możesz kontrolować, które pola wewnętrzne nie trafiają na zewnątrz (np. flagi, kolumny audytu) i jak później refaktoryzować wewnętrznie bez narażania integracji.
Idempotencja i retry
W sieciach korporacyjnych timeouty i ponawiania są normą. Zdefiniuj, które operacje są idempotentne (wielokrotne wykonanie daje ten sam efekt) i jak unikać podwójnych POST-ów, np. przez Idempotency-Key dla wybranych operacji zapisu. To redukuje duplikaty, niespójne stany i zgłoszenia do wsparcia.
Dokumentacja i testy: OpenAPI jako wspólna baza pracy
API w B2B rzadko jest używane tylko przez jeden zespół. OpenAPI (Swagger) jest praktycznym językiem współpracy, ponieważ specyfikacje można automatyzować: generowanie klienta, mockowanie, testy kontraktowe i porównywanie zmian między wersjami. Nawet jeśli stack Delphi nie generuje wszystkiego automatycznie, warto utrzymywać specyfikację jako centralny artefakt.
Pragmatyczne pokrycie testami, które obniża koszty operacyjne
Rozsądna struktura testów dla usług REST zwykle składa się z trzech warstw:
- Unit-tests dla logiki domenowej (bez HTTP, bez bazy danych)
- Testy integracyjne dla dostępu do danych i zachowania transakcji (z bazą testową i odtwarzalnymi danymi seed)
- Testy API/kontraktowe przeciw działającej usłudze (kody statusu, auth, formaty błędów, wersjonowanie)
Dla administratorów i zespołów operacyjnych kluczowe jest: testy muszą być odtwarzalne i nie mogą zależeć od środowisk deweloperskich. Im bliżej docelowego deploymentu jest środowisko testowe, tym mniejsze ryzyko niespodzianek po aktualizacjach.
Deployment i eksploatacja: Windows-usługa, Linux-usługa, kontenery
REST-Server uznaje się za „gotowy” dopiero wtedy, gdy można go stabilnie prowadzić: zachowanie start/stop, rotacja logów, aktualizacje, uprawnienia, otwarte porty, certyfikaty, monitoring i jasne możliwości rollbacku.
Windows- i Linux-usługi: sprawdzone modele operacyjne
W środowiskach Windows operacja jako Windows- und Linux-Services jest często naturalna, ponieważ mechanizmy startu, recovery, praw i monitoringu są dostępne. W świecie Linux zwykle używa się systemd-demonów (systemd jako standardowy menedżer usług), które kontrolują polityki restartu, integrację logów i kolejność startu. Dla obu światów: reverse proxy przed usługą upraszcza TLS, polityki nagłówków, rate limiting i routing.
Kontenery: odtwarzalne, ale tylko przy wyraźnym rozdziale stanu
Kontenery mogą ujednolicić deploymenty i przyspieszyć rolloutu. Warunkiem jest jasne oddzielenie stanu: baza danych na zewnątrz, pliki w wolumenach, sekrety przez manager sekretów. Bez tej dyscypliny powstają trudne w utrzymaniu stany mieszane, które ujawniają się przy awariach lub przy odtwarzaniu.
Konfiguracja: przejrzysta, oddzielona środowiskowo, bez sekretów w repo
Spójny model konfiguracji pomaga: oddzielne ustawienia dla Dev/Test/Prod, centralna definicja poziomów logowania, danych połączeń do DB, timeoutów, dozwolonych originów i kluczy tokenów. Dane wrażliwe nie należą do repozytorium źródłowego. Dla audytów i operacji ważne jest, by zmiany konfiguracji były śledzone i mogły być kontrolowanie wdrażane.
Observability: logi, metryki i tracing jako warunek operacyjny
Gdy integracje zawodzą, zespół operacyjny potrzebuje odpowiedzi: które endpointy są dotknięte, od kiedy, z jakim wskaźnikiem błędów i która zależność działa wolno? Bez observability każda awaria staje się detektywistycznym śledztwem.
Strukturalne logowanie i Correlation-IDs
Strukturalne logowanie (key/value lub JSON) umożliwia analizę narzędziami i ułatwia filtrowanie po endpointach, tenancy, kodzie błędu czy Correlation-ID. Każde żądanie powinno otrzymać Correlation-ID, zwrócone też w nagłówku odpowiedzi. Dane wrażliwe, jak hasła, tokeny czy dane osobowe, nie powinny trafiać do logów; pomocne są maskowanie, hashowanie lub specjalne debug-logi w odizolowanych środowiskach.
Metryki dla pojemności i stabilności
Sprawdzone metryki to często: rate żądań, opóźnienia (np. p95/p99), wskaźniki błędów per endpoint, czasy DB, liczba aktywnych workerów/wątków, obciążenie połączeń i długości kolejek. Te wartości stanowią podstawę planowania pojemności i pomagają wykrywać narastające problemy (brak indeksów, nowe zależności, nieoptymalne ścieżki zapytań).
Ścieżka modernizacji: REST jako stabilna granica dla ugruntowanych systemów Delphi
W wielu środowiskach Delphi API REST nie jest ostatecznym celem, lecz elementem stabilizacji i modernizacji. Sprawdzona, niskoryzykowna strategia to podejście etapowe:
- Priorytetyzacja przypadków użycia: które funkcje muszą być dostępne na zewnątrz (dane referencyjne, zmiany statusu, dostęp do dokumentów, zatwierdzenia)?
- Ustalenie standardów API: auth, format błędów, wersjonowanie, logowanie, timeouty, rate limits, OpenAPI.
- Ekstrakcja domeny: strukturyzacja logiki biznesowej tak, by nie była powiązana z UI czy pojedynczymi endpointami.
- Konsolidacja dostępu do danych: zasady FireDAC, koncepcja transakcji, baseliney wydajności, polityki zapytań.
- Stopniowe przełączanie konsumentów: desktop, portale i inne usługi zaczynają korzystać z API; bezpośrednie dostępy do bazy są redukowane.
Efekt to system, który można rozwijać etapami: moduły można wymieniać bez niekontrolowanego wpływu na wszystkich klientów.
Typowe pułapki w projektach B2B-REST
Niektóre wzorce błędów pojawiają się regularnie i są łatwe do uniknięcia dzięki jasnym regułom:
- Niespójne formaty błędów: utrudniają wsparcie i integrację. Rozwiązanie: ustandaryzowany obiekt błędu ze stabilnymi kodami.
- Security jako dodatek: role, multi-tenancy i audyt są dopisywane „później”. Rozwiązanie: zaprojektować je jako podstawę, nie improwizować per endpoint.
- Brak limitów: brak ograniczeń body, timeoutów i granic równoległości prowadzi do awarii pod obciążeniem. Rozwiązanie: reverse proxy plus backpressure po stronie serwera.
- Baza zbyt mocno związana z API: każda zmiana schematu łamie konsumentów. Rozwiązanie: DTO i jasno zdefiniowane przypadki użycia.
- Za mała obserwowalność: problemy są niemierzalne. Rozwiązanie: Correlation-IDs, strukturalne logi, kluczowe metryki.
Wniosek: REST z Delphi to odpowiedzialność za interfejs i eksploatację
Rozwój REST-Servera w Delphi w środowiskach korporacyjnych jest trwały i skuteczny, gdy architektura i eksploatacja są planowane od początku razem. Wybór frameworku (WebBroker, Horse, RAD Server lub migracja z DataSnap) ma znaczenie, ale nie jest największym dźwignią. Różnicę robią jasne standardy dla projektowania API, uwierzytelniania, obsługi błędów, wersjonowania, dostępu do danych FireDAC, timeoutów oraz observability i deployment jako Windows- lub Linux-usługa. W ten sposób interfejs staje się stabilnym elementem integracyjnym, który umożliwia modernizację, zamiast ją blokować.
W kontekście merytorycznym Delphi REST-API i Delphi REST-API und REST-Server odgrywają ważną rolę, gdy integracje, przepływy danych i dalszy rozwój muszą ze sobą współgrać.
Omówić projekt lub przedsięwzięcie modernizacyjne z Net-Base.
Następny krok
Gdy temat stanie się rzeczywistym projektem, architekturę, stan istniejący i eksploatację należy wcześnie rozpatrywać wspólnie.
Wspieramy nie tylko w pojedynczych zagadnieniach, lecz także wtedy, gdy z fragmentów kodu źródłowego, kwestii związanych z systemami legacy lub koncepcji portalu ma powstać solidny projekt dla przedsiębiorstwa.
- Stan istniejący, obraz docelowy i ryzyka techniczne są oceniane łącznie.
- REST, dostęp do danych, portale i Rollout nie są odkładane na później.
- Wcześnie widzą Państwo, która droga jest ekonomicznie opłacalna i operacyjnie wykonalna.