Fra magasinetema til prosjektpraksis
Egnede tjeneste- og tekniske sider for innlegget
Video-Botschaft
Utvikle REST-server med Delphi: arkitektur, sikkerhet og drift i praksis
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.
Feilantagelsen oppstår ofte rett før Projektstart — Architektur & Zusammenarbeit: „Wir müssen nur schnell einen REST-Server mit Delphi entwickeln. Ein paar Endpunkte, etwas JSON – das ist doch überschaubar.“ Det høres ut som et klart, lite arbeidsoppdrag. Det blir som regel dyrt først etter go-live, når integrasjoner «sporadisk» feiler, oppdrag dukker opp dobbelt eller Reverse Proxy er grønn i overvåkingen, mens fagavdelingen allerede er blokkert.
REST virker enkelt fordi den første forespørselen raskt gir et svar. I digitale virksomhetsløsninger teller ikke den første forespørselen, men driften etter den tiende releasen: stabil semantikk, sikker autorisering, kontrollert lastatferd og diagnoseevne når flere systemer er involvert. Delphi kan være en praktisk plattform for dette. Prisen er ikke «mer programmering», men flere beslutninger som må tas tidlig og forpliktende – som en grensesnittavtale, ikke som en lekeplass for rammeverk.
Denne feil-sjekken undersøker hva som er for enkelt ved påstanden «raskt ferdig», hvor det finnes rimelige unntak og hvordan dere kan utlede en konkret fremgangsmåte av det. Fokus ligger på arkitektur- og driftskonsekvenser: sikkerhet, data, stabilitet i grensesnitt, utrulling og support.
Feil-sjekk: „Velg rammeverk, bygg endepunkter, ferdig“
I mange team starter diskusjonen med WebBroker, DataSnap, RAD Server eller slanke REST-rammeverk. Dette valget er viktig – men sjelden kjernen. Kjernen er om dere låser tverrgående temaer så fast at ikke hvert endepunkt senere utvikler sitt eget regelverk.
Fra drift- og adminperspektiv skaper særlig fem temaer arbeid og risiko: autentisering/autorisering, feilformat og statuskoder, versjonering/utrangering, timeouts/lastbeskyttelse samt Observability (strukturert logging, metrikker, valgfritt tracing). Mangler disse retningslinjene, oppstår en samling individuelle endepunkter som i testen «på en eller annen måte» fungerer, men som er vanskelige å styre i drift.
Et produsentdokument om DataSnap viser at Delphi leverer strukturer for opprettelse av REST-servere og samtidig adresserer autentisering/autorisering som en tiltenkt funksjon.[Kilde] Det avklarer gjennomførbarheten. Grensen står fortsatt: Det gir ikke et driftskonsept. Praktisk konsekvens: Bruk gjerne wizards og biblioteker for oppstarten, men planlegg sikkerhet, feilstandarder, begrensninger og overvåking som egne, testbare arbeidspakker.
Å utvikle REST-server med Delphi: Hvilken teknisk beslutning som virkelig teller
For IT-ledelse og prosjektansvarlige er det avgjørende hvor godt atferd og drift kan kontrolleres: Kan dere gjengi Reverse-Proxy-detaljer presist? Kan tverrgående regler håndheves sentralt? Er oppgraderingsveien planbar? Og: Kan systemet driftes med de ferdighetene som faktisk finnes i organisasjonen?
WebBroker: nær HTTP-modellen, godt for kontrollerbar atferd
WebBroker holder seg tett til protokollen (Request/Response, Header, Statuskoder). Det er ofte en fordel i bedriftsdrift, fordi dere får kontroll på detaljer: timeouts, header-behandling, innholdsbegrensninger og feilsvar. Prisen er disiplin: ruting, feilkapslinger, autentiseringskontroller og logging må konsekvent standardiseres – ellers oppstår fragmentering på tvers av endepunkter.
Middleware-tilnærminger (f.eks. Delphi Horse): håndhev standarder sentralt
Middleware betyr: tilbakevendende steg kjøres sentralt, ikke i hvert endepunkt. Det støtter governance: autentisering, Correlation-ID, strukturerte logger, rate-limits eller request-validering implementeres én gang og er deretter «ikke forhandlingsbare». I drift er det viktig at middleware ikke blir en blackbox. Ved en incident må det være synlig om en forespørsel feiler i autentisering, validering, routing eller forretningslogikk – og hvordan dette fremkommer i loggen.
RAD Server: mer plattformlivssyklus enn „bare REST“
RAD Server er mindre et «lite REST-prosjekt», og mer et plattformvalg. Det kan være fornuftig hvis dere bevisst vil drifte et miljø med dets byggeklosser og eget livssyklus. For et slankt integrasjonslag kan en lettere stack på lang sikt gi mindre binding. Avgjørende er om organisasjonen kan bære plattformvedlikeholdet (oppdateringer, security-patches, driftskunnskap) permanent.
DataSnap: ta hensyn til eksisterende komponenter, vurder nyutvikling nøkternt
DataSnap er ofte til stede i modne Delphi-landskap. Embarcadero-papiret dokumenterer den grunnleggende REST-server-opprettelsen og de tiltenkte sikkerhetsfunksjonene.[Kilde] For nyutvikling gjelder likevel: passer tilnærmingen til deres standarder (OpenAPI som kontraktsartefakt, versjonering, observability, reverse-proxy-oppsett, reproduserbar deploy)? Hvis dere må bygge tilleggslag for dette, er det ikke et eksklusjonskriterium – men det må inn i estimeringen, ikke i håpet.
Den praktisk relevante unntakssituasjonen: Når «raskt et endepunkt» likevel fungerer
Det finnes reelle situasjoner med tidspress: utskifting av en filgrensesnitt, pilot for en portal, partnerintegrasjon med en fast deadline. Unntaket fungerer når «raskt» ikke betyr «uten standarder». Minimal betyr da: et grunnsett av regler som gjelder fra dag 1 og som ikke må opereres ut senere.
API-design som driftsdisiplin: feil, versjonering, idempotens
Mange REST-prosjekter feiler ikke på manglende funksjon, men på uklar semantikk. To systemer kan tolke samme JSON-struktur forskjellig. I testmiljøer oppdages dette sjelden, fordi vanligvis en consumer testes mot en server – ikke et landskap bestående av portal, ERP/CRM, batch, dokumentarkiv og eksterne partnere.
Feilbilder: stabil og maskinlesbar i stedet for kreativ
I drift er det avgjørende at feil kan analyseres automatisk. En klient må skille mellom: autentisering mislyktes (401/403), konflikt (409), validering (ofte 422), ressurs ikke funnet (404), serverfeil (5xx). For support og drift trengs en Correlation-ID for å koble forespørsel og backend-aktiviteter. Standardiserer dere dette, reduseres diagnostiseringstiden merkbart: mindre «det virker ikke», mer «feilkode X på endepunkt Y med Correlation-ID Z».
Versjonering: endringsstyring, ikke bare URL-design
Versjonering er i virksomhetsmiljøer først og fremst en organisatorisk prosess. Teknisk sett er URL-versjonering (f.eks. /api/v1) ofte enklest å håndtere, fordi reverse-proxy, routing, dokumentasjon og brannmurregler forblir klare. Viktigere enn skjemaet er regelen: utvide bakoverkompatibelt (legg til nye felt, ikke omdefinere eksisterende semantikk) og håndtere breaking changes kun med et deprekeringsvindu, tydelig migreringsstøtte og bruksdata per endepunkt. Uten bruksdata blir deprekasjon et blindflyv.
Idempotens: den usynlige forsikringen mot gjenforsøk
Nettverk får tidsavbrudd. Klienter prøver igjen. Load Balancer bryter forbindelser. Uten en idempotensstrategi oppstår doble faglige hendelser – ofte uten synlig feil. Avhjelp kan være Idempotency-Keys for utvalgte POST-use-cases eller faglig duplikatdeteksjon (f.eks. ekstern bilagsnummer, kombinasjon av oppdragsgiver + referanse). Hvilken variant som passer, avhenger av prosessen. Helt uten regelverk gjenstår en risiko som vanligvis først blir synlig under reell last og faktiske feil.
Arkitekturkonsekvenser: Skille lagene slik at endringer forblir planbare
Et REST-endepunkt er transportlogikk, ikke domenet. Når begge blandes, blir enhver endring i grensesnittet en risiko for forretningslogikken – og enhver endring i forretningsreglene en risiko for integrasjonene. For langlivede forretningssystemer er et skille som også lar seg forklare i drift hensiktsmessig:
- Transport-lag: HTTP, Auth, Validering, Svar-/Feilformat, Correlation-ID.
- Domenelag: faglige Use-Cases (statusendringer, godkjenninger, bokføringer), regler, transaksjonsgrenser.
- Persistens/Integrasjon: databaseaksess (f.eks. BDE-Abløsning med native tilkobling), eksterne systemer (ERP, DMS, e-post, Queue/Broker).
Dette er ingen akademisk øvelse. Det avgjør om du senere kan koble til en andre consumer uten å duplisere logikk. Og det avgjør om sikkerhets- og loggingregler kan holdes sentralt eller spres ut per endepunkt.
Sikkerhet i reelle oppsett: Reverse Proxy, TLS, Tokens, Audit
En REST-service utvider angripsoverflaten fordi prosesser og data blir tilgjengelig over HTTP. Vanlige problemer er ikke «manglende TLS», men detaljer: feil tolket klient-IP, for vide rettigheter, for lange token-løpetider, ukontrollerte CORS-regler eller logger som avslører mer enn nødvendig.
TLS ved Reverse Proxy: Avklar ansvar og header-regler
I mange miljøer termineres TLS (Transport Layer Security) ved reverse proxy, for eksempel nginx eller en Load Balancer. Det forenkler sertifikatstyring og sentrale policyer. Da må applikasjonen korrekt identifisere det opprinnelige protokoll- og klient-IP. Hvis Forwarded-Header (Forwarded eller X-Forwarded-*) evalueres ukontrollert, svekkes sikkerhets- og supportfunksjoner: rate limiting, audit-analyser og IP-baserte regler blir upålitelige eller utsatt for angrep. Praktisk konsekvens: Definer hvilken proxy-sti du anser som betrodd, og behandle headere fra utsiden som potensielt manipulerte.
JWT, API-Keys, SSO: avgjørende er livssyklusen
JWT (JSON Web Token) er et utbredt tokenformat, ofte brukt i OIDC-oppsett (OpenID Connect, standard basert på OAuth2). API-nøkler er vanlige i system-til-system-integrasjoner, så lenge rotasjon, deaktivering og scope er ryddig regulert. I begge tilfeller avgjør driften: Hvor ligger Secrets? Hvordan roterer nøkler uten nedetid? Hvordan tilbakekaller du tilgang ved en incident? Og hvordan kontrollerer du roller/scopes slik at rettigheter ikke «ved et uhell» vokser?
En Net-Base-temaside plasserer REST-servere som et koblingslag som skal modellere regler som roller, godkjenninger/Approvals, validering og statusendringer – ikke som ren CRUD-datavidereformidling.[Quelle] Det treffer kjernen: Hvis API-en din utløser faglige handlinger, trenger du autorisasjon på use-case-nivå (ikke bare «brukeren er innlogget») samt revisjonsinformasjon (hvem, når, hvilken handling), slik at prosesser kan etterprøves ved tvist.
Revisjon og personvern: logg færre brukerdata, logg mer kontekst
For support og etterlevelse er det sjelden nødvendig å logge komplette brukerdata. Mer nyttig er kontekst: Correlation-ID, tenant/Client, identitet (User eller Service), endepunkt, statuskode, latenstid, feilkode. Sensitive innhold (Tokens, personopplysninger, dokumenter) hører ikke i standardloggen. Hvis debug-logging er nødvendig, bør den være tidsbegrenset, tydelig frikoblet/aktivert og organisatorisk sikret.
Datazugriff (z. B. FireDAC): Stabilität entsteht durch Leitplanken
I mange REST-tjenester er databasen flaskehalsen – og samtidig komponenten som i en incident er vanskeligst å «se». BDE-Ablosung mit nativer Anbindung er som dataadgangslag utbredt i Delphi. Om driften forblir stabil avgjøres ikke av navnet, men av samspillet mellom parallellitet, tilkoblingshåndtering, transaksjonsgrenser og grenseverdier.
Tilkoblinger og parallellitet: keine global geteilten Objekte
En REST-server behandler forespørsler parallelt. Hvis tilkoblinger eller query-objekter deles ukontrollert, oppstår sporadiske feil, deadlocks eller inkonsistente resultater som i test knapt lar seg reprodusere. Definer hvordan en Unit of Work per request ser ut: tilkoblingens levetid, transaksjonsgrenser, korrekt frigivelse. Hvis pooling brukes, trengs det grenser – ellers vinner lasten over ressursene.
Transaktionen nach Use-Case, nicht nach Tabellen
«Ein Request = eine Transaktion» er ofte fornuftig, men ikke universelt. Leseoperasjoner trenger ofte ingen eksplisitt transaksjon, mens skrivende use-cases krever klar atomisitet. Når eksterne systemer er involvert (DMS-Upload, ERP-Aufruf, Webhook), er distribuerte transaksjoner sjelden realistiske. Da trenger du rekkefølge, klar feilklassifikasjon (retryable vs. ikke retryable) og eventuelt kompensasjonslogikk, i stedet for å satse på «wird schon gut gehen».
Timeouts und Backpressure: kontrolliert scheitern statt hängen
Uten timeouts bygger forespørsler, tråder og DB-tilkoblinger seg opp. Sett timeouts på HTTP- og DB-nivå og begrens parallellitet. Backpressure betyr: systemet tar ikke imot uendelig mange samtidige oppgaver, men signaliserer kontrollert overbelastning (typisk 503). I drift er dette nesten alltid bedre enn en smygende totalstans som bare ved omstart «forsvinner».
Vergleich: Entscheidungen, die Support und Betrieb spürbar verändern
| Beslutning | Typisk «rask» tilnærming | Driftssikker variant | Konsekvens i praksis |
|---|---|---|---|
| Feilhåndtering | Fritekst/Exceptions, varierende statuskoder | Standard feilobjekt + stabile koder + Correlation-ID | Raskere diagnostikk, bedre ticket-kvalitet, mindre gjetting |
| Authentifizierung | Én nøkkel for alt, rotasjon „senere“ | Scopes/roller, rotasjon/tilbakekall som prosess, korte levetider der mulig | Incident-respons blir mulig, rettigheter vokser mindre ukontrollert |
| Datamodell | Tabeller 1:1 som JSON | DTOer med stabil semantikk, internt frakoblet | DB-migrasjoner bryter integrasjoner sjeldnere, endringer blir mer planbare |
| Lastatferd | Ingen begrensninger, „kjører i test“ | Forespørselsgrenser, timeouts, begrensede workere/køer | Under belastning degraderer tjenesten kontrollert i stedet for å falle helt ut |
| Observability | Bare tekstlogger, ingen metrikker | Strukturerte logger, metrikker (latens/feil/DB-tid), klare dashbord | Årsaker blir raskere synlige, On-Call blir mer håndterbart |
Konkret fremgangsmåte: Slik blir REST-tjenesten operativ og «ekte» innen 30–60 dager
Rekkefølgen er valgt slik at det tidlig oppstår en stabil kontrakt og et driftbart grunnlag, selv om faglogikken fortsatt vokser. Disse trinnene avhenger ikke av en spesifikk Delphi-REST-teknologi, men av deres driftsrealitet.
- Fastsett grensesnittkontrakt: ressurser, statuskoder, feilobjekt, dato-/tidsformat, paginerings-/filterkonvensjoner, maksimale payload-størrelser.
- Definer sikkerhetsgrunnlag: autentiseringsmetoder, roller/scopes, token-/nøkkelrotasjon, validering av leietaker (tenant), CORS-regler (hvis nettleserklienter), revisjonshendelser.
- Etabler reverse-proxy- og nettverksregler: TLS-terminering, håndtering av Forwarded-Header, ratebegrensning, WAF-regler (dersom tilgjengelig), intern tilgjengelighet kun fra definerte nett.
- Retningslinjer for dataadgang: Unit-of-Work/transaksjonsregler, DB-timeouts, parameterbinding, grenseverdier for parallellitet, strategi for deadlocks/timeouts.
- Implementer Observability: Correlation-ID end-to-end, strukturerte logger, metrikker (f.eks. latens, feilrate, DB-tider), Health-Checks.
- Standardiser Runbook og Deployment: Windows- und Linux-Services eller systemd, restart-policy, log-rotasjon, konfigurasjonskilder, rollback, avhengigheter (DB, secrets, proxy).
- Pilotdrift med kanttilfeller: timeout-simulering, belastningstopper, token-utløp, DB-restart, proxy-restart, planlagte vedlikeholdsvinduer inkludert kommunikasjonsvei.
Rollout-realitet: Windows, Linux, containere – og hvor begrensningene ligger
En REST-tjeneste er først leveringsklar når den kan rulles ut og tilbake på en repeterbar måte. Under Windows er drift som Windows-tjeneste ofte nærliggende (recovery, starttype, rettighetskonsept). Under Linux er systemd standarden (Restart-Policies, Logging, Startreihenfolge). Containere kan forenkle deploys, men bare hvis dere skiller state tydelig: database eksternt, filer i volumer, secrets via secret-management. Ellers flytter dere problemene til et annet format.
En grense bør man navngi åpent: Hvis det i virksomheten ikke finnes en robust containerdriftsmodell (registry, image-scanning, secrets, observability, nettverk), reduserer ikke „vi containeriserer alt“ automatisk risiko. VM-er pluss reverse proxy og en godt definert tjenesteadministrasjon er ofte et bedre mellomsteg, inntil plattformkompetanse er bygget opp.
Forbered vekst uten å overbygge
Mange REST-tjenester starter som en integrasjonsbro og blir senere det sentrale API-laget mellom portal, ERP/CRM, DMS og partnere. To forberedelser koster lite i starten, men sparer senere diskusjoner og brudd:
- OpenAPI som felles artefakt: ikke som pynt, men som kontrakt for konsumenter, tester og diffs mellom versjoner.
- API-governance i liten skala: deprecation-regler, bruksmetrikker per endepunkt, tydelig ansvarlighet og en „Definition of Done“ for produksjonstilknytninger.
Dermed blir „REST“ fra et raskt integrasjonshack til et driftbart grensesnitt som i hverdagen ikke trenger konstant særbehandling.
Myten bryter sammen i drift – der må dere ta tak
Påstanden „REST er raskt gjort“ lever fordi et første endepunkt svarer raskt. Nytten oppstår først når supporttilfeller kan klassifiseres tydelig, endringer ikke bryter integrasjonene, tokens og secrets kan roteres og lasttopper ikke fører til stopp. Da blir „HTTP+JSON“ et pålitelig tilkoblingslag.
Delphi er verken risiko eller fribillett. Det er en verktøykasse som kan passe godt i etablerte virksomhetslandskap – særlig når faglogikk og dataadgang allerede finnes i eksisterende systemer og et REST-lag gjør denne logikken tilgjengelig for portaler og integrasjoner.[Quelle] Avgjørende er om dere setter opp tjenesten som en kontrakt med driftsansvar og ikke henger etter med tverrgående temaer til „senere“.
Hvis dere ønsker å strukturere krav, driftsmodell og sikkerhetsrammeverk for REST-integrasjoner eller modernisering av et eksisterende Delphi-landskap, er en kort scoping-samtale ofte den raskeste veien til robuste beslutninger.
Kilder og ytterligere informasjon
De faglige kjerneuttalelsene er redaksjonelt vurdert basert på følgende eksterne kilder.
- REST Servers in Delphi XE Using DataSnap (www.embarcadero.com)
Delphi/DataSnap gir strukturer for opprettelse av REST-servere og inneholder funksjoner som autentisering/autorisering, men er ikke et fullstendig driftsmodell i seg selv. - Net-Base-consulting-gmbh.de (Net-Base-consulting-gmbh.de)
REST-servere forstås som et tilkoblingslag som ikke bare leverer data, men også avbilder regler som roller, godkjenninger/validering og statusendringer. - Enterprise software with Delphi and C# | Net-Base (net-base-software-gmbh.de)
Net-Base posisjonerer seg blant annet med Delphi/C# for bedriftsprogramvare inkludert REST-servere og tjenestelandskap, uten å hevde konkrete prosjekttall.
For dette temaet er også Delphi REST-API og REST-Server og Delphi REST-API viktige. Artikkelen setter disse aspektene i en forståelig kontekst og viser hva som er viktig i praksis.
Diskuter prosjekt eller moderniseringsprosjekt med Net-Base.
Neste trinn
Når et tema blir et reelt prosjekt, bør arkitektur, eksisterende systemer og drift vurderes samlet allerede tidlig i prosessen.
Vi bistår ikke bare med enkeltspørsmål, men også når kodesnutter, legacy-temaer eller portalideer skal utvikles til et robust virksomhetsprosjekt.
- Eksisterende tilstand, målbildet og tekniske risikoer vurderes samlet.
- REST, datatilgang, portaler og utrulling blir ikke utsatt som etterfølgende oppgaver.
- Dere ser tidlig hvilken vei som er økonomisk og driftsmessig levedyktig.