Net-Base Magasin

10.04.2026

REST-serverarkitektur med Delphi for bedrifter

APIs kommer først til sin rett når forretningslogikk, rettigheter, datamodell og drift planlegges sammen.

10.04.2026

Fra magasinetema til prosjektpraksis

Egnede tjeneste- og tekniske sider for innlegget

Mange virksomheter står i dag overfor en lignende utgangssituasjon: En voksende fagapplikasjon (ofte Delphi/VCL) modellerer sentrale prosesser, men må plutselig betjene nye kanaler. Et Kundenportal trenger data og arbeidsflyter, mobile brukere forventer sikre tilgangsløsninger, og tredjepartssystemer (ERP, DMS, CRM, BI) krever integrasjoner. I denne situasjonen fremstår en REST-API som et åpenbart tiltak. I praksis feiler API-initiativer sjelden på grunn av HTTP eller JSON – oftere skyldes det uklar ansvarsfordeling mellom klient, server og datalagring.

En holdbar REST-Server-arkitektur med Delphi oppstår ikke ved å «legge noen endepunkter» over eksisterende databastabeller. Den oppstår når virksomheten ser faglige regler, sikkerhetskrav, datahjemmel, transaksjonsgrenser og driftskonsepter i sammenheng. REST-serveren blir dermed et stabilt kontraktslag mellom faglogikk og konsumenter: desktop-klient, portal, tjenester, grensesnittpartnere. Her kommer Delphi sine styrker til sin rett: rask utvikling, robust runtime, ytelsessterk native-kode, god databaseintegrasjon (f.eks. ved BDE-Ablösung mit nativer Anbindung) og muligheten til å kapsle faglogikk i biblioteker eller servermoduler under kontroll.

Denne teksten beskriver hvordan virksomheter kan planlegge en REST-Server med Delphi slik at løsningen forblir faglig konsistent, passer inn i eksisterende systemlandskap og ikke blir en driftsmessig feilkilde. Fokus ligger på arkitekturprinsipper, typiske fallgruver i moderniseringsprosjekter og konkrete byggesteiner for sikkerhet, dataadgang, versjonshåndtering og observability.

Hvorfor en REST-API i en virksomhet er en arkitekturavgjørelse

I en klassisk klient-server-verden lå mange regler implisitt i desktop-klienten: valideringer, tilstandsbytter, beregninger, delvis også rettigheter. Så lenge bare én klient fantes, var det uproblematisk – faglig uheldig, men håndterbart. Når flere konsumenter skal operere mot de samme forretningsobjektene, bryter modellen sammen:

  • En portal kan ikke «gjenbruke» klientvalideringer.
  • Mobile apper skal kunne være offline, men må ikke duplisere fagregler.
  • Integrasjoner trenger stabile, versjonerte kontrakter og entydig feilsemantikk.
  • Compliance krever etterprøvbare tilgangslogger, roller og auditmuligheter.

API-en blir stedet der faglogikk, rettigheter og dataadgang samles. Arkitekturen for API-en avgjør dermed om systemet er utvidbart på lang sikt – eller om man bare påfører ny teknisk gjeld.

Delphi som plattform for REST-servere: styrker og typiske bruksbilder

Delphi assosieres ofte med desktop-applikasjoner. For REST-servere egner Delphi seg imidlertid godt, særlig når gjenbruk av eksisterende faglogikk eller ytelseskrav står i fokus. Typiske bruksbilder i B2B-miljøer:

  • API-lag for eksisterende programvare: Den eksisterende Delphi-fagapplikasjonen beholdes som UI, mens REST-serveren kapsler dataadgang og regler for nye konsumenter.
  • Backend for portal-/kundesone: Web-portal bruker REST-endepunkter som benytter samme regelkjerne som interne prosesser.
  • Integrasjons- og grensesnittserver: ERP/DMS/CRM-tilkobling, import/eksport, hendelsesbehandling, tidstyrte jobber.
  • Linux-Services eller Windows-services: Langvarige prosesser, kø-arbeidere, scheduler, dokumentworkflows.

Avgjørende er ikke hvilket rammeverk som står på papiret, men disiplinen rundt lagdeling, samtidighet, feilbehandling og deployment. Delphi tillater begge deler: raske leveranser i iterasjoner og samtidig ren, modulær arkitektur – hvis man planlegger bevisst.

Lagmodell: Layer-3-arkitektur som grunnlag for holdbare API-er

For virksomhetsprogramvare har et klart, slankt lagmodell vist seg nyttig. I Delphi-miljøet omtales dette ofte som Layer-3-arkitektur. Begrepene varierer, men ansvaret bør være entydig:

1) API-/Transport-lag (HTTP, serialisering, routing)

Dette laget håndterer HTTP, autentisering på protokollnivå, request/response-formater, routing, statuskoder, Content-Type, kompresjon. Faglige regler hører ikke hjemme her. Målet er utskiftbarhet og testbarhet. Hvis dere senere utvider fra en REST-API til supplerende protokoller (f.eks. WebSocket, gRPC-lignende patterns, Server-Sent Events), må fagkjernen være stabil.

2) Domain-/Service-lag (faglogikk, use cases, rettigheter, transaksjoner)

Her bor den faglige sannheten: tilstandsmaskiner, beregninger, plausibiliteter, multitenant-regler, rettighetskontroller på faglige handlinger. Dette laget bør være UI-uavhengig og så lite som mulig kjent med HTTP. Ideelt implementeres use cases som «frigjøre ordre», «lukke sak», «opprette faktura» i stedet for bare CRUD mot tabeller.

3) Data-Access-lag (repositories, SQL, FireDAC, mapping)

Dette laget kapsler persistens: SQL, stored procedures, transaksjonsstyring, låsekonsepter, connection-pooling, DB-spesifikke særtrekk. I Delphi er BDE-Ablosung mit nativer Anbindung ofte et pragmatisk valg, særlig ved migrasjoner (BDE-Ablösung) og ved heterogene databaser (SQL Server, PostgreSQL, MariaDB, Firebird). Viktig er at Data-Access-laget ikke har HTTP-kunnskap og ikke fatter forretningsbeslutninger.

Denne modellen reduserer kobling: Endringer i datamodellen krever ikke automatisk omskriving av API, og nye klienter arver automatisk samme logikk. Spesielt i Delphi Modernisierung er dette grunnlaget for å avkoble vokste desktop-applikasjoner trinnvis uten å forstyrre drift.

API-design for virksomhetsprogramvare: Ikke CRUD, men faglige kontrakter

Mange API-er starter med endepunkter som /customers, /orders, /documents og implementerer CRUD. Det kan være tilstrekkelig for interne verktøy, men i virksomhetsprogramvare blir det ofte for grunt. Fagprosesser består av tilstandsbytter, regler, sideeffekter og autorisasjoner.

Modeller ressurser, handlinger og tilstander tydelig

Et bedre mønster er en kombinasjon av ressurser og klare handlinger, for eksempel:

  • Lese en ressurs: GET /orders/{id}
  • Utløse en handling: POST /orders/{id}/release
  • Opprette dokument: POST /orders/{id}/documents/invoice
  • Sjekke status: GET /orders/{id}/status

Dermed blir det i API-kontrakten tydelig at «frigjøre» ikke er et enkelt feltoppdatering. Serveren kan sentralt håndtere valideringer, rettigheter, transaksjoner, audit og tilhørende prosesser.

Feilsemantikk og validering: gjør feil forutsigbare for klienter

Virksomhetsklienter må kunne skille feiltyper: valideringsfeil (400), manglende autorisasjon (403), konflikt ved parallell endring (409), faglig avvisning (ofte 409 eller 422), midlertidige backend-problemer (503). Viktig er en konsistent feilstruktur, f.eks. med feilkode, melding, valgfrie felthenvisninger og en korrelasjons-ID. Da kan en portal vise forståelige meldinger samtidig som support og drift effektivt kan spore hendelser.

Sikkerhet: autentisering er ikke det samme som autorisasjon

I B2B-kontekster feiler sikkerhet sjelden på kryptering, men på manglende separasjon av identitet, roller og faglige rettigheter. En REST-server-arkitektur må derfor skille to nivåer:

Autentisering (hvem er det?)

Vanlige metoder er token-baserte tilnærminger (f.eks. JWT eller opaque tokens), kombinert med TLS og en tydelig session-strategi. Avgørende er: token-livslengde, refresh-mekanisme, inndragning ved rolleendringer, og om portaler og interne systemer bruker forskjellige identity-providers. Delphi-servere kan her både fungere som resource-server og – avhengig av setup – utstede tokens. I mange virksomhetslandskap er integrasjon med eksisterende identity-systemer (f.eks. AD/LDAP, SSO-løsninger) et kjernepunkt.

Autorisering (har han rett?)

Autorisering hører hjemme i Domain-/Service-laget. Roller og rettigheter er sjelden rent tekniske; de knytter seg til tenant, lokasjon, organisasjonsenhet, kontraktsstatus eller prosessfase. God praksis:

  • Roller (f.eks. Admin, Sachbearbeitung, Auditor) som basis
  • Faglige policies («kan kun opprette faktura i status X», «kan kun se egne saker»)
  • Multitenancy som standard: hver request trenger tenant-kontekst
  • Auditing: hvem utløste hvilken handling når

API-en bør ikke bare returnere «tilgang tillatt/avslått», men konsekvent forhindre at parametertriks gjør data fra andre tenanter synlige. Det høres selvinnlysende ut, men i vokste systemer er dette en av de vanligste arkitekturfeilene når man for raskt «legger tabeller på HTTP».

Dataadgang med FireDAC: transaksjoner, pooling og databasestrategi

I virksomhetsapplikasjoner er dataadgang en stabilitetsfaktor: lasttopper, deadlocks, lange rapporter, parallelle oppdateringer, batch-importer. FireDAC er i Delphi-økosystemet en velprøvd komponent for å levere enhetlig tilgang til ulike databaser. For en REST-server-arkitektur er særlig følgende punkter avgjørende:

Transaksjonsgrenser per use case

En REST-API er typisk request-basert. Det passer godt med «transaksjon per use case»: Innenfor en request åpnes en transaksjon, faglige operasjoner utføres, deretter commit/rollback. Viktig: Ikke pakker hvert endepunkt automatisk inn i en transaksjon, men vær konsekvent ved skrivende handlinger. Leseendepunkter kan avhengig av isolation level også trenge transaksjoner for å gi konsistente avlesninger.

Connection-strategi og parallellitet

Server-parallellitet betyr mange samtidige requests, hver med DB-tilgang. Planlegg derfor for:

  • begrensede, overvåkede pool-størrelser
  • timeouts for queries og forbindelser
  • klare regler for langvarige operasjoner (flytte ut i jobber/worker)

En vanlig feil er å la tunge rapporter eller masseeksporter kjøre synkront på samme API-instans som betjener interaktive portal-forespørsler. Bedre er en separasjon: interaktivt vs. batch/async.

Databasemodernisering som del av API-planleggingen

Hvis eldre dataadganger fortsatt finnes i beholdet (f.eks. BDE), blir API-en katalysator: den pålegger klare grenser for dataadgang. En kontrollert overgang til FireDAC reduserer risiko og øker portabilitet (PostgreSQL, MariaDB, SQL Server). Viktig er å ikke planlegge dette som et «big bang», men trinnvis: nye server-use-cases bruker allerede det nye Data-Access-laget, mens eldre deler følger etter.

Versjonering og bakoverkompatibilitet: API-kontrakter beskytter

Virksomheter undervurderer ofte hvor kostbart breaking changes er. Når et kundesenter, en partner eller et Windows- und Linux-Services baserer seg på API-en, kan man ikke lenger „raskt“ endre feltnavn. En klar versjoneringsstrategi er derfor obligatorisk.

Pragmatiske regler for versjonering

  • Ingen breaking changes uten ny versjon: ikke endre/fjern felt, ikke tolke endepunkter annerledes.
  • Utvid heller enn å endre: legg til nye felt, marker gamle som deprecated.
  • Kompatible defaults: unngå nye påkrevde felt, eller derivér dem serverside.
  • Eksplisitt versjonering: f.eks. /v1/… eller via header; viktigere enn metode er konsekvens.

For Delphi-team innebærer dette også: hold DTOs (Data Transfer Objects) stabile og planlegg mapping bevisst i stedet for å serialisere domeneobjekter 1:1. Det øker initialt arbeid, men reduserer supportkostnadene på sikt.

Observability: logger, metrikker og traces fra starten

I produksjon er «det fungerer hos meg» verdiløst hvis feil ikke lar seg reprodusere. Spesielt REST-servere som betjener mange konsumenter trenger et minimum av observability:

Strukturert logging med korrelasjons-ID

Hver request bør bære en korrelasjons-ID (ta imot inngående eller generer ny) og denne må forekomme i loggene. Logginnslag bør være strukturerte (f.eks. JSON-logg) slik at de kan injiseres i sentrale systemer. Minst relevant:

  • Request-metode, rute, statuskode, varighet
  • Bruker-/tenant-kontekst (pseudonymisert/regelklar)
  • DB-varighet og feilklasse
  • Korrelasjons-ID for support

Metrikker for kapasitet og feilmønstre

For skalering og stabilitet trenger dere metrikker: requests per minutt, p95/p99-latens, feilrate per endepunkt, DB-pool-utnyttelse, kølengder. Dette trenger ikke være «cloud-native overkill», men uten tall blir performance-diskusjoner subjektive.

Feil- og unntakshåndtering som arkitekturkomponent

Delphi-exceptions må ikke slippe ukontrollert ut til klient. En sentral exception-middleware (eller global handler) bør oversette unntak til konsistente feilresponser, inkludert support-ID og hensiktsmessige HTTP-koder. Internt hører stacktraces i sikre logger, ikke i klientresponser.

Synkront vs. asynkront: ta langvarige oppgaver ut av REST-responsen

Mange virksomhetsprosesser er ikke «request/response på 200 ms»: PDF-generering, dataimport, grensesnittkjøringer, avstemminger, masseendringer, arkivering. Slike arbeidsmengder hører sjelden hjemme i et synkront REST-endepunkt, siden de binder tråder, fremkaller timeouts og blokkerer brukere.

Job-pattern

En utprøvd tilnærming er: et endepunkt starter et jobb, serveren returnerer umiddelbart en jobb-ID. Et annet endepunkt gir status/resultat. Valgfritt kan callback/webhook varsle fullføring. I Delphi kan dette implementeres med worker-services, en jobbtabel og tydelig statusmaskin. Fordelen er stabilitet og planbar skalering.

Køer og tjenester

Avhengig av miljø kan en meldingskø være hensiktsmessig, men det er ikke alltid nødvendig. Viktig er prinsippet: interaktive API-er forblir responsive, batch-jobber kjører kontrollert, repeterbart og observerbart – som Windows-services eller Linux-services, avhengig av deploy-modell.

Deploy i virksomheter: Windows, Linux, containere, on-prem

En REST-server-arkitektur er først «ferdig» når den er driftbar. Virksomheter varierer: klassiske Windows-servere, virtualiserte Linux-verter, container-plattformer, strenge nettsoner, proxy- og sertifikatkrav. Delphi er her fleksibel, så lenge avhengigheter kontrolleres tydelig.

Konfigurasjon og secrets

Konfigurasjon må være miljøavhengig (Dev/Test/Prod). Tilgangsdata hører ikke hjemme i EXE eller repositoriet. Bruk sikker lagring (f.eks. secrets-management i den aktuelle plattformen) og separer konfigurasjonsverdier fra kodeutgivelser. Planlegg også rotasjon (DB-passord, API-keys) uten å måtte bygge systemet på nytt.

Release- og rollback-strategier

Når flere konsumenter avhenger av en API, trenger dere kontrollerte utgivelser: migrasjonsskript for DB-endringer, feature-toggles for gradvis aktivering, klare rollback-stier. Spesielt databaseendringer må være bakoverkompatible hvis en rollback av serverversjonen skal være mulig.

Integrasjon med eksisterende programvare: trinnvis modernisering fremfor Big Bang

I mange Delphi-landskap er den faglige kjernen verdifull, men teknisk «sammenklistret»: UI-nære dataadganger, globale tilstander, blandet ansvar. En REST-API kan være både risiko og mulighet. Målet bør være en vei som gir målbare forbedringer med akseptabel innsats.

Strangler-tilnærming for API-er

Istedenfor å rive alt, definer faglige skjæringspunkter som gir reell verdi: f.eks. «ordrestatus og dokumenter for kundesenter», «stamdata-lookup for mobile brukere», «grensesnitt for ERP-bokføringer». Disse use casene implementeres som nye API-funksjoner, inkludert domain-lag og data-access. Den gamle klienten kan så trinnvis overflyttes til samme server-use-cases uten at UI må bygges om med en gang.

Felles faglogikk: nyttig, men kontrollert

Delphi gjør det mulig å bruke faglige biblioteker både i serveren og i eksisterende applikasjoner. Det kan være en bro, men med fare: hvis UI-avhengigheter trenger seg inn i den delte logikken, mister man gevinstene ved avkobling. En klar regel hjelper: delt logikk skal være uten UI-avhengigheter, uten globale tilstander, med tydelige grensesnitt og testbare enheter. Alt annet holdes adskilt.

Typiske feil i REST-serverprosjekter – og hvordan unngå dem

«Vi publiserer bare tabeller»

Når endepunkter speiler tabeller direkte, oppstår et ustabilt system: alle DB-refactoringer blir breaking changes for API, fagregler dupliseres i klienter, og sikkerhetshull ved uverifiserte parametere blir mer sannsynlig. Bedre er domain-use-cases og DTOs som stabiliserer kontrakten.

Faglige rettigheter kun i klient

Klienter er utskiftbare og manipulerbare. Autorisasjon hører hjemme i serveren og må vurdere faglige regler, ikke bare tekniske roller.

Ingen klar strategi for samtidighet

Parallelle oppdateringer skjer: to saksbehandlere, portal og intern klient, eller en importjobb. Uten optimistic locking (f.eks. RowVersion/Timestamp), konfliktkoder (409) og tydelige merge-regler får man datatap eller «siste skriver vinner»-feil.

Langvarige oppgaver blokkerer interaktive endepunkt

Synkron PDF-generering eller eksporter fører til timeouts og «heng»-opplevelser. Job-pattern med status-endepunkter er bedre.

Observability løftes inn i etterkant

Uten korrelasjons-ID, strukturerte logger og metrikker blir hver feil en detektivjobb. Observability er ikke luksus, men en driftsforutsetning.

Konkrete sjekkpunkter for din REST-server-arkitektur med Delphi

  • Tydelig lagdeling: Transport (HTTP), Domain (Use Cases), Data Access (FireDAC/SQL).
  • Forstå API som kontrakt: hold DTOs stabile, planlegg versjonering, unngå breaking changes.
  • Sikkerhet i to trinn: autentisering (token) pluss autorisasjon (faglige policies, tenant).
  • Plasser transaksjoner bevisst: per use case, timeouts, konfliktstrategi.
  • Langvarige jobber asynkrone: jobs/workers, Windows- eller Linux-services.
  • Bygg inn observability: korrelasjons-ID, strukturerte logger, metrikker, sentral feilbehandling.
  • Planlegg deployment realistisk: konfigurasjon/secrets, rollback, databasemigrasjoner.
  • Modernisering iterativ: verdifulle use cases først, gamle deler avkoble trinnvis.

Konklusjon: REST-servere leverer verdi først når de er både drifts- og fagarkitektur

En REST-server-arkitektur med Delphi er særlig effektiv når den ikke forstås som en «teknisk overflate», men som en forenende kjerne mellom prosesser, data og kanaler. Avgørende er rene lag (Layer-3-arkitektur), faglig modellerte endepunkt, konsekvent sikkerhets- og tenantlogikk, samt et driftsmodell med versjonering, overvåkning og kontrollert samtidighet. Slik blir API-en en stabil plattform for portaler, integrasjoner, tjenester og den trinnvise Delphi Modernisierung – uten å sette den faglige substansen i et vokst system i fare.

Om dere vil vurdere hvordan en robust REST-API kan bygges opp mot deres eksisterende Delphi-landskap (inkludert databasestrategi, FireDAC, services og drift), kan dere nå oss her: https://net-base-software-gmbh.de/kontakt/

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.

Del innlegg

Del dette innlegget direkte

LinkedIn, X, XING, Facebook, WhatsApp og e-post er umiddelbart tilgjengelige. For Instagram forbereder vi lenke og kort tekst umiddelbart.

E-post

Instagram åpnes i en ny fane. Lenken og kortteksten kopieres først til utklippstavlen.