Net-Base Magasin

10.04.2026

REST-serverarkitektur med Delphi för företag

APIs visar sitt värde först när affärslogik, behörigheter, datamodell och drift planeras tillsammans.

10.04.2026

Från magasinets tema till projektpraxis

Passande tjänste- och tekniksidor för inlägget

Många företag står idag inför en liknande utgångspunkt: en växande fackapplikation (ofta Delphi/VCL) speglar centrala processer, men ska plötsligt betjäna nya kanaler. En kundportal behöver data och ärenden, mobila användare förväntar sig säkra åtkomster, tredjepartssystem (ERP, DMS, CRM, BI) kräver integrationer. I denna situation framstår en REST-API som ett närliggande steg. I praktiken misslyckas API‑initiativ sällan på HTTP eller JSON – utan på grund av oklar ansvarsfördelning mellan klient, server och datalagring.

En hållbar REST-server-arkitektur med Delphi uppstår inte genom att man lägger „några endpoints“ över befintliga databastabeller. Den uppstår när företaget gemensamt beaktar affärsregler, säkerhetskrav, dataägarskap, transaktionsgränser och driftskoncept. REST-servern blir därmed ett stabilt kontraktslager mellan facklogik och konsumenter: desktop‑client, portal, tjänster, gränssnittspartner. Just här spelar Delphi sina styrkor: snabb utveckling, robust runtime, presterande native‑kod, god databasanslutning (t.ex. vid BDE-avveckling med native‑anslutning) och möjligheten att kapsla facklogik kontrollerat i bibliotek eller servermoduler.

Denna artikel beskriver hur företag planerar REST-servrar med Delphi så att de förblir funktionsmässigt konsekventa, passar in i befintliga systemlandskap och inte blir en felkälla i drift. Fokus ligger på arkitekturprinciper, typiska fallgropar i moderniseringsprojekt och konkreta byggstenar för säkerhet, dataåtkomst, versionering och observability.

Varför en REST-API i företaget är ett arkitekturval

I en klassisk klient‑server‑värld låg många regler implicita i desktopklienten: valideringar, statusövergångar, beräkningar, delvis även behörigheter. Så länge bara en klient fanns var det okritiskt – affärsmässigt lite olyckligt, men hanterbart. När flera konsumenter får åtkomst till samma affärsobjekt förändras modellen:

  • En portal kan inte „återanvända“ klientvalideringar.
  • Mobila appar bör kunna fungera offline, men får inte duplicera affärsregler.
  • Integrationer kräver stabila, versionerade kontrakt och tydlig felsemantik.
  • Efterlevnad kräver spårbara åtkomster, rollmodeller och auditmöjlighet.

API:en blir den punkt där facklogik, rättigheter och dataåtkomst möts. Dess arkitektur avgör om ert system förblir långsiktigt utbyggbart – eller om ni bara skapar ny teknisk skuld.

Delphi som plattform för REST-servrar: styrkor och typiska användningsfall

Delphi associeras ofta med desktopapplikationer i företag. För REST-servrar är Delphi emellertid väl lämpat, särskilt när det handlar om återanvändning av befintlig facklogik eller presterande tjänster. Typiska användningsfall i B2B‑miljöer:

  • API‑lager för befintlig mjukvara: Den befintliga Delphi‑fachanwendung behålls som UI, medan REST‑servern kapslar dataåtkomst och regler för nya konsumenter.
  • Backend för portal/kundområde: Webportalen använder REST‑endpoints som använder samma regelkärna som interna processer.
  • Integrations‑ och gränssnittserver: ERP/DMS/CRM‑anslutning, import/export, eventhantering, schemalagda jobb.
  • Linux‑tjänster eller Windows‑tjänster: Långkörande processer, köbaserade workers, schedulers, dokumentarbetsflöden.

Det avgörande är inte ramverksetiketten utan disciplinen i lagerindelning, samtidighet, felhantering och deployment. Delphi möjliggör båda: snabba leveranser i iterationer och samtidigt en ren, modulär arkitektur – om man planerar medvetet.

Schichtenmodell: Layer-3‑arkitektur som grund för hållbara API:er

För företagsprogramvara har en tydlig, slank lagerindelning visat sig fungera väl. I Delphi‑kontexten beskrivs detta ofta som Layer-3‑arkitektur. Benämningarna varierar, men ansvarsfördelningen bör vara klar:

1) API‑/Transport‑Layer (HTTP, serialisering, routing)

Detta lager hanterar HTTP, autentisering på protokollnivå, request/response‑format, routing, statuskoder, Content‑Type och kompression. Här hör inga fackregler hemma. Målet är utbytbarhet och testbarhet. Om ni senare vill komplettera en REST‑API med andra protokoll (t.ex. WebSocket, gRPC‑liknande pattern, Server‑Sent Events) måste fackkärnan förbli stabil.

2) Domain‑/Service‑Layer (facklogik, use cases, rättigheter, transaktioner)

Här ligger den fackliga sanningen: statusmaskiner, beräkningar, plausibiliteter, klient‑/mandantregler, rättighetskontroller på fackliga åtgärder. Detta lager bör vara oberoende av UI och så långt möjligt utan kännedom om HTTP. Idealiskt implementerar ni use cases som „frigiv order“, „stäng ärende“, „skapa faktura“ istället för endast CRUD mot tabeller.

3) Data‑Access‑Layer (repositories, SQL, FireDAC, mappning)

Detta lager kapslar persistensen: SQL, lagrade procedurer, transaktionsstyrning, låsningskoncept, anslutningspool, DB‑specifika särdrag. I Delphi är BDE-Ablosung mit nativer Anbindung ofta ett pragmatiskt val, särskilt vid migreringar (BDE‑avveckling) och vid heterogena databaser (SQL Server, PostgreSQL, MariaDB, Firebird). Viktigt är att Data‑Access‑laret inte innehåller HTTP‑kunskap och inte fattar affärsbeslut.

Denna modell minskar kopplingar: ändringar i datamodellen tvingar inte fram omskrivna API:er, och nya klienter ärver automatiskt samma logik. Särskilt vid Delphi modernisering är detta grunden för att stegvis frikoppla växande desktop‑applikationer utan att bryta drift.

API‑design för företagsprogramvara: inte CRUD utan fackliga kontrakt

Många API:er startar med endpoints som /customers, /orders, /documents och implementerar CRUD. Det räcker ibland för interna verktyg, men i företagsprogramvara blir det snabbt för ytligt. Fackprocesser består av tillståndsövergångar, regler, sidoeffekter och behörigheter.

Modellera resurser, åtgärder och tillstånd tydligt

Ett bättre mönster är kombinationen av resurser och tydliga åtgärder, t.ex.:

  • Resurs läsa: GET /orders/{id}
  • Åtgärd utlösa: POST /orders/{id}/release
  • Skapa dokument: POST /orders/{id}/documents/invoice
  • Kontrollera status: GET /orders/{id}/status

Detta gör i API‑kontraktet tydligt att „frigivning“ inte bara är en fältuppdatering. Servern kan centralt genomföra valideringar, rättighetskontroller, transaktioner, auditing och sido‑processer.

Felsemantik och validering: gör klienterna planerbara

Företagsklienter måste kunna skilja feltyper: valideringsfel (400), saknad behörighet (403), konflikt vid parallell ändring (409), fackligt avslag (ofta 409 eller 422), temporära backend‑problem (503). Viktigt är en konsekvent felstruktur, t.ex. med felkod, message, valfria fältindikatorer och en korrelations‑ID. Då kan en portal visa tydliga meddelanden och samtidigt ge support och drift effektiv spårbarhet.

Säkerhet: autentisering är inte samma sak som auktorisation

I B2B‑kontext misslyckas säkerhet sällan på grund av kryptering, utan på grund av bristande separation mellan identitet, roller och fackliga behörigheter. En REST‑serverarkitektur måste därför särskilja två nivåer:

Autentisering (vem är det?)

Vanliga lösningar är token‑baserade angreppssätt (t.ex. JWT eller opaque tokens), kombinerat med TLS och en tydlig sessionstrategi. Avgörande är token‑livslängd, refresh‑mekanism, spärr vid rolländringar samt frågan om portar och interna system ska använda olika identity‑providers. Delphi‑servrar kan agera både som resource‑server och – beroende på setup – även utfärda tokens. I många företagslandskap är integration med befintliga identity‑system (t.ex. AD/LDAP, SSO‑lösningar) en kärnfråga.

Auktorisation (får hen göra det?)

Auktorisation hör hemma i Domain‑/Service‑Layer. Roller och rättigheter är sällan rent tekniska; de hänger ihop med tenant, plats, organisationsenhet, avtalstatus eller processfas. God praxis:

  • Rollmodell (t.ex. Admin, Handläggare, Auditor) som bas
  • Fackliga policies („får skapa faktura endast i status X“, „får endast se egna ärenden“)
  • Mandantstöd som standard: varje request behöver tenant‑kontext
  • Auditing: vem utförde vilken åtgärd när

API:en bör inte bara svara „åtkomst tillåten/avvisad“ utan konsekvent förhindra att parametrar slussar åtkomst till andra tenants. Det låter självklart, men i växande system är detta en av de vanligaste arkitekturfelen när man för snabbt lägger tabeller på HTTP.

Dataåtkomst med FireDAC: transaktioner, poolning och databasstrategi

I företagsapplikationer är dataåtkomst en stabilitetsfaktor: lasttoppar, deadlocks, långa rapporter, parallella uppdateringar, batch‑importer. FireDAC är i Delphi‑ekosystemet en beprövad komponent för att hantera olika databaser med en enhetlig åtkomst. För en REST‑serverarkitektur är framför allt följande punkter avgörande:

Transaktionsgränser per use case

En REST‑API är typiskt request‑baserad. Det passar bra med „transaktion per use case“: inom en request öppnas en transaktion, fackoperationer genomförs och sedan commit/rollback. Viktigt: packa inte automatiskt varje endpoint i en transaktion, men var konsekvent för skrivande åtgärder. Läsendpoints kan beroende på isolation level också behöva transaktioner för konsistenta vyer.

Anslutningsstrategi och parallellitet

Serverparallellitet innebär många samtidiga requests, var och en med DB‑åtkomst. Planera därför för:

  • begränsade, övervakade poolstorlekar
  • time‑outs för queries och anslutningar
  • tydliga regler för långkörande operationer (flyttas ut till jobb/workers)

Ett vanligt fel är att låta tunga rapporter eller massexporter köras synkront på samma API‑instans som interaktiva portalrequests. Bättre är separation: interaktivt vs. batch/async.

Databasmodernisering som del av API‑planeringen

Om befintliga äldre dataåtkomster finns (t.ex. BDE), blir API:en en katalysator: den tvingar fram tydliga dataåtkomstgränser. En kontrollerad övergång till FireDAC minskar risker och ökar portabiliteten (PostgreSQL, MariaDB, SQL Server). Viktigt är att inte planera detta som ett „big bang“ utan stegvis: nya server‑use cases använder redan det nya data‑access‑lagret medan äldre delar migreras successivt.

Versionering och bakåtkompatibilitet: API‑kontrakt skyddar

Företag underskattar ofta hur kostsamma breaking changes är. När ett kundportal, ett partnersystem eller en Windows‑tjänst baserar sig på er API kan ni inte längre „snabbt“ byta namn på fält. En tydlig versioneringsstrategi är därför ett krav.

Pragmatiska regler för versionering

  • Inga breaking changes utan version: byt inte namn på eller ta bort fält, tolka inte endpoints annorlunda.
  • Utöka i stället för att ändra: lägg till nya fält, markera gamla som deprecated.
  • Kompatibla defaults: undvik nya obligatoriska fält eller härled dem server‑sidan.
  • Explicit versionering: t.ex. /v1/… eller via header; viktigare än metod är konsekvens.

För Delphi‑team betyder det också: håll DTOs (Data Transfer Objects) stabila och utforma mapping medvetet, i stället för att serialisera domänobjekt 1:1. Det ökar initialt arbete men minskar supportkostnader på sikt.

Observability: loggar, metrik och traces från start

I produktiv drift är „det fungerar hos mig“ värdelöst om fel inte går att reproducera. Särskilt REST‑servrar som betjänar många konsumenter behöver ett minimim av observability:

Strukturerad logging med korrelations‑ID

Varje request bör bära en korrelations‑ID (vidarebefordra inkommande eller generera ny) och återfinnas i loggarna. Loggposter bör vara strukturerade (t.ex. JSON‑logg) så att de kan ingestas i centrala system. Minst relevant:

  • Request‑metod, route, statuskod, varaktighet
  • User-/tenant‑kontext (pseudonymiserat/regelkonformt)
  • DB‑varaktighet och felklass
  • Korrelations‑ID för support

Metrik för kapacitet och fellägen

För skalning och stabilitet behöver ni metrik: requests per minut, p95/p99‑latens, felkvoter per endpoint, DB‑poolbelastning, kölängder. Det behöver inte vara „cloud‑native överdrift“, men utan siffror blir diskussioner om prestanda subjektiva.

Fel‑ och undantagshantering som arkitekturkomponent

Delphi‑exceptions får inte falla igenom till klienten okontrollerat. Ett centralt exception‑middleware (eller global handler) bör översätta undantag till konsekventa felresponsser, inklusive support‑ID och rimliga HTTP‑koder. Internt hör stacktraces i säkra loggar, inte i klientresponsen.

Synkront vs. asynkront: flytta långkörningar ur REST‑svaret

Många företagsprocesser är inte „request/response på 200 ms“: PDF‑generering, dataimport, gränssnittslopp, synkroniseringar, massändringar, arkivering. Dessa arbetsflöden hör sällan hemma i ett synkront REST‑endpoint eftersom de binder trådar, orsakar timeouts och blockerar användare.

Job‑pattern

Beprövat är: en endpoint startar ett jobb och servern returnerar omedelbart en job‑ID. En separat endpoint returnerar status/resultat. Callback/webhook kan användas för notifiering. I Delphi kan detta realiseras med worker‑tjänster, en jobbtabell och en tydlig statemaskin. Fördelarna är stabilitet och planbar skalning.

Queues och tjänster

Beroende på miljö kan en message queue vara lämplig, men den är inte alltid nödvändig. Det viktiga är principen: interaktiva API:er hålls responsiva, batchprocesser körs kontrollerat, upprepbart och observerbart – som Windows‑tjänster eller Linux‑tjänster beroende på deployment.

Deployment i företag: Windows, Linux, container, on‑prem

En REST‑serverarkitektur är först „färdig“ när den är driftbar. Företag skiljer sig mycket: klassiska Windows‑servrar, virtualiserade Linux‑hosts, containerplattformar, strikt nätverkssegmentering, proxy‑ och certifikatkrav. Delphi är flexibel här, förutsatt att beroenden hanteras ordentligt.

Konfiguration och hemligheter

Konfiguration måste vara miljöberoende (Dev/Test/Prod). Inloggningsuppgifter hör inte hemma i EXE eller repository. Använd säker lagring (t.ex. plattformens secrets‑hantering) och separera konfigurationsvärden från kodreleaser. Planera också för rotationer (DB‑lösenord, API‑nycklar) utan att behöva bygga om systemet.

Release‑ och rollback‑strategier

När flera konsumenter använder en API behöver ni kontrollerade releaser: migrationsskript för DB‑ändringar, feature‑toggles för stegvis aktivering och tydliga rollback‑vägar. Särskilt databasändringar måste vara bakåtkompatibla om rollback av serverversion ska vara möjlig.

Integration med befintlig programvara: stegvis modernisering istället för Big Bang

I många Delphi‑landskap är kärnlogiken värdefull men tekniskt „ihopklistrad“: UI‑nära dataåtkomst, globala tillstånd, blandade ansvarsområden. En REST‑API kan vara både risk och möjlighet. Målet bör vara en väg som med rimlig insats ger mätbara förbättringar.

Strangler‑ansatsen för API:er

Istället för att riva allt, definiera fackliga gränssnitt som ger verkligt värde: t.ex. „orderstatus och dokument för kundportalen“, „stamdata‑lookup för mobila användare“, „gränssnitt för ERP‑bokningar“. Dessa use cases implementeras som nya API‑funktioner, inklusive domain‑layer och data‑access. Den gamla klienten kan stegvis växla över till samma server‑use cases utan att UI måste byggas om omedelbart.

Gemensam facklogik: användbart men kontrollerat

Delphi gör det möjligt att använda gemensamma fackbibliotek både i servern och i befintliga applikationer. Det kan vara en brygga men innebär risker: om UI‑beroenden läcker in i den gemensamma logiken förlorar ni frikopplingen. En klar regel hjälper: delbar logik får bara omfatta kod utan UI, utan globala tillstånd, med tydliga gränssnitt och testbara enheter. Allt annat hålls separat.

Typiska fel i REST‑serverprojekt – och hur man undviker dem

„Vi publicerar helt enkelt tabellerna“

När endpoints speglar tabeller direkt uppstår ett instabilt system: varje DB‑refaktor kräver ett API‑breaking change, fackregler dupliceras i klienter och säkerhetsluckor via oprovade parametrar blir sannolikare. Bättre: domain‑use cases och stabila DTOs som konkretiserar kontraktet.

Fackliga behörigheter endast i klienten

Klienter är utbytbara och manipulerbara. Auktorisation måste ligga i servern och ta hänsyn till fackliga regler, inte enbart tekniska roller.

Ingen klar strategi för samtidighet

Parallella uppdateringar sker: två handläggare, portal och intern klient, eller ett importjobb. Utan optimistic locking (t.ex. RowVersion/Timestamp), konfliktkoder (409) och tydliga merge‑regler uppstår dataförluster eller „sista skrivaren vinner“‑fel.

Långkörningar blockerar interaktiva endpoints

Synkron PDF‑skapande eller exporter leder till timeouts och upplevelsen „det hänger sig“. Job‑pattern med status‑endpoints är bättre.

Observability läggs till i efterhand

Utan korrelations‑ID, strukturerade loggar och metrik blir varje incident en sökuppgift. Observability är inte en lyx utan en driftförutsättning.

Konkreta checklista för er REST‑serverarkitektur med Delphi

  • Separera lager tydligt: transport (HTTP), domän (use cases), data access (FireDAC/SQL).
  • Förstå API som kontrakt: håll DTOs stabila, planera versionering, undvik breaking changes.
  • Säkerhet i två steg: autentisering (token) plus auktorisation (fackliga policies, tenant).
  • Sätt transaktioner medvetet: per use case, timeouts, konfliktstrategi.
  • Flytta långkörningar asynkront: jobb/workers, Windows‑ eller Linux‑tjänster.
  • Bygg in observability: korrelations‑ID, strukturerade loggar, metrik, central felhantering.
  • Planera deployment realistiskt: konfiguration/hemligheter, rollback, databasmigrationer.
  • Modernisera iterativt: värdefulla use cases först, avskaffa gamla delar successivt.

Slutsats: REST‑servrar visar sitt värde först som drift‑ och fackarkitektur

En REST‑serverarkitektur med Delphi är särskilt effektiv när den inte förstås som en „teknisk yta“ utan som en sammanlänkande kärna mellan processer, data och kanaler. Avgörande är rena lager (Layer-3‑arkitektur), fackligt modellerade endpoints, konsekvent säkerhets‑ och tenantlogik samt ett driftsmönster med versionering, övervakning och kontrollerad samtidighet. Då blir API:en en stabil plattform för portaler, integrationer, tjänster och den stegvisa Delphi moderniseringen – utan att riskera den fackliga substansen i ett växande system.

Om ni vill undersöka hur en hållbar REST‑API kan byggas på er befintliga Delphi‑landskap (inklusive databasstrategi, FireDAC, tjänster och drift), når ni oss här: https://net-base-software-gmbh.de/kontakt/

nästa steg

När ett ämne blir ett verkligt projekt bör arkitektur, befintligt bestånd och drift tidigt ses över gemensamt.

Vi stöder inte bara vid enstaka frågor, utan även när kodsfragment, legacy-frågor eller portalidéer ska utvecklas till ett robust företagsprojekt.

  • Nuläge, målbild och tekniska risker bedöms tillsammans.
  • REST, dataåtkomst, portaler och utrullning skjuts inte upp som sena följder.
  • Ni ser tidigt vilken väg som är ekonomiskt och driftmässigt hållbar.

Dela inlägg

Dela det här inlägget direkt

LinkedIn, X, XING, Facebook, WhatsApp och e-post är omedelbart tillgängliga. För Instagram förbereder vi länken och en kort text direkt.

E-post

Instagram öppnas i en ny flik. Länken och korttexten kopieras till urklipp först.