Next.js als Integrationsschicht für Legacy-Systeme: Modernisieren ohne Big Bang

SAP, TYPO3, Salesforce und alte ERP-Systeme verschwinden nicht. Sie müssen mit modernen Frontends sprechen. Wie Next.js als Integrationsschicht und Backend for Frontend Legacy schrittweise entkoppelt, was das Muster trägt und wo es kippt.
9 Min. LesezeitMatthias RadscheitMatthias Radscheit
Happycodingde-DE

TL;DR

Next.js wird über Route Handlers zur Integrationsschicht vor Legacy-Backends: Es aggregiert SAP, ERP und CMS hinter einem modernen Frontend, ohne sie abzulösen. Das macht Modernisierung nach dem Strangler-Fig-Muster realistischer als jede Big-Bang-Migration — solange die Schicht selbst keine Geschäftslogik ansammelt und zum verteilten Monolithen wird.

  • Next.js ersetzt Legacy nicht, es kapselt es: Route Handlers aggregieren mehrere Datenquellen hinter einem Frontend und verstecken ein altes SAP-, ERP- oder CMS-System hinter einer modernen API-Schicht.
  • Das Strangler-Fig-Muster macht Modernisierung schrittweise: Funktion für Funktion wandert vom Altsystem in die neue Schicht, statt das Risiko eines Big-Bang-Replacements zu tragen.
  • Für reine Backend-zu-Backend-Integration ohne Frontend-Bezug ist eine dedizierte Integrationsplattform (Kong, MuleSoft, eigenes Backend) oft die sprachunabhängig sauberere Wahl als ein Next.js-BFF.
  • Die Schicht fügt einen Netzwerk-Hop hinzu: mehr Latenz, ein weiterer Deploy, ein zusätzlicher Ausfallpunkt. Server Components sollten direkt aus der Quelle fetchen, nicht über den eigenen Route Handler.
  • Sammelt die Schicht Geschäftslogik an und kettet synchron in SAP, Salesforce und ERP, entsteht ein verteilter Monolith — schwerer zu betreiben als das, was er ablösen sollte.

SAP geht nicht weg. TYPO3 geht nicht weg. Das ERP, das seit 2009 die Auftragslogik trägt, geht auch nicht weg. Diese Systeme sind nicht das Problem, das man löst — sie sind die Realität, in der man arbeitet. Die Frage ist nicht, wie man sie ablöst, sondern wie man ein modernes Frontend davorsetzt, ohne sich in einer dreijährigen Migration zu verlieren.

Genau hier wird Next.js interessant, und zwar nicht in der Rolle, in der es üblicherweise verkauft wird. Nicht als Renderer für die schnelle Marketing-Site, sondern als Schicht zwischen Browser und Backend-Zoo. Über Route Handlers aggregiert Next.js mehrere Datenquellen, normalisiert sie und liefert dem Frontend genau das, was es braucht. Es wird zur Integrationsschicht vor dem Backend, nicht zu seinem Ersatz. Das klingt unspektakulär. Es ist der Grund, warum Modernisierung in vielen Organisationen überhaupt erst realistisch wird.

Warum die Next.js Integrationsschicht für Legacy schlägt, was Big-Bang-Ablösungen versprechen

Die teuerste Entscheidung in der Legacy-Modernisierung ist die, das Altsystem in einem Rutsch zu ersetzen. Sie klingt sauber: ein neues System, eine Migration, ein Stichtag, danach ist alles besser. In der Praxis ist es eine Wette mit hohem Einsatz und schlechter Quote. Während der gesamten Bauzeit liefert das Projekt keinen Wert, das Altsystem läuft parallel weiter, und am Go-Live-Tag entscheidet sich, ob zwei Jahre Arbeit funktionieren oder nicht. Bei einem SAP-Commerce-Stack, dessen Implementierung sich nach Partnerschätzungen schnell im sechsstelligen bis siebenstelligen Bereich bewegt (das sind Schätzungen eines Migrations-Dienstleisters, keine offizielle Preisliste — entsprechend vorsichtig zu lesen), ist diese Wette schlicht nicht verantwortbar.

Die Alternative ist eine Next.js Integrationsschicht vor dem Legacy-Bestand, die das Risiko zerlegt. Martin Fowler hat dafür das Bild der Strangler Fig geprägt: die Würgefeige, die einen Baum umwächst und Stück für Stück ersetzt, bis sie selbst trägt. Übersetzt heißt das: kleine Ergänzungen neben dem Altsystem, Verhalten Funktion für Funktion übernehmen, das Legacy schrumpft, während das Neue wächst. Fowler ist dabei ehrlich — das Muster macht die Übung nicht *einfach*, und es verlangt die Akzeptanz einer Übergangsarchitektur, die für eine Weile hässlich aussieht. Aber es liefert ab Woche eins Wert, und kein einzelner Tag entscheidet über Erfolg oder Misserfolg. Microsoft beschreibt denselben Strangler-Fig-Mechanismus als Facade, die Requests abfängt und je nach Stand zum Legacy oder zum neuen Service routet.

Die Würgefeige braucht eine Schicht, die dieses Routing übernimmt. Eine Stelle, an der entschieden wird: Diese Daten kommen noch aus SAP, jene schon aus dem neuen Service, und das Frontend merkt nichts davon. Diese Stelle kann Next.js sein.

Was Route Handlers als Integrationsschicht leisten

Technisch ist das Muster unspektakulär, und das ist gut so. Next.js dokumentiert das Backend for Frontend offiziell über Route Handlers, die proxy-Konvention und — im Pages Router — API Routes. Ein Route Handler nimmt einen Request des eigenen Frontends entgegen, ruft im Hintergrund das ERP, das CMS und vielleicht noch einen Pricing-Service auf, fügt die Antworten zusammen, filtert das Überflüssige heraus und liefert eine saubere, auf die UI zugeschnittene Antwort zurück. Die internen Systeme bleiben unsichtbar. Das Frontend spricht nie direkt mit SAP, es spricht mit Ihrer Schicht.

Sam Newman, der den BFF-Begriff geprägt hat, formuliert das Prinzip als "one experience, one BFF": Die Schicht gehört dem Frontend-Team und ist auf genau ein Erlebnis zugeschnitten. Sie ist kein universelles Gateway, sondern der maßgeschneiderte Adapter zwischen einer konkreten Oberfläche und der unordentlichen Backend-Welt dahinter. Das ist die Stärke — und gleichzeitig die Grenze, auf die ich später zurückkomme.

Die offizielle Dokumentation ist an einer Stelle bemerkenswert ehrlich, und diesen Satz sollten Entscheider sich merken: Die Backend-Fähigkeiten von Next.js sind kein vollwertiger Backend-Ersatz, sie sind eine API-Schicht. Das ist keine Schwäche, das ist die korrekte Selbstverortung. Wer Next.js als BFF einsetzt, ersetzt damit nicht das System of Record. Er entkoppelt das Frontend von dessen Eigenheiten. Die Auftragslogik bleibt im ERP, wo sie hingehört. Die Schicht macht sie nur konsumierbar.

In Kombination mit der Rendering-Mechanik von Next.js entsteht daraus mehr als ein Proxy. Server Components reduzieren das an den Browser gesendete JavaScript, und Incremental Static Regeneration liefert für die meisten Requests vorgerenderte Seiten aus dem Cache — was die Last auf den dahinterliegenden Legacy-Systemen real senkt. Ein altes ERP, das jede Produktseite live beantworten müsste, geht bei Traffic in die Knie. Hinter einer ISR-Schicht beantwortet es nur noch die Cache-Revalidierungen. Wie sehr Antwortzeiten am Ende auf Conversion durchschlagen, habe ich an anderer Stelle ausführlicher behandelt — die Verbindung von Performance und Umsatz ist kein Nebenschauplatz, sondern oft das eigentliche Geschäftsargument für die ganze Übung.

Welche Legacy-Systeme sich so entkoppeln lassen

Das Muster ist nicht auf E-Commerce beschränkt, auch wenn SAP Commerce das Lehrbuchbeispiel liefert. Dessen Composable Storefront ist ein Angular-Frontend, das ausschließlich über die OCC-REST-API spricht. Wer dieses Frontend nicht mag — und viele Teams mögen es nicht, weil es Java/Spring- *und* Angular-Kompetenz im Haus verlangt — kann dieselbe REST-API von einem Next.js-Frontend aus konsumieren. Die Commerce-Engine bleibt SAP, das Erlebnis wird ein anderes.

Beim Content gilt dasselbe. Ein altes TYPO3 oder ein in die Jahre gekommenes CMS liefert Inhalte über eine API, und Next.js rendert sie modern. Das ist im Kern der Headless-Ansatz mit WordPress und Next.js, nur dass das "Headless" hier nachträglich vorgesetzt wird, statt von Anfang an geplant zu sein. Wer ohnehin grundsätzlich über die CMS-Strategie nachdenkt, sollte den Unterschied zwischen CMS und DXP kennen, bevor er die Schicht baut — die Architektur der Integrationsschicht sieht je nach Antwort anders aus. Und wer noch grundsätzlich entscheidet, ob TYPO3 überhaupt die Basis bleibt, findet meine Argumente gegen TYPO3 im Jahr 2026 an anderer Stelle.

Salesforce, Microsoft-Dynamics-ERP, hauseigene Systeme aus den Nullerjahren — alle haben heute eine API oder lassen sich mit überschaubarem Aufwand eine vorsetzen. Die Integrationsschicht aggregiert sie. Der Kunde sieht eine Oberfläche, die Daten aus drei Systemen zieht, und merkt nichts von der Fragmentierung dahinter. Das ist der eigentliche Wert: Die organisatorische und technische Zersplitterung im Backend wird vor dem Nutzer verborgen, ohne dass man sie vorher auflösen muss. Das Auflösen kann danach kommen, Funktion für Funktion, im Strangler-Fig-Takt.

Wann eine echte Integrationsplattform die bessere Wahl ist

Hier muss ich gegen die eigene These argumentieren, sonst wäre der Artikel unehrlich. Ein Next.js-BFF ist eine Integrationsschicht *für ein Frontend*. Sobald die Aufgabe primär Integration ohne Frontend-Bezug ist — Backend spricht mit Backend, System synchronisiert mit System, Daten fließen zwischen ERP, CRM und Data Warehouse — ist ein Frontend-Framework das falsche Werkzeug.

Für diese Fälle existieren dedizierte Integrationsplattformen: ein API-Gateway wie Kong, eine Integrations-Middleware wie MuleSoft, oder ein eigenes Backend in der Sprache Ihrer Wahl. Diese lösen Aggregation sprachunabhängig, zentral und für beliebig viele Konsumenten. Sie bringen Rate Limiting, Protokoll-Transformation, Observability und Authentifizierung als Plattformfunktion mit, nicht als selbstgebauten Route-Handler-Code. Wenn fünf verschiedene Konsumenten dieselben aggregierten Daten brauchen, ist ein zentrales Gateway robuster als fünf BFFs, die dieselbe Logik duplizieren — und Newman benennt Code-Duplikation zwischen BFFs ausdrücklich als eines der zwei Hauptrisiken des Musters.

Die ehrliche Faustregel: Hat die Aggregation einen direkten, spezifischen Frontend-Bezug, ist das Next.js-BFF näher am Problem und schneller gebaut, weil es genau die Daten in genau der Form liefert, die diese eine Oberfläche braucht. Ist die Aggregation eine generische Backend-Aufgabe, gehört sie auf eine Integrationsplattform. Wer ein Frontend-Framework zum Enterprise-Integrationsbus umfunktioniert, baut sich ein Problem, das er später teuer wieder auseinandernimmt.

Der unbequeme Punkt: Die Schicht fügt einen Hop hinzu

Jede Integrationsschicht hat einen Preis, und der wird im Pitch gern unterschlagen. Sie ist ein zusätzlicher Netzwerk-Hop. Mehr Latenz, ein weiterer Deploy, ein weiterer Ausfallpunkt. Die Next.js-Dokumentation sagt das selbst mit ungewöhnlicher Klarheit: Für on-demand Server Components ist das Fetchen über eigene Route Handlers langsamer, weil ein zusätzlicher HTTP-Round-Trip dazwischenliegt. Server Components sollten direkt aus der Quelle fetchen, nicht den Umweg über die eigene API-Schicht nehmen. Wer das ignoriert, baut sich Latenz ein, die niemand braucht.

Es kommt schlimmer, wenn die Schicht anfängt, Geschäftslogik anzusammeln. Ein BFF, das synchron in SAP, dann in Salesforce, dann ins ERP kettet und auf jede Antwort wartet, bevor es die nächste Anfrage stellt, degeneriert zum verteilten Monolithen: separat deployte, aber eng gekoppelte Services mit synchronen Chatty-Calls, Latenzketten und kaskadierenden Ausfällen. Fällt das ERP aus, fällt die ganze Seite. Das ist schwerer zu betreiben als der Monolith, den die Schicht ablösen sollte — man hat sich die Nachteile der Verteilung eingekauft, ohne ihre Vorteile zu bekommen.

Und selbst wenn alles sauber bleibt: Die Grenzen der Legacy-Systeme verschwinden nicht, sie werden kaschiert. Ein ERP, das keine Echtzeit-Bestände kann, kann sie auch hinter einer eleganten Next.js-Schicht nicht. Das Caching, das die Last senkt, ist gleichzeitig der Mechanismus, der veraltete Daten ausliefert. Self-hosted funktioniert ISR-Caching automatisch nur bei *einer* next start-Instanz mit persistentem Disk — sobald Sie auf Multi-Instance oder CDN gehen, brauchen Sie einen Custom Cache Handler, etwa auf Redis-Basis, mit Tag-Koordination über mehrere Knoten. Das ist der technisch genuin schwierige Teil dieses Musters, und er wird unterschätzt, weil der Happy Path so einfach aussieht.

Den Betrieb dieser Schicht haben wir mehrfach self-hosted aufgesetzt — auf Hetzner, via Coolify und Docker, mit output: 'standalone'. Der Einstieg liegt bei rund 20 bis 50 Euro im Monat, eine hochverfügbare Variante mit redundanten Instanzen und separater Datenbank eher bei 150 bis 400 Euro. Die saubere Erstimplementierung eines solchen Stacks rechnen wir mit 5.000 bis 20.000 Euro einmalig, der laufende Betrieb mit zwei bis fünf Stunden im Monat. Das ist überschaubar — solange die Schicht eine Schicht bleibt und kein zweites Backend wird.

Was ich Entscheidern rate

Bauen Sie die Schicht so dünn wie möglich. Sie proxyt, sie aggregiert, sie transformiert, sie cached — mehr nicht. In dem Moment, in dem jemand vorschlägt, "ein bisschen Geschäftslogik" hineinzulegen, weil es gerade praktisch ist, halten Sie inne. Geschäftslogik gehört ins System of Record oder in einen dedizierten Service, nicht in die Integrationsschicht. Diese Disziplin ist der Unterschied zwischen einer eleganten Entkopplung und einem verteilten Monolithen.

Behandeln Sie die Schicht als temporär, auch wenn sie es nicht ist. Die Würgefeige soll den alten Baum ersetzen, nicht permanent umklammern. Microsoft warnt zu Recht: Die Routing-Facade darf nicht zur ossifizierten technischen Schuld erstarren. Planen Sie von Anfang ein, dass Funktionen aus dem Legacy in echte neue Services wandern und die Schicht entsprechend schrumpft. Eine Integrationsschicht, die nach drei Jahren genauso fett ist wie am Tag eins, hat ihren Zweck verfehlt.

Und entscheiden Sie ehrlich, ob Sie überhaupt ein Frontend-Problem oder ein Backend-Integrationsproblem haben. Hat die Aggregation Frontend-Bezug, ist Next.js eine gute, schnell lieferbare Wahl — das haben wir mehrfach von der Entscheidung bis zum Go-Live in unter 90 Tagen gebracht. Ist es reine Backend-zu-Backend-Integration, nehmen Sie eine Plattform, die dafür gebaut ist. Die ganze Mechanik, die Next.js self-hosted und souverän betreibbar macht, habe ich in der Übersicht zu Next.js als strategischer Architekturentscheidung zusammengefasst. Die Technologie ist nicht das Schwierige an diesem Muster. Die Disziplin ist es.

Häufige Fragen

Ersetzt Next.js mein SAP- oder ERP-System?
Nein. Next.js ist kein vollwertiger Backend-Ersatz, das sagt die offizielle Dokumentation selbst. Es legt eine Integrationsschicht davor: Route Handlers proxyen, aggregieren und transformieren Daten aus SAP, ERP oder CMS und verbergen die internen Systeme hinter einer modernen API. Die Geschäftslogik und die Systeme of Record bleiben im Backend. Die Schicht entkoppelt nur das Frontend von der Altsystem-Realität.
Was ist der Unterschied zwischen einem Next.js-BFF und einer API-Gateway-Plattform wie Kong oder MuleSoft?
Ein Backend for Frontend ist auf genau ein Frontend-Erlebnis zugeschnitten und gehört idealerweise dem Frontend-Team. Es aggregiert genau die Daten, die diese eine Oberfläche braucht. Ein API-Gateway oder eine Integrationsplattform löst Integration sprachunabhängig, zentral und für viele Konsumenten. Für reine Backend-zu-Backend-Integration ohne Frontend-Bezug ist die Plattform oft robuster; sobald es um die konkrete UI geht, ist das BFF näher dran.
Wann wird die Integrationsschicht selbst zum Problem?
Wenn sie Geschäftslogik ansammelt und synchron in mehrere Backends kettet. Dann entsteht ein verteilter Monolith: eng gekoppelte, separat deployte Services mit Latenzketten und kaskadierenden Ausfällen. Auch als reine Routing-Facade kann sie zum Single Point of Failure und Bottleneck werden. Nach abgeschlossener Strangulation muss sie verschlankt oder entfernt werden, nicht zur permanenten technischen Schuld erstarren.
Funktioniert das Caching von Next.js self-hosted hinter Legacy-Systemen?
Bei einer einzelnen next-start-Instanz mit persistentem Disk funktioniert ISR-Caching automatisch und entlastet die Legacy-Backends spürbar. Bei Multi-Instance- oder CDN-Setups brauchen Sie einen Custom Cache Handler, etwa auf Redis-Basis, plus Tag-Koordination. Genau dieser verteilte Cache ist der technisch anspruchsvolle Teil — und einer der Gründe, warum man die Schicht nicht unterschätzen sollte.

Quellen

Ähnliche Artikel

Offen für ausgewählte Projekte

Lassen Sie uns über Ihr Projekt sprechen

Buchen Sie einen unverbindlichen Termin, schreiben Sie uns eine E-Mail oder nutzen Sie das Formular – wir freuen uns auf Ihre Nachricht.

150+
Abgeschlossene Projekte
15
Jahre Erfahrung
8
Senior‑Level Teammitglieder