Od tématu magazínu k projektové praxi
Vhodné stránky služeb a technické stránky k příspěvku
Mnoho společností dnes stojí před podobnou výchozí situací: dospělá odborná aplikace (často Delphi/VCL) zobrazuje klíčové procesy, ale najednou má obsluhovat nové kanály. Zákaznický portál potřebuje data a průběhy, mobilní uživatelé očekávají bezpečné přístupy, třetí systémy (ERP, DMS, CRM, BI) vyžadují integrace. V takové situaci se REST-API jeví jako logický krok. V praxi však iniciativy API zřídka selhávají kvůli HTTP nebo JSON – selhávají kvůli nejasnému rozdělení odpovědností mezi klientem, serverem a úložištěm dat.
Udržitelná REST-Server-architektura s Delphi nevznikne tím, že se „několik endpointů“ položí nad existující databázové tabulky. Vznikne tehdy, když společnost společně zváží odborná pravidla, bezpečnostní požadavky, nadvládu nad daty, hranice transakcí a provozní koncepty. REST-Server se tak stane stabilní vrstvou smlouvy mezi odbornou logikou a konzumenty: desktopovým klientem, portálem, službami, partnery rozhraní. Právě zde se Delphi uplatní: rychlý vývoj, robustní runtime, výkonný nativní kód, dobré databázové napojení (např. při BDE-náhradě s nativním připojením) a možnost kapslovat odbornou logiku kontrolovaně do knihoven nebo serverových modulů.
Tento článek popisuje, jak společnosti plánují REST-Server s Delphi tak, aby zůstaly odborně konzistentní, zapadly do stávající systémové krajiny a ve provozu se nestaly zdrojem chyb. V centru pozornosti jsou architektonické principy, typické úskalí v modernizačních projektech a konkrétní stavební bloky pro bezpečnost, přístup k datům, verzování a observabilitu.
Proč je REST-API v podniku architektonickým rozhodnutím
V klasickém klient-server světě byla řada pravidel implicitně rozptýlena v desktopovém klientu: validace, přechody stavů, výpočty, částečně i autorizace. Dokud existoval jen jeden klient, nebylo to kritické – odborně nevhodné, ale zvládnutelné. Jakmile na stejná obchodní objekty přistupuje více konzumentů, model se hroutí:
- Portál nemůže „sdílet“ validace provedené klientem.
- Mobilní aplikace mají být offline schopné, ale nesmí duplikovat odborná pravidla.
- Integrace potřebují stabilní, verzované smlouvy a jasnou chybovou sémantiku.
- Compliance vyžaduje auditovatelné přístupy, modely rolí a možnost dohledatelnosti.
API se stává místem, kde se setkávají odborná logika, práva a přístup k datům. Její architektura tedy rozhoduje o tom, zda zůstane váš systém dlouhodobě rozšiřitelný – nebo zda vytvoříte nové technické dluhy.
Delphi jako platforma pro REST-Servery: silné stránky a typické scénáře použití
Delphi je v podnicích často spojováno s desktopovými aplikacemi. Pro REST-Servery je Delphi však také velmi vhodné, obzvlášť když jde o znovupoužití existující odborné logiky nebo o výkonné služby. Typické scénáře v B2B prostředí:
- API vrstva pro stávající software: existující Delphi-odborná aplikace zůstává jako UI, REST-Server kapsuluje přístupy k datům a pravidla pro nové konzumenty.
- Backend pro portál/zákaznickou oblast: webový portál používá REST endpointy, které využívají stejný jádrový soubor pravidel jako interní procesy.
- Integrace a rozhraní: napojení ERP/DMS/CRM, import/export, zpracování událostí, časované úlohy.
- Linux-Services nebo Windows Services: dlouhotrvající procesy, queue-workeři, scheduler, dokumentové workflow.
Rozhodující není tolik popisek frameworku, jako disciplína při vrstvení, souběžnosti, zpracování chyb a nasazení. Delphi umožňuje obojí: rychle dodatelné iterace a zároveň čistou, modulární architekturu – pokud se plánuje uvážlivě.
Schématická vrstva: Layer-3 architektura jako základ pro trvalé API
Pro podnikový software se osvědčil jasný, štíhlý model vrstev. Ve Delphi prostředí se často popisuje jako Layer-3 architektura. Termíny se liší, odpovědnost by však měla být jasná:
1) API-/Transport-Layer (HTTP, serializace, routing)
Tato vrstva se stará o HTTP, autentizaci na úrovni protokolu, formáty request/response, routing, status kódy, Content-Type, kompresi. Sem nepatří odborná pravidla. Cíl: zaměnitelnost a testovatelnost. Pokud později rozšíříte REST-API o doplňkové protokoly (např. WebSocket, gRPC-analogické vzory, Server-Sent Events), musí jádro domény zůstat stabilní.
2) Domain-/Service-Layer (odborná logika, use cases, práva, transakce)
Zde žije odborná pravda: stavové stroje, výpočty, plausibility, pravidla pro nájemce, kontroly práv u odborných akcí. Tato vrstva by měla být nezávislá na UI a pracovat pokud možno bez znalosti HTTP. Ideálně implementujete use cases jako „uvolnit objednávku“, „uzavřít tiket“, „vygenerovat fakturu“ místo pouze CRUD operací nad tabulkami.
3) Data-Access-Layer (repository, SQL, FireDAC, mapování)
Tato vrstva kapsuluje perzistenci: SQL, uložené procedury, řízení transakcí, koncepty zámků, connection-pooling, DB-specifické zvláštnosti. Ve Delphi je BDE-Ablosung mit nativer Anbindung často pragmatickou volbou, zvláště při migracích (BDE-náhradě) a v heterogenních databázích (SQL Server, PostgreSQL, MariaDB, Firebird). Důležité je, aby Data-Access-Layer neměl znalost HTTP a nedělal obchodní rozhodnutí.
Tento model snižuje vazbu: změny datového modelu nevyžadují přepsání API a noví klienti automaticky dědí stejnou logiku. Zejména při Delphi modernizaci je to základ pro postupné oddělování rostoucích desktopových aplikací bez přerušení provozu.
API-design pro podnikový software: ne CRUD, ale odborné smlouvy
Mnoho API začíná endpointy jako /customers, /orders, /documents a implementuje CRUD. To je u interních nástrojů někdy dostačující, v podnikové softwaru je to však rychle příliš povrchní. Odborné procesy se skládají z přechodů stavů, pravidel, vedlejších efektů a oprávnění.
Modelovat zdroje, akce a stavy čistě
Lepší vzor je kombinace zdrojů a jasných akcí, např.:
- Čtení zdroje: GET /orders/{id}
- Vyvolání akce: POST /orders/{id}/release
- Vytvoření dokumentu: POST /orders/{id}/documents/invoice
- Kontrola stavu: GET /orders/{id}/status
Tím se v API smlouvě stane zřejmým, že „uvolnit“ není jen update pole. Server může centrálně realizovat validace, práva, transakce, audit a vedlejší procesy.
Chybová sémantika a validace: udělat klientům plánovatelné
Podnikové klienty musí být schopné rozlišovat chyby: validační chyby (400), chybějící oprávnění (403), konflikt způsobený paralelní změnou (409), odborné odmítnutí (často také 409 nebo 422), dočasné problémy backendu (503). Důležitá je konzistentní chybová struktura, např. s chybovým kódem, zprávou, volitelnými upozorněními na pole a korelačním ID. Tak může portál zobrazit srozumitelné informace a současně podpora a provoz efektivně dohledat příčinu.
Bezpečnost: autentizace není totéž co autorizace
V B2B kontextech bezpečnost zřídka selhává kvůli šifrování, častěji kvůli chybějícímu oddělení identity, rolí a odborných oprávnění. REST-Server architektura proto musí rozlišovat dvě úrovně:
Autentizace (kdo to je?)
Běžné postupy jsou tokenově založené přístupy (např. JWT nebo opaque tokeny) kombinované s TLS a jasnou strategií session. Rozhodující je: životnost tokenu, mechanismus obnovy, blokace při změně rolí a otázka, zda mít pro portály a interní systémy různé identity providery. Delphi-Servery mohou fungovat jako resource-servery i – v závislosti na nastavení – vydávat tokeny. V mnoha podnikových krajinách je integrace do stávajících identitních systémů (např. AD/LDAP, SSO řešení) klíčovým bodem.
Autorizace (smí to dělat?)
Autorizace patří do Domain-/Service-Layeru. Role a práva zřídka bývají čistě technická; závisí na klientovi, lokalitě, organizační jednotce, stavu smlouvy nebo fázi procesu. Dobrá praxe:
- Model rolí (např. Admin, Účetní, Auditor) jako základ
- Odborné politiky („smí vystavit fakturu pouze ve stavu X“, „smí vidět pouze své tikety“)
- Podpora nájemníků jako standard: každý request potřebuje tenant kontext
- Audit: kdo kterou akci kdy vyvolal
API by nemělo jen vracet „přístup povolen/odmítnut“, ale důsledně na serveru zabránit tomu, aby parametrovými triky byly viditelné údaje jiných tenantů. To zní samozřejmě, ale ve zralých systémech je to jeden z nejčastějších architektonických omylů, když se „tabulky dají na HTTP“ příliš rychle.
Přístup k datům s FireDAC: transakce, pooling a databázová strategie
V podnikových aplikacích je přístup k datům faktorem stability: špičky zátěže, deadlocky, dlouhé reporty, paralelní aktualizace, dávkové importy. FireDAC je v Delphi ekosystému osvědčený prvek pro jednotný přístup k různým databázím. Pro REST-Server architekturu jsou zásadní zejména tyto body:
Transakční hranice podle Use Case
REST-API je typicky requestově orientované. To dobře sedí na „transakci na use case“: během requestu se otevře transakce, provedou se odborné operace a pak commit/rollback. Důležité: nebalit automaticky každý endpoint do transakce, ale u zapisujících akcí být konzistentní. Čtecí endpointy mohou podle úrovně izolace také potřebovat transakce, pokud jsou důležité konzistentní pohledy.
Strategie připojení a paralelita
Paralelita serveru znamená: mnoho současných requestů, každý s DB přístupem. Plánujte proto:
- omezené, monitorované velikosti poolu
- time-outy pro dotazy a připojení
- jasná pravidla pro dlouhotrvající operace (vynést do jobů/workerů)
Častou chybou je spouštět náročné reporty nebo exporty synchronně přes tutéž API instanci, která obsluhuje interaktivní portálové požadavky. Lepší je oddělení: interaktivní vs. batch/async.
Modernizace databáze jako součást plánování API
Pokud v sestavě ještě existují starší přístupy k datům (např. BDE), API se stane katalyzátorem: donutí k jasným hranicím přístupu k datům. Kontrolovaná náhrada směrem k FireDAC snižuje rizika a zvyšuje přenositelnost (PostgreSQL, MariaDB, SQL Server). Důležité je neplánovat to jako „Big Bang“, ale krokově: nové serverové use-casy užívají nový Data-Access-Layer, zatímco staré části postupně dojíždějí.
Verzování a zpětná kompatibilita: API smlouvy chrání
Firmy často podceňují, jak drahé jsou breaking changes. Jakmile na vaší API závisí zákaznický portál, partnerský systém nebo Windows-služba, už si nemůžete dovolit „rychle přejmenovat pole“. Proto je čistá verziovací strategie povinnost.
Pragmatická pravidla pro verzování
- Žádné breaking changes bez verze: nepřejmenovávejte/nezřizujte pole, neinterpretujte endpointy jinak.
- Rozšiřovat místo měnit: přidávejte pole, stará označujte jako deprecated.
- Kompatibilní výchozí hodnoty: vyhýbejte se novým povinným polím nebo je odvoďte na serveru.
- Explicitní verzování: např. /v1/… nebo přes hlavičku; důležitější než metoda je důslednost.
Pro Delphi týmy to také znamená: držet DTOs (Data Transfer Objects) stabilní a vědomě mapovat, místo serializovat doménové objekty 1:1. To zvyšuje počáteční náklady, ale dlouhodobě snižuje náklady na podporu.
Observabilita: logy, metriky a trace od začátku plánovat
V produkčním podnikovém provozu je „funguje u mě“ bezcenné, když se chyby nedají reprodukovat. Právě REST-Servery, které slouží mnoha konzumentům, potřebují minimální observabilitu:
Strukturované logování s korelačním ID
Každý request by měl nést korelační ID (převzít příchozí nebo vygenerovat) a to se musí objevit v logu. Záznamy by měly být strukturované (např. JSON-log), aby je bylo možné ingestovat do centrálních systémů. Minimálně relevantní:
- metoda requestu, route, status code, doba trvání
- user-/tenant-kontext (pseudonymizovaný/ve shodě s pravidly)
- trvání DB a třída chyby
- korelační ID pro podporu
Metriky pro kapacitu a chybové trendy
Pro škálování a stabilitu potřebujete metriky: requests za minutu, p95/p99 latence, chybovost na endpoint, zatížení DB poolu, délky front. Nemusí to být „Cloud-Native overkill“, ale bez čísel se diskuze o výkonu změní na názorovou výměnu.
Zpracování chyb a výjimek jako architektonický prvek
Delphi-Exceptions nesmí neřízeně „prosakovat“ ven. Centrální exception-middleware (nebo globální handler) by měl převádět výjimky do konzistentních chybových odpovědí, včetně ID podpory a smysluplných HTTP-kódů. Interně patří stacktracy do zabezpečených logů, nikoli do odpovědí klientovi.
Synchronní vs. asynchronní: vyčlenit dlouhotrvající operace z odpovědi REST
Mnoho podnikových procesů není „request/response do 200 ms“: generování PDF, import dat, běhy rozhraní, porovnávání, hromadné změny, archivace. Tyto pracovní zátěže málokdy patří do synchronního REST endpointu, protože by vázaly vlákna, způsobovaly time-outy a blokovaly uživatele.
Job-pattern
Osvedčený postup: endpoint spustí job a server okamžitě vrátí Job-ID. Jiný endpoint poskytne stav/výsledek. Volitelně může callback/webhook informovat. Ve Delphi to lze realizovat worker-službami, job-tabulkou a jasným stavovým strojem. Výhoda: stabilita a plánovatelné škálování.
Fronty a služby
Podle prostředí může mít smysl message queue, ale nemusí to být nutné. Důležité je princip: interaktivní API zůstávají responzivní, dávkové procesy běží kontrolovaně, opakovatelně a pozorovatelně – jako Windows Services nebo Linux-Services, podle nasazení.
Nasazení v podniku: Windows, Linux, kontejnery, On-Prem
REST-Server architektura je „hotová“ teprve tehdy, když je provozuschopná. Podniky se hodně liší: klasické Windows servery, virtualizované Linux hosty, kontejnerové platformy, přísné síťové zóny, proxy a certifikátové požadavky. Delphi je v tomto směru flexibilní, pokud jsou závislosti pečlivě kontrolovány.
Konfigurace a tajné klíče
Konfigurace musí být závislá na prostředí (Dev/Test/Prod). Přihlašovací údaje nepatří do EXE nebo repozitáře. Použijte bezpečné úložiště (např. secrets-management platformy) a oddělte hodnoty konfigurace od vydání kódu. Plánujte také rotace (DB hesla, API klíče) tak, aby nebylo nutné systém znovu sestavovat.
Strategie releasu a rollbacku
Když k API připojuje více konzumentů, potřebujete kontrolované releasy: migrace DB schémat, feature-toggles pro postupné aktivování, jasné rollback cesty. Zejména změny v databázi musí být zpětně kompatibilní, pokud má být možný rollback verze serveru.
Integrace se stávajícím software: postupná modernizace místo Big Bang
V mnoha Delphi krajinách je odborné jádro hodnotné, ale technicky „slepé“: UI-napojené přístupy k datům, globální stavy, smíšené odpovědnosti. REST-API může být zároveň rizikem i příležitostí. Cílem by měla být cesta, která za rozumné náklady přinese měřitelné zlepšení.
Strangler-approach pro API
Místo všeho přestavět definujte odborné rozhraní, které přináší reálný užitek: např. „stav objednávky a dokumenty pro zákaznický portál“, „lookup master dat pro mobilní uživatele“, „rozhraní pro ERP účtování“. Tyto use cases implementujte jako nové API funkce včetně Domain-Layeru a Data-Accessu. Starý klient se může postupně přepínat na stejné serverové use-casy, aniž by bylo nutné UI ihned přebudovat.
Sdílená odborná logika: smysluplně, ale kontrolovaně
Delphi umožňuje využití odborných knihoven jak v serveru, tak v existujících aplikacích. To může sloužit jako most, ale nese to rizika: pokud se do sdílené logiky vsákne UI-závislost, ztratíte oddělení. Jednoznačné pravidlo pomůže: sdílená logika smí být pouze bez UI, bez globálních stavů, s jasnými rozhraními a testovatelnými jednotkami. Vše ostatní zůstává oddělené.
Typické chyby v REST-Server projektech – a jak se jim vyhnout
„Prostě publikujeme tabulky“
Pokud endpointy přímo zrcadlí tabulky, vznikne nestabilní systém: každé refaktoring DB je breaking change API, odborná pravidla se duplikují v klientech a riziko bezpečnostních mezer kvůli neověřeným parametrům roste. Lepší: domain-use-casy a DTOs, které smlouvu stabilizují.
Odborná oprávnění jen v klientu
Klienti jsou vyměnitelní a manipulovatelní. Autorizace patří na server a musí zohlednit odborná pravidla, nejen technické role.
Chybějící strategie pro souběžnost
Paralelní aktualizace se dějí: dva pracovníci, portál a interní klient, nebo importní job. Bez optimistic locking (např. RowVersion/Timestamp), kódů konfliktu (409) a jasných pravidel pro merge vznikají ztráty dat nebo chyby typu „poslední píše vyhrává“.
Dlouhotrvající úlohy blokují interaktivní endpointy
Synchronní generování PDF nebo exporty vedou k time-outům a zážitkům „zaseklo se“. Lepší je job-pattern se status endpointy.
Observabilita je přidávána dodatečně
Bez korelačního ID, strukturovaných logů a metrik se každé narušení změní v pátrání. Pozorovatelnost není luxus, ale podmínka provozu.
Konkrétní kontrolní seznam pro vaši REST-Server architekturu s Delphi
- Jasné oddělení vrstev: transport (HTTP), doména (use cases), data access (FireDAC/SQL).
- API chápat jako smlouvu: držte DTOs stabilní, plánujte verzování, vyhýbejte se breaking changes.
- Bezpečnost ve dvou krocích: autentizace (token) plus autorizace (odborné politiky, tenant).
- Transakce vědomě nastavit: podle use case, time-outy, strategie konfliktů.
- Dlouhotrvající úlohy asynchronně: joby/worker, Windows- nebo Linux-services.
- Vnést observabilitu: korelační ID, strukturované logy, metriky, centrální zpracování chyb.
- Nasazení realisticky naplánovat: konfigurace/secrety, rollback, migrace databáze.
- Modernizace iterativně: hodnotné use cases první, staré části postupně oddělovat.
Závěr: REST-Servery rozvinou hodnotu teprve jako provozní a odborná architektura
REST-Server architektura s Delphi přináší firmě největší efekt tehdy, když není vnímána jen jako „technické rozhraní“, ale jako spojující jádro mezi procesy, daty a kanály. Rozhodující jsou čisté vrstvy (Layer-3 architektura), odborně modelované endpointy, důsledná bezpečnostní a tenant logika a provozní model s verzováním, monitoringem a kontrolovanou souběžností. Tím se API stává stabilní platformou: pro portály, integrace, služby a postupnou Delphi modernizaci – aniž by byla ohrožena odborná substance vyrostlého systému.
Pokud chcete prověřit, jak postavit zatížitelnou REST-API nad vaší existující Delphi krajinou (včetně databázové strategie, FireDAC, služeb a provozu), kontaktujte nás zde: https://net-base-software-gmbh.de/kontakt/
další krok
Když se z tématu stane reálný projekt, měly by být architektura, stávající systém a provoz posuzovány společně již v rané fázi.
Podporujeme nejen při jednotlivých otázkách, ale i v případě, že se z útržků zdrojového kódu, legacy témat nebo nápadů na portál má vyvinout robustní podnikový projekt.
- Současný stav, cílový stav a technická rizika jsou hodnoceny společně.
- REST, přístup k datům, portály a rollout nebudou přesunuty do pozdějších fází.
- Včas zjistíte, která varianta je ekonomicky i provozně životaschopná.