Frå magasinetema til prosjektpraksis
Passande teneste- og tekniske sider til innlegget
Mange bedrifter står i dag overfor ein liknande utgangspunkt: Ei vekstbasert fagsøknad (ofte Delphi/VCL) kartleggjer sentrale prosessar, men skal plutseleg betene nye kanalar. Eit kundeportal treng data og prosessar, mobile brukarar ventar sikre tilgangar, tredjepartssystem (ERP, DMS, CRM, BI) krev integrasjonar. I denne situasjonen framstår ein REST-API som det nærliggjande steget. I praksis feilar API-initiativ likevel sjeldan på HTTP eller JSON – men på uklar ansvarfordeling mellom klient, server og datalagring.
Ei robust REST-Server-arkitektur med Delphi oppstår ikkje ved å leggje „eit par endepunkt“ over eksisterande databastabellar. Ho oppstår når verksemda vurderer faglege reglar, sikkerheitskrav, dataeigarskap, transaksjonsgrensar og driftkonsept i lag. REST-serveren blir då eit stabilt kontraktslag mellom faglogikk og konsumentar: Desktop-klient, portal, tenester, grensesnittpartnarar. Nett her spelar Delphi sine styrkar inn: rask utvikling, robust runtime, høgtytande native kode, god databindingsstøtte (t.d. ved BDE-Avløsning med nativer tilkopling) og moglegheita til å kapsle faglogikk kontrollert i bibliotek eller servermodular.
Denne omtalen skildrar korleis verksemder kan planleggje REST-serverar med Delphi slik at dei held fagleg konsistens, passar inn i eksisterande systemlandskap og ikkje blir ei feilkjelde i drift. Fokus ligg på arkitekturprinsipp, typiske fallgruver i moderniseringsprosjekt og konkrete byggjestykke for sikkerheit, dataaksess, versjonshandtering og observability.
Kvifor ein REST-API i verksemda er eit arkitekturval
I ei klassisk klient‑server-verda var mange reglar implisitt fordelte i desktopklienten: valideringar, statusskifte, utrekningar, delvis til og med rettigheitssjekkar. Så lenge berre éin klient fanst, var det ukritisk – fagleg uheldig, men handterbart. Når fleire konsumentar får tilgang til dei same forretningsobjekta, raser dette modellen:
- Eit portal kan ikkje „gjenbruke“ klientvalideringar.
- Mobile appar skal vere offline‑vennlege, men må ikkje duplisere faglege reglar.
- Integrasjonar treng stabile, versjonerte kontraktar og klar feilsemantikk.
- Compliance krev etterprøvbare tilgangar, rollestrukturar og audit‑moglegheiter.
APIen blir staden der faglogikk, rettar og dataaksess møtest. Dermed avgjer arkitekturen om systemet ditt er utvidbart på sikt – eller om de berre påfører dykk ny teknisk gjeld.
Delphi som plattform for REST-serverar: styrkar og typiske bruksbilete
Delphi blir i verksemder ofte assosiert med desktop‑applikasjonar. For REST-serverar eignar Delphi seg likevel godt, særleg når det handlar om gjenbruk av eksisterande faglogikk eller om høgtytande tenester. Typiske bruksbilete i B2B‑miljø:
- API‑lag for bestandsprogramvare: Eksisterande Delphi-fagsøknad vert halde som UI, medan REST-serveren kapslar dataaksessar og reglar for nye konsumentar.
- Backend for portal-/kundeområde: Nettportal nyttar REST-endepunkt som brukar same regelkjerne som interne prosessar.
- Integrasjons‑ og grensesnittserver: ERP/DMS/CRM‑tilkopling, import/eksport, eventhandtering, tidsstyrte jobbar.
- Linux-Services eller Windows‑tenester: Langkøyreprosessar, kø‑workerar, scheduler, dokumentarbeidsflyt.
Avgjerande er ikkje rammeverket sitt namn, men disiplinen rundt lagdeling, samtidshandtering, feilhandtering og deployment. Delphi legg til rette for begge delar: raske iterasjonar og samstundes rein, modulær arkitektur – viss ein planlegg med omtanke.
Lagmodell: Layer-3‑arkitektur som grunnlag for langlivede APIar
For bedriftsprogramvare har ein tynt, klart lagmodell vist seg føremålstenleg. I Delphi‑miljø vert dette ofte omtala som Layer-3 arkitektur. Omgrepa varierer, men ansvaret bør vere eintydig:
1) API-/Transport‑lag (HTTP, serialisering, routing)
Denne lina handterer HTTP, autentisering på protokollnivå, request/response‑format, routing, statuskodar, Content‑Type, kompresjon. Her høyrer ingen faglege reglar heime. Målet er utskiftbarheit og testbarheit. Dersom de seinare skal utvide frå ein REST‑API til supplerande protokollar (t.d. WebSocket, gRPC‑lignande mønster, Server‑Sent Events), må fagkjernen vere stabil.
2) Domain-/Service‑lag (faglogikk, use cases, rettar, transaksjonar)
Her bur den faglege sanninga: statusmaskinar, utrekningar, plausibilitetssjekkar, multitenant‑reglar, rettigheitskontrollar på faglege handlingar. Dette laget bør vere uavhengig av UI og så vidt mogleg utan HTTP‑kunnskap. Ideelt implementerer ein use cases som «frigje bestilling», «lukke sak», «generere faktura» i staden for berre CRUD på tabellar.
3) Data‑Access‑lag (repositories, SQL, FireDAC, mapping)
Denne lina kapslar persistensen: SQL, stored procedures, transaksjonsstyring, låsemodellar, connection‑pooling, DB‑spesifikke eigenskapar. I Delphi er BDE-Ablosung mit nativer Anbindung ofte eit pragmatisk val, særleg ved migrasjonar (BDE‑avløsning) og i heterogene databasmiljø (SQL Server, PostgreSQL, MariaDB, Firebird). Viktig er at Data‑Access‑laget ikkje har HTTP‑samansetting og ikkje tek forretningsavgjerder.
Denne modellen reduserer kopling: Endringar i datamodellen krev ikkje automatisk API‑omskriving, og nye klientar arvar automatisk same logikk. Særleg i Delphi Modernisering er dette fundamentet for gradvis å løyse ut gamle desktop‑applikasjonar utan å stoppe drifta.
API‑design for bedriftsprogramvare: ikkje CRUD, men faglege kontraktar
Many APIs start with endpoints som /customers, /orders, /documents og implementerer CRUD. Det kan vere nok for interne verktøy, men i bedriftsprogramvare blir det raskt for grunna. Fagprosessar består av tilstandsskifte, reglar, sideeffektar og rettar.
Modeller ressursar, handlingar og statusar tydeleg
Eit betre mønster er kombinasjonen av ressursar og klare handlingar, t.d.:
- Les ressurs: GET /orders/{id}
- Utløyse handling: POST /orders/{id}/release
- Generer dokument: POST /orders/{id}/documents/invoice
- Sjekk status: GET /orders/{id}/status
Slik vert det i API‑kontrakten tydeleg at «frigje» ikkje berre er eit feltoppdatering. Serveren kan sentralt handtere valideringar, rettar, transaksjonar, auditing og sideprosessar.
Feilsemantikk og validering: gjera klientar i stand til å planleggje
Bedriftsklientar må kunne skilje feiltypar: valideringsfeil (400), manglande rettigheit (403), konflikt ved parallell endring (409), fagleg avvising (ofte 409 eller 422), mellombels backend‑problem (503). Viktig er ein konsistent feilstruktur, t.d. med feilkode, melding, valfrie feltpeikarar og ei korrelasjons‑ID. Då kan eit portal vise forståelege meldingar og samtidig gjera support og drift effektive å feilsøkje.
Sikkerheit: autentisering er ikkje lik autorisasjon
I B2B‑sammanheng feilar sikkerheit sjeldan på kryptering, men på manglande skilje mellom identitet, rollar og faglege rettar. Ein REST‑serverarkitektur må difor skilje to nivå:
Autentisering (kven er det?)
Vanlege metodar er token‑baserte løysingar (t.d. JWT eller opaque tokens), kombinert med TLS og klar sesjonsstrategi. Avgjerande er: token‑levetid, refresh‑mekanisme, sperring ved rolletendring, og om de har ulike Identity‑Providarar for portal og interne system. Delphi‑serverar kan her både opptre som Resource‑Server og – avhengig av oppsett – utstede token. I mange bedriftslandskap er integrasjon med eksisterande identity‑system (t.d. AD/LDAP, SSO‑løysingar) ein kjernefaktor.
Autorisasjon (har han lov?)
Autorisasjon høyrer heime i Domain-/Service‑laget. Rollar og rettar er sjeldan rein teknisk; dei heng på tenant, lokasjon, organisasjonsenheit, kontraktstatus eller prosessfase. God praksis:
- Roller (t.d. Admin, saksbehandlar, auditor) som basis
- Faglege policyar („kan berre generere faktura i status X“, „kan berre sjå eigne saker“)
- Multitenancy som standard: kvart request treng tenant‑kontekst
- Auditing: kven utførte kva handling og når
APIen bør ikkje berre returnere „tilgang tillaten/avslått“, men konsekvent i server hindre at parametertriks gjer data frå andre tenantar synlege. Det verkar innlysande, men i gamle system er dette ei av dei vanlegaste arkitekturfeila når ein for raskt legg «tabellar på HTTP».
Dataaksess med FireDAC: transaksjonar, pooling og database‑strategi
I bedriftsapplikasjonar er dataaksess stabilitetsfaktoren: belastningstoppane, deadlocks, lange rapportar, parallelle oppdateringar, batch‑import. FireDAC er i Delphi‑økosystemet ein velprøvd byggestein for å betre ulike databasar med ein einskapleg aksess. For ein REST‑serverarkitektur er særleg desse punkta avgjerande:
Transaksjonsgrenser per use case
Ein REST‑API er typisk request‑basert. Det passar godt med «transaksjon per use case»: Innafor eit request opnar ein ei transaksjon, utfører faglege operasjonar, deretter commit/rollback. Viktig: ikkje automatisk pakke kvart endepunkt i ein transaksjon, men vere konsekvent for skrivande operasjonar. Leseendepunkt kan etter behov òg trenge transaksjonar avhengig av isolation‑nivå for å sikre konsistente utsnitt.
Connection‑strategi og parallelitet
Serverparallelitet betyr mange samtidige requests, kvar med DB‑aksessar. Planlegg derfor:
- begrensa, overvaka poolstorleik
- time‑outs for spørringar og tilkoplingar
- klare reglar for langkøyreoperasjonar (flytt ut i jobbar/workerar)
Eit vanleg feilgrep er å køyre tunge rapportar eller masseeksportar synkront på same API‑instans som handterer interaktive portal‑forespurnader. Særleg betre er å separere: interaktivt versus batch/async.
Databasemodernisering som del av API‑planlegginga
Når det i beståndet endå finst eldre databaseaksessar (t.d. BDE), vert APIen ein katalysator: Han tvingar klåre dataaksessgrenser. Ein kontrollert overgang til FireDAC reduserer risiko og aukar portabilitet (PostgreSQL, MariaDB, SQL Server). Viktig er å ikkje planleggje dette som eit «Big Bang», men stegvis: nye server‑use‑casar nyttar allereie det nye Data‑Access‑laget, medan gamle delar gradvis vert overførte.
Versjonshandtering og bakoverkompatibilitet: API‑kontraktar vernar
Verksemder undervurderer ofte kor kostbart breaking changes er. Når eit kundeportal, ein partnar‑system eller ei Windows‑teneste byggjer på APIen din, kan du ikkje lenger «raske» endre felt. Ein rein versjoneringsstrategi er difor påkravd.
Pragmatiske reglar for versjonering
- Inga breaking changes utan versjon: endre ikkje namn på felt/fjern felt, tolk ikkje endepunkt annleis.
- Utvid heller enn endre: legg til nye felt, marker gamle som deprecated.
- Kompatible defaults: unngå nye obligatoriske felt eller utlei dei server‑side.
- Eksplisitt versjonering: t.d. /v1/… eller via header; viktigare enn metodikk er konsekvens.
For Delphi‑team betyr dette òg: halda DTOar (Data Transfer Objects) stabile og utforma mapping med vilje i staden for å serialisere domeneobjekt 1:1. Det kostar meir i starten, men reduserer supportkostnader over tid.
Observability: loggar, metrikker og traces frå start
I produktiv drift er «fungerer hos meg» verdilaust om feil ikkje kan reproduserast. Særleg REST‑serverar som betener mange konsumentar treng eit minimum av observability:
Strukturert logging med korrelasjons‑ID
Kvar request bør bera ei korrelasjons‑ID (overta eller genererast ved inngang) og dukke opp i loggane. Logginnslag bør vere strukturerte (t.d. JSON‑logg) slik at dei kan ingestast i sentrale system. Minst relevant:
- Request‑metode, rute, statuskode, varigheit
- Brukar‑/tenant‑kontekst (pseudonymisert/regeltilpassa)
- DB‑varigheit og feilklasse
- Korrelasjons‑ID for support
Metrikkar for kapasitet og feiltrendar
For skalering og stabilitet treng de metrikkar: requestar per minutt, p95/p99‑latensar, feilprosent per endepunkt, DB‑pool‑utnyttingsgrad, kø‑lengder. Dette treng ikkje vere „Cloud‑Native Overkill“, men utan tal blir ytelsessamtalar subjektive.
Feil‑ og unntakshandtering som arkitekturbyggjestykke
Delphi‑Exceptions må ikkje falle ukontrollert ut til klienten. Ei sentral exception‑middleware (eller ein global handler) bør omsetje unntak til konsistente feilresponsar, inkl. support‑ID og meiningsfulle HTTP‑kodar. Internt høyrer stacktraces i sikre loggar, ikkje i klientresponsar.
Synkront vs. asynkront: løyse langkøyreprosessar ut av REST‑svara
Mange bedriftsprosessar er ikkje «request/response på 200 ms»: PDF‑generering, dataimport, grensesnittkøyringar, avstemmingar, masseendringar, arkivering. Slike arbeidslaster høyrer sjeldan heime i eit synkront REST‑endepunkt, fordi dei binding trådar, gir timeouts og blokkerer brukaropplevinga.
Job‑pattern
Ein god løysing er: Eit endepunkt startar ein jobb, serveren returnerer straks ein jobb‑ID. Eit anna endepunkt returnerer status/resultat. Optionalt kan callback/webhook bli brukt. I Delphi kan dette realiserast med worker‑tenester, ei jobbtabel og ein klar statusmaskin. Fordelen er stabilitet og planbar skalering.
Køar og tenester
Avhengig av miljø kan ei message queue vere hensiktsmessig, men det er ikkje alltid naudsynt. Viktig er prinsippet: interaktive APIar held seg responsive, batch‑prosessar køyrer kontrollert, repeterbart og observerbart – som Windows‑tenester eller Linux‑tenester, etter deployment‑modell.
Deployment i verksemda: Windows, Linux, container, on‑prem
Ein REST‑serverarkitektur er først „ferdig“ når han er driftbar. Verksemder skil seg mykje: klassiske Windows‑serverar, virtualiserte Linux‑vertar, containerplattformar, strenge nettverkssonar, proxy‑ og sertifikatkrav. Delphi er fleksibel i dette, så lenge avhengigheiter blir handterte klart.
Konfigurasjon og secrets
Konfigurasjon må vere miljøavhengig (Dev/Test/Prod). Påloggingsinformasjon høyrer ikkje i EXE eller i repository. Bruk sikker lagring (t.d. secrets‑management i plattforma) og skil konfigurasjonsverdiar frå kodeutgjevingar. Planlegg rotasjonar (DB‑passord, API‑nøklar) utan å måtte bygge systemet på ny.
Release‑ og rollback‑strategiar
Når fleire konsumentar avheng av ein API, treng de kontrollerte utgjevingar: migrasjonsskript for DB‑endringar, feature‑toggles for trinna billeg aktivering, klare rollback‑vegar. Særleg databasendringar må vere bakoverkompatible dersom ein skal kunne rulle tilbake serverversjonen.
Integrasjon med bestandsprogramvare: stegvis modernisering framfor Big Bang
I mange Delphi‑landskap er den faglege kjernen verdifull, men teknisk «limt fast»: UI‑naude dataaksessar, globale tilstandar, blanda ansvarsområde. Ein REST‑API kan vere både risiko og moglegheit. Målet bør vere ein veg som gir målbare forbetringar med akseptabel innsats.
Strangler‑tilnærming for APIar
I staden for å bygge om alt, definer faglege skjæringspunkt som gir reell nytte: t.d. «bestillingsstatus og dokument for kundeportal», «stamdata‑lookup for mobile brukarar», «grensesnitt for ERP‑bokføring». Desse use casane implementerast som nye API‑funksjonar, inkludert Domain‑lag og Data‑Access. Gammal klient kan gradvis skifte til same server‑use‑cases utan at UI må byggjast om med ein gong.
Fagleg logikk felles: fornuftig, men kontrollert
Delphi gjer det mogleg å bruke faglege bibliotek både i server og i eksisterande applikasjonar. Det kan vere ei bru, men ber også risiko: dersom UI‑avhengigheiter sig inn i den felles logikken, mista de løysingskoplinga. Ein klar regel hjelper: Felles logikk er berre den logikken utan UI, utan globale tilstandar, med klare grensesnitt og testbare einingar. Alt anna held de separert.
Typiske feil i REST‑serverprosjekt – og korleis unngå dei
«Vi publiserer rett og slett tabellar»
Dersom endepunkt speglar tabellar direkte, oppstår eit ustabilt system: kvart DB‑refaktorering er eit API‑breaking‑change, faglege reglar dupliserast i klientar, og sikkerheitshol oppstår gjennom uoversette parameter. Betre er Domain‑use‑cases og DTOar som stabiliserer kontrakten.
Faglege rettar berre i klienten
Klientar er utskiftbare og kan manipulerast. Autorisasjon høyrer i server og må ta faglege reglar i betraktning, ikkje berre tekniske roller.
Ingen klar strategi for samtidshandtering
Parallelle oppdateringar skjer: to saksbehandlarar, portal og intern klient, eller eit importjobb. Uten Optimistic Locking (t.d. RowVersion/Timestamp), konfliktkoder (409) og klare merge‑reglar oppstår datatap eller „siste skriv vinn“‑feil.
Langkøyreprosessar blokkerer interaktive endepunkt
Synkron PDF‑generering eller eksportar føre til timeouts og «hengande» opplevingar. Job‑pattern med status‑endepunkt er betre.
Observability blir etterpåskrudd
Utan korrelasjons‑ID, strukturerte loggar og metrikkar blir kvar feil til ei søkeøving. Observability er ikkje luksus, men ei driftspremiss.
Konkret sjekkliste for dykkar REST‑serverarkitektur med Delphi
- Klare skjikt: Transport (HTTP), Domain (Use Cases), Data Access (FireDAC/SQL).
- Forstå APIen som kontrakt: halda DTOar stabile, planlegg versjonering, unngå breaking changes.
- Sikkerheit på to nivå: autentisering (token) pluss autorisasjon (faglege policyar, tenant).
- Set transaksjonar med omhug: per use case, timeouts, konfliktstrategi.
- Flytt langkøyreprosessar asynkront: jobbar/workerar, Windows‑ eller Linux‑tenester.
- Bygg inn observability: korrelasjons‑ID, strukturerte loggar, metrikkar, sentral feilhandtering.
- Planlegg deployment realistisk: konfigurasjon/secrets, rollback, databasemigrasjonar.
- Modernisering iterativt: prioriter verdifulle use cases, skil kappa frå kvarandre gradvis.
Konklusjon: REST‑serverar viser verdi først som drifts‑ og fagarkitektur
Ein REST‑serverarkitektur med Delphi blir spesielt verknadsfull når han ikkje vert sett på som ei „teknisk overflate“, men som ein bindande kjerne mellom prosessar, data og kanal. Avgjerande er reine lag (Layer-3‑arkitektur), fagleg modellerte endepunkt, konsekvent sikkerheits‑ og tenantlogikk, og eit driftsopplegg med versjonshandtering, overvaking og kontrollert samtidshandtering. Då blir APIen ei stabil plattform: for portal, integrasjonar, tenester og den gradvise Delphi Modernisering – utan å risikere den faglege substansen i eit vekstbasert system.
Dersom de vil sjekke korleis ein robust REST‑API kan byggjast opp mot dykkar eksisterande Delphi‑landskap (inkl. databasstrategi, FireDAC, tenester og drift), når de oss her: https://net-base-software-gmbh.de/kontakt/
neste steg
Når temaet blir eit reelt prosjekt, bør arkitektur, eksisterande system og drift tidleg saman vurderast.
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 utsett til seinare fasar.
- De ser tidleg kva veg som er økonomisk og driftsmessig berekraftig.