Frå magasinetema til prosjektpraksis
Passande teneste- og tekniske sider til innlegget
Video-Botschaft
Utvikle REST-server med Delphi: Arkitektur, tryggleik 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.
Den som vil utvikle ein REST-server med Delphi, følgjer i verksemder sjeldan eit mål i seg sjølv. Oftast handlar det om robuste grensesnitt mellom etablerte system, portar, tenester og databasar – med tydelege krav til drift, tryggleik og vedlikehald. Avgjerande er ikkje kor raskt ein første endepunkt svarar, men om tenesta held stabilt i kvardagen: etterprøvbare feilmønster, kontrollerte dataåtkomst, ryddig autentisering, klare ansvarsgrenser i arkitekturen og eit deployment som passar for Windows- og Linux-miljø.
Delphi er i mange organisasjonar pragmatisk: eksisterande faglogikk kan vidarebrukast, ytelsen er vanlegvis tilstrekkeleg, og det finst fleire vegar å realisere HTTP-baserte API-ar. I praksis skil alternativene seg mindre i «kan REST», og meir i transparens og drift: Kor konsistent kan logging, timeouts, reverse-proxy-reglar, versjonshandtering, OpenAPI-dokumentasjon og sikkerheitsmekanismar implementerast?
Denne artikkelen plasserer dei viktigaste Delphi-tilnærmingane og viser kva IT-leiing, administratorar og tekniske prosjektansvarlege bør vere merksame på: frå API-design over security og BDE-avløysing med nativer tilkopling-dataåtkomst til observability (loggar, målarar, tracing) og deployment som Windows- eller Windows- og Linux-tenester. Målet er eit robust grunnlag for integrasjonar mot ERP, DMS, CRM eller kundeportal – utan å sette rammeverket i sentrum.
Når det løner seg spesielt å bygge ein REST-server i Delphi
Eit Delphi-REST-backend er ofte fornuftig når Delphi alt er forankra i verksemda, eller når faglogikk og dataåtkomst frå eksisterande applikasjonar skal nyttast vidare. Typiske B2B-situasjonar:
- Gjer bestandsprogramvare API-kompatibel: Ein VCL-applikasjon eller ein klient-server-kjerne får eit REST-lag, slik at portalar, eksterne system eller interne tenester kan aksessere standardisert.
- Integrasjon og løysing av avhengigheit: Flera forbrukarar (desktop, web-portal, batch, partnarar) skal nytte same forretningsprosessar utan direkte databaseåtkomst eller filgrensesnitt.
- Modernisering i steg: Først innfør ein stabil API, deretter UI, modul eller database trinnvis. API-en blir ei kontrollert avgrensing og reduserer bivirkningar.
- Drift og sikkerheit: HTTP-API-ar er enkle å drifte bak reverse proxy, kan sentralt autentiserast og integrerast i overvakarstakkar.
Viktig er forventningsstyring: REST er eit integrasjonslag, ikkje ein erstatning for fagleg konsistens. Den som startar utan eit klart domenemodell, definerte transaksjonsgrenser eller entydig dataeigar, byggjer fort ein API som er tilgjengeleg, men som på sikt blir kostbar å vedlikehalde og supportere.
REST-serverar med Delphi: oversikt over alternativ
Delphi tilbyr fleire vegar til ein REST-teneste. For beslutningstakarar er spørsmålet mindre «kva er moderne», og meir: Kor godt passar det til teamstruktur, driftsmodell, levetid og krav til compliance?
Delphi WebBroker: slankt, transparent, godt å kontrollere
WebBroker er eit etablert Delphi-rammeverk for HTTP-applikasjonar. Det er nært protokollen (request/response), noko som gjer det lett å følgje og attraktivt i mange B2B-scenario der kontrollert feilhandtering, korrekt header-handtering og ein oversiktleg stack er viktig. WebBroker passar ofte godt bak ein reverse proxy som terminerer TLS og handhevar sentrale sikkerheitsreglar.
Konsekvens for praksis: Mange komfortfunksjonar (routing-konvensjonar, middleware-kjeder, OpenAPI-vedlikehald) må de tilføre på ein strukturert måte. Det er ingen ulempe når arkitekturstandardar elles står i fokus.
Delphi Horse: routing og middleware for klare API-standardar
Delphi Horse er lettvekts og byggjer på tydeleg routing pluss eit middleware-prinsipp. Middleware viser til gjenbrukbare behandlingssteg «rundt» endepunktet, til dømes autentisering, logging, rate limits eller request-validering. Dette er ofte ein produktiv tilnærming for team, fordi standardar kan handhevast sentralt.
Viktig for drift: Definer tidleg eit einheitleg feilformat, timeouts, maksimal request-størrelse og ein logging-standard. Utan slike reglar held systemet fram med å fungere, men blir unødig krevjande å supportere og vidareutvikle.
RAD Server: plattformtilnærming med integrerte byggjeelement
RAD Server (tidlegare EMS) følgjer ofte ein plattformstrategi med integrerte funksjonar som brukarhandtering og andre byggjeklossar. Det kan passe i scenario der fleire klientar delar eit backend og plattformfunksjonane er hensiktsmessige. For reine integrasjons-API-ar er det ikkje nødvendigvis det beste valet; der veg vektinga ofte mot transparens, låg grad av avhengighet og eit slankt driftsoppsett.
DataSnap: vurder eksisterande installasjonar realistisk
DataSnap finst historisk i mange Delphi-miljø og kan tilby HTTP/REST-liknande endepunkt. For nye prosjekt bør ein vurdere om det passar til planlagd API-stil, autentisering (t.d. JWT), OpenAPI/Swagger og moderne driftskrav. Ein pragmatisk veg er ofte å vidarebruke eksisterande logikk, men eksponere ein tydeleg REST-API-skjerm som pålegg standardar for sikkerheit, logging og versjonshandtering.
Arkitektur som held i drift og vedlikehald
Eit vanleg feilgrep i REST-prosjekt er «handler gjer alt»: HTTP-parameter blir lese, SQL blir bygd direkte, forretningsreglar implementerte og logging lagt på samtidig. Det fungerer raskt i starten, men fører til dårleg testbar kode og ustabile endringar.
I bedriftsmiljø lønner det seg med klar lagdeling. Ein vanleg, pragmatisk struktur er ein Layer-3-arkitektur (tre lag) som skil ansvarsområde:
Transport-laget: HTTP, auth, validering, svardata
Her blir requesten tatt imot, grunnleggjande validering utført og eit konsekvent svardataformat produsert. Dette laget inneheld òg autentisering og autorisasjon (kven har kva rettar) samt tekniske reglar som request-limiter, CORS eller tildeling av korrelasjons-IDar (entydige ID-ar per førespurnad for sporing).
Domene-laget: faglege brukstilfelle i staden for endepunktlogikk
Domene-laget kapslar inn faglege prosessar som «opprett bestilling», «endre status» eller «knytt dokument». Avgjerande: Denne logikken bør vere så uavhengig som mogleg frå HTTP-rammeverket. Då kan same domene nyttast av ein Windows- og Linux-teneste, ein Linux-daemon eller ein batch-prosess utan å duplisere logikk.
Persistens og integrasjon: FireDAC, database, ERP/DMS/SMTP
Dette laget samlar tilgang til databasar og eksterne system. For Delphi er BDE-Ablosung mit nativer Anbindung den vanlege dataåtkomst-stacken for å koble PostgreSQL, SQL Server, MariaDB/MySQL eller Firebird på ein stabil måte. Viktigare enn «bruk FireDAC» er bindande reglar: connection-handtering, transaksjonsgrenser, timeouts, parameterbinding, omsetjing av tekniske feil til API-feilkodar og einheitlege retry-strategiar der det fagleg gir meining.
API-design: stabilt over år, ikkje berre til go-live
I B2B-miljø er ein API eit vedvarande grensesnitt. Nøkkelomgrep er kompatibilitet: Forbrukarar stoler på felt, statuskodar og semantikk. Jo klårare desse reglane er definert, desto mindre kostnad blir det i integrasjon, support og release.
Ressursar og vegar: konsistens framfor kreativitet
Stabile API-ar er vanlegvis ressursorienterte: «/customers», «/orders/123», «/orders/123/items». Prosesshandlingar kan representerast som sub-ressursar eller klart grunna aksjons-endepunkt, til dømes «/orders/123/cancel» når eit reint CRUD-modell ikkje passar fagleg. Avgjerande er ein einskapleg konvensjon som blir dokumentert og nytta i heile teamet.
HTTP-metodar og statuskodar: tydelege signal til forbrukarane
Ein API er lett å integrere når han nyttar forventa HTTP-semantikk: GET for lesetilgang, POST for oppretting, PUT/PATCH for endringar, DELETE for sletting. Like viktig er eit konsekvent feilbilete. For drift er det nyttig med eit standardisert feilobjekt som inneheld:
- HTTP-status (t.d. 400, 401, 403, 404, 409, 422, 500)
- stabil feilkode (maskinlesbar, dokumentert)
- korrelasjons-ID (for rask kobling i loggar)
- valfrie detaljar (t.d. feltfeil ved validering)
Eit vanleg fallgruve er «200 OK»-svar med feilmelding i kroppen. Det kompliserer integrasjonar og fører til feilutsatt klientlogikk.
Versjonshandtering og kompatibel utviding
Versjonering er eit prosess- og kommunikasjonsproblem, ikkje berre teknikk. Vanlege tilnærmingar er URL-versjonering (t.d. «/api/v1») eller header-basert versjonering. I mange verksemder er likevel viktigaste prinsippet: utsjåande utviding. Å legge til nye felt er som regel uproblemisk. Å fjerne eller endre tyding av felt krev ny versjon og eit klart kommunisert migrasjonsvindauge. Det reduserer integrasjonsbrot og gjer releases planbare.
Sikkerheit: autentisering, autorisasjon, angrepsflater
Ein REST-teneste er eit potensielt innslagspunkt. Mange tryggleiksproblem kjem ikkje av manglande kryptering, men av detaljfeil: for vide åtkomstrettar, for lange token-løpetider, uhalda admin-endepunkt, ukontrollerte CORS-reglar eller loggar med sensitive data.
TLS og reverse proxy: klare ansvarsgrenser i nettverket
I typiske oppsett terminerer TLS ved reverse proxy (t.d. Nginx, Apache eller Microsoft IIS som reverse proxy). Delphi-tenesta køyrer internt på HTTP og er berre tilgjengeleg frå internt nett. Viktig er ryddige reglar for «X-Forwarded-For» og «X-Forwarded-Proto» slik at klient-IP og protokoll blir korrekt tolka. Desse opplysningane er relevante for revisjon, rate limiting og feilsøking.
JWT, API-Keys og SSO: kva som passar i praksis
For system-til-system-integrasjonar er API-Keys eller client-credentials-mekanismar vanlege. For brukaråtkomst i bedriftskontekstar er JWT (JSON Web Token) kombinert med ein sentral Identity Provider (t.d. OIDC) ofte praktisk. I SSO-landskap kan òg SAML 2.0 vere relevant (ein standard for Single Sign-on, vanlegvis mellom portal/gateway og identity provider).
Uansett løysing bør de definere:
- Nøkkel- og sertifikatsrotasjon (korleis blir signaturar fornye?)
- Roller/scopes (kva rettar gjeld for kva endepunkt?)
- Tenantstøtte (korleis tvingast korrekt tenant-tilordning?)
- Audit-logging (kven utførte kva faglege handlingar og når?)
Input-validering, CORS og rate limiting
Input-validering bør skje på fleire nivå: syntaktisk (datatypar, JSON-struktur), fagleg (verdiområde, statusovergangar) og tryggleiksrelevant (filnamn, stiar, header). For nettlesarklientar blir CORS viktig (reglar for kva origins og header som er tillatne). CORS bør konfigurerast restriktivt. Rate Limiting vernar mot misbruk og lastspikar; det blir ofte implementert i reverse proxy og supplert med server-side grenser (maksimal body-storleik, timeouts, avgrensa parallellitet).
FireDAC og databaseåtkomst: stabilitet kjem gjennom reglar
I REST-backendar er databaseåtkomst ofte den dominerande faktoren for latenstid og stabilitet. FireDAC gjev dei tekniske moglegheitene, men driftssikkerheit kjem ved retningslinjer.
Connection-handtering og samtidighet
Eit klassisk feilgrep er ei global delt databaseforbindelse som blir brukt parallelt av fleire requests. I ein REST-server med parallell handsaming (trådar/workerar) må det vere klart kva objekt som er trådtrygge og kva som ikkje er det. I praksis tyder det: handter tilkoplingar og query-objekt per request eller per unit-of-work, eller bruk kontrollert pooling avhengig av servermodell. Det reduserer deadlocks, sporadiske feil og vanskeleg reproducerbare problem.
Transaksjonar langs brukstilfelle
Transaksjonar høyrer heime i domenet: Eit brukstilfelle avgjer kva som skal vere atomisk. Oftast er «ein request = ein transaksjon» fornuftig, men ikkje alltid. Read-only endepunkt treng ofte ikkje eksplisitt transaksjon, medan skrivande prosessar må endre fleire tabellar konsistent. Ved eksterne integrasjonar (ERP, DMS, webhooks) er distribuerte transaksjonar som regel urealistiske; der hjelpar tydelege rekkjefølgjer og kompensasjonslogikk (korleis reingjer ein delvis suksess?).
Timeouts, backpressure og kontrollerte feilhendingar
Utan timeouts byggjer førespurnader, trådar og DB-tilkoplingar seg opp. Set derfor timeouts på HTTP- og DB-nivå. I tillegg er backpressure viktig: begrens parallellitet og kølengder slik at systemet under last kan svare kontrollert med 503 (Service Unavailable) i staden for å gå tom for ressursar og falle saman. For drift er eit raskt, tydeleg feilmønster betre enn minuttlange hengingar.
Payloads, DTO-ar og langsiktig kompatibilitet
JSON er standard, men interoperabilitet kjem gjennom detaljar: dato-/tidsformat, tidssone, null-verdiar, desimalrepresentasjon, feltnamn og koding. Fastlegg ein standard (t.d. ISO-8601 i UTC) og hald han konsekvent.
DTO-ar i staden for database-strukturar
DTO-ar (Data Transfer Objects) er API-datamodellar som er optimaliserte for utveksling. Dei bør ikkje spegle databastabellar direkte. Slik unngår de at interne skjemaendringar umiddelbart bryt API-et. Samstundes styrer de kva interne felt som ikkje skal eksponerast (t.d. flagg, audit-kolonnar) og korleis de seinare kan refaktorere internt utan å risikere integrasjonar.
Idempotens og retry-mekanismar
I bedriftsnettverk er timeouts og retry vanleg. Definer kva operasjonar som er idempotente (flergangsutføring gir same resultat) og korleis doble POST-ar kan unngåast, til dømes med idempotency-key for bestemte skriv-operasjonar. Det reduserer duplikat, inkonsistente tilstandar og supporttilfelle.
Dokumentasjon og testing: OpenAPI som felles arbeidsgrunnlag
Ein API blir sjeldan brukt av berre eitt team i B2B. OpenAPI (Swagger) er eit praktisk felles språk fordi spesifikasjonar kan automatiserast: klientgenerering, mocking, contract-tests og differensiering mellom versjonar. Selv om Delphi-stakken ikkje alltid genererer alt automatisk, er ein vedlikehalden spesifikasjon eit sentralt artefakt.
Pragmatisk testdekning som reduserer driftkostnader
Ei fornuftig teststruktur for REST-tenester består gjerne av tre nivå:
- Unit-testar for domenelogikk (utan HTTP, utan database)
- Integrasjonstestar for dataåtkomst og transaksjonsatferd (med testdatabase og reproducerbare seed-data)
- API-/contract-testar mot ein køyrande teneste (statuskodar, auth, feilformat, versjonering)
For administratorar og driftsteam tel først og fremst: Testane må vere reproduiserbare og ikkje avhenge av utviklarmiljø. Jo meir testmiljøet liknar det faktiske deploymentet, desto lågare er risikoen for overraskingar etter oppdateringar.
Deployment og drift: Windows-teneste, Linux-teneste, container
Ein REST-server blir i praksis først «ferdig» når han kan driftast stabilt: start/stop-oppførsel, log-rotasjon, oppdateringar, rettigheiter, portopning, sertifikat, overvaking og klare moglegheiter for rollback.
Windows- og Linux-tenester: etablerte driftsmodellar
Under Windows er drift som ein Windows-teneste ofte nærliggjande, fordi mekanismar for starttype, recovery, rettigheiter og overvaking finst. Under Linux blir det ofte nytta ein systemd-teneste (systemd er standard service-manager) som kontrollerer restart-policyar, logging-tilkopling og startrekkjefølgje. For begge verdener gjeld: Ein reverse proxy framfor tenesta forenklar TLS, header-policyar, rate limits og routing.
Container: reproducerbart, men berre med ryddig state-separasjon
Containerar kan standardisere deployment og fremskunde rollouts. Føresetnaden er ein tydeleg separasjon av state: database eksternt, filer i volum, løysingar for secret-management. Uten denne disiplinen oppstår vanskeleg vedlikehaldne blandingstilstandar som synest ved driftsfeil eller ved restore-scenarier.
Konfigurasjon: etterprøvbar, miljødelt, utan secrets i repo
Eit konsekvent konfigurasjonsmønster hjelper: eigne innstillingar for dev/test/prod, sentral definisjon av log-nivå, DB-tilkoplingsdata, timeouts, tillatne origins og token-nøklar. Sensitive verdiar høyrer ikkje i kildekoderepoet. For revisjon og drift er det viktig at konfigurasjonsendringar er etterprøvbare og kan rullast ut kontrollert.
Observability: loggar, målarar og tracing som føresetnad for drift
Når integrasjonar stansar, treng drift svar: Kva endepunkt er påverka, sidan når, med kva feilsats, og kva avhengnad er treig? Uten observability blir kvar feil til manuell detektivarbeid.
Strukturert logging og korrelasjons-IDar
Strukturert logging (key/value eller JSON) gir moglegheit for analyse med verktøy og forenklar filtrering etter endepunkt, tenant, feilkode eller korrelasjons-ID. Kvar førespurnad bør få ei korrelasjons-ID som òg blir returnert i response-header. Sensitive data som passord, token eller persondata bør ikkje loggast; maskering, hashing eller særskild debug-logging i avgrensa miljø hjelper her.
Målarar for kapasitet og stabilitet
Praktisk beviste målarar er request-rate, latenstid (t.d. p95/p99), feilsats per endepunkt, DB-tider, tal aktive worker/trådar, connection-utnytting og kølengder. Desse verdiane er grunnlag for kapasitetplanlegging og hjelper å oppdage gradvise problem (manglande indeksar, nye avhengnadar, uheldige spørringsmønster).
Moderniseringsveg: REST som stabil grense for forvokste Delphi-system
I mange Delphi-landskap er REST-API-en ikkje endetilstanden, men eit stabilitets- og moderniseringsbyggjelement. Ein låg-ambisjons, låg-risk tilnærming er trinnvis:
- Prioriter brukstilfelle: Kva funksjonar må vere tilgjengelege eksternt (masterdata, statusendringar, dokumenttilgong, godkjenningar)?
- Fastlegg API-standardar: Auth, feilformat, versjonering, logging, timeouts, rate limits, OpenAPI.
- Trekk ut domenet: Strukturér faglogikk slik at han ikkje er bundet til UI eller einskilde endepunkt.
- Konsolider dataåtkomst: FireDAC-reglar, transaksjonskonsept, ytelses-baselines, query-policyar.
- Bytt over forbrukarar trinnvis: Desktop, portal og andre tenester nyttar API-et; direkte DB-tilgang blir redusert.
Resultatet er eit system som kan vidareutviklast i etappar: modulane kan fornyeast utan at endringar spreier seg ukontrollert til alle klientar.
Typiske fallgruver i B2B-REST-prosjekt
Eit par feilmønster går igjen og er enkle å unngå med klare reglar:
- Ikkje-einskaplege feilformat: Support og integrasjon blir unødig vanskeleg. Løysing: standardisert feilobjekt med stabile feilkodar.
- Sikkerheit som etterarbeid: Roller, tenantstøtte og audit blir «lagt til seinare». Løysing: planlegg det som grunnstruktur, ikkje improviser per endepunkt.
- Manglande grenser: ingen body-limiter, timeouts eller parallellitetsgrenser fører til svikt under last. Løysing: reverse proxy pluss server-side backpressure.
- Database for tett kopla til API-et: kvar skjemaendring bryt forbrukar. Løysing: DTO-ar og klart definerte brukstilfelle.
- For lågt nivå av observability: problem kan ikkje målast. Løysing: korrelasjons-IDar, strukturert logging, kjerne-målarar.
Konklusjon: REST med Delphi krev ansvar for grensesnitt og drift
Å utvikle ein REST-server med Delphi blir i bedriftsmiljø varig vellukka når arkitektur og drift planleggast saman frå start. Valet av rammeverk (WebBroker, Horse, RAD Server eller ein migrasjonsveg frå DataSnap) er relevant, men ikkje den største effektoren. Det som utgjer skilnaden, er klare standardar for API-design, autentisering, feilhandtering, versjonering, FireDAC-dataåtkomst, timeouts samt observability og deployment som Windows- eller Linux-teneste. Slik blir ei grensesnittløysing ein stabil integrasjonsbyggjestokk som legg til rette for modernisering i staden for å hindre henne.
I det faglege landskapet spelar òg Delphi REST-API og Delphi REST-API und REST-server ei viktig rolle når integrasjonar, dataflyt og vidareutvikling skal spele saman på ein ryddig måte.
Prosjekt eller moderniseringsprosjekt diskutere med Net-Base.
Neste steg
Når temaet blir eit reelt prosjekt, bør arkitektur, eksisterande system og drift vurderast tidleg saman.
Vi støttar ikkje berre ved enkeltspørsmål, men òg når korte kildekodesnuttar, legacy-tema eller portalidéar skal utviklast til eit robust bedriftsprosjekt.
- Eksisterande tilstand, målbiletet og tekniske risikoar blir vurderast samla.
- REST, datatilgang, portalar og utrulling blir ikkje utsette til seinare som etterverknader.
- De ser tidleg kva veg som er økonomisk og driftsmessig berekraftig.