Astro
Astro-Endpunkte ohne separates Backend
Geschrieben von Noel
Veröffentlicht:
22 Min. Lesezeit
Themen mit KI-Unterstützung recherchiert; von Noel vor der Veröffentlichung geprüft und überarbeitet.

Thema vertiefen
Weitere Astro-Guides, Glossar-Einträge und Workflows findest du im Themen-Hub.
Astro-Endpunkte ermöglichen es dir, benutzerdefinierte Antworten aus demselben Projekt zu erstellen, das deine Seiten rendert. Mit anderen Worten, du kannst Astro verwenden, um JSON, RSS, Bilder und API-ähnliche Antworten zu bedienen, ohne für jede kleine Aufgabe ein separates Backend einzurichten.
Für Händler und Entwickler ist das wichtig, da ein Verkaufs- oder Inhaltsstandort oft mehr als nur HTML benötigt. Produkt-Feeds, sitemap-ähnliche Ausgaben, herunterladbare Daten und Anfragen-zu-Lookups passen gut in einen Code, wenn du verstehst, wie Astro-Endpunkte API-Routen in statischen und SSR-Modi funktionieren.
Wichtigste Erkenntnisse
- Astro-Endpunkte können statische Dateien zur Build-Zeit oder Live-Antworten zur Anforderungszeit erzeugen.
- Das gleiche Routen-Dateimuster kann JSON, Bilder, Feeds und andere nicht-seitenbezogene Ausgaben unterstützen.
- Der statische Modus ist am besten, wenn die Ausgabe vorab berechnet werden kann; SSR ist besser, wenn die Antwort von der Anfrage abhängt.
- Dynamische Routen funktionieren auch für Endpunkte, aber die statische Generierung benötigt
getStaticPaths().- Das Haupt-Risiko ist, Endpunkte wie ein vollständiges Backend zu behandeln, wenn eine kleinere, einfachere Antwort ausreicht.
Was ist das?
Astro-Endpunkte sind Routen-Dateien, die eine Response anstelle einer Seitenkomponente zurückgeben. Sie ermöglichen es dir, benutzerdefinierte Ausgaben unter dem Routing-System deiner Seite zu definieren, sodass eine Datei in /data.json, /feed.xml oder eine andere nicht-HTML-Ressource umgewandelt werden kann. In statischen Projekten führt Astro den Endpunkt während des Builds aus und schreibt das Ergebnis auf die Festplatte. In SSR-Projekten kann die gleiche Route auf Anfrage ausgeführt werden, wenn eine Anfrage eingeht.
Ein praktisches Beispiel ist ein JSON-Feed für aktuelle Blog-Beiträge. Anstatt diesen Feed in einem separaten Dienst zu erstellen, kannst du einen Endpunkt in deinem Astro-Projekt platzieren und die Daten direkt zurückgeben. Die Route kann von Browsern, Feed-Readern oder anderen Systemen gelesen werden, die eine strukturierte Antwort erwarten.
Die zentrale Idee ist, dass der Endpunkt nicht auf einen Inhaltstyp beschränkt ist. Die Antwort kann Text, JSON, XML oder binäre Daten sein, solange die Route das richtige Response-Objekt zurückgibt. Das macht Endpunkte überall nützlich, wo eine Seite eine maschinenlesbare Ausgabe neben ihren normalen Seiten benötigt.
Für Händler ist dies oft der einfachste Weg, Inhalte bereitzustellen, die ein anderes Tool konsumieren muss. Für Entwickler hält es Routing, Datenzugriff und Ausgabegenerierung an einem Ort, was die Anzahl der beweglichen Teile, die du warten musst, reduziert.
Das Endpunktmodell von Astro ist auch breiter als der Begriff “API-Route” vermuten lässt. Eine Route kann sich wie ein klassischer API-Endpunkt verhalten, kann aber auch eine Datei erzeugen, die später als statisches Asset bereitgestellt wird. Dieser doppelte Zweck macht die Funktion besonders nützlich in inhaltslastigen Seiten: Ein Implementierungsmuster deckt sowohl Builds als auch Laufzeitantworten ab.
Wenn du von einem anderen Framework kommst, ist das einfachste mentale Modell folgendes: Eine Seitenroute dient dem Rendering der UI, während eine Endpunkt-Route dazu dient, eine Nutzlast zurückzugeben. Die Nutzlast könnte von einem Browser, einem Feed-Reader, einem Skript oder einem anderen Dienst konsumiert werden. In einem kleinen Team kann diese Unterscheidung Architekturentscheidungen vereinfachen, da du keinen separaten Dienst erfinden musst, nur um ein strukturiertes Dokument zu versenden.
Statische Datei-Endpunkte vs. Live-API-Routen
Die nützlichste Unterscheidung ist nicht “Endpunkt oder nicht”, sondern “statisch oder live”. Ein statischer Endpunkt ist ideal, wenn die Ausgabe aus Inhalten abgeleitet wird, die bereits in deinem Repository oder CMS vorhanden sind und sich bis zur nächsten Bereitstellung nicht ändern müssen. Eine Live-API-Route ist besser, wenn die Antwort von der aktuellen Anfrage, dem aktuellen Bestand, dem Authentifizierungsstatus oder einem anderen nur zur Laufzeit verfügbaren Faktor abhängt.
Dieser Unterschied wirkt sich auf mehr als nur die Leistung aus. Er ändert, wie du die Route testest, cachs und bereitstellst. Ein statischer Endpunkt ist einfach zu testen, da seine Ausgabe deterministisch ist. Eine Live-Route benötigt Prüfungen auf Anforderungsebene, kann aber auch aktuelle Daten und Statuscodes zurückgeben, die den aktuellen Zustand des Systems widerspiegeln. Die falsche Wahl des Modus führt normalerweise zu vermeidbarer Komplexität: Eine statische Route, die live hätte sein sollen, wird veraltet, während eine Live-Route, die statisch hätte sein sollen, schwieriger zu cachen und zu warten wird.
Warum es wichtig ist
Der geschäftliche Wert von Astro-Endpunkten dreht sich hauptsächlich um die Reduzierung von Reibung. Wenn eine Seite bereits auf Astro läuft, kann ein Endpunkt einen kleinen externen Dienst, einen manuellen Export oder ein fragiles Skript ersetzen. Das bedeutet weniger Systeme, die bereitgestellt werden müssen, weniger Anmeldedaten zu verwalten und weniger Orte, an denen Inhalte aus dem Takt geraten können.
Technisch gesehen bieten Endpunkte eine saubere Möglichkeit, Präsentation von Lieferung zu trennen. Eine Seitenkomponente ist für Menschen; ein Endpunkt ist für Maschinen oder spezialisierte Ausgaben. Diese Unterscheidung hilft Teams, Datenexportlogik nicht in Seitenvorlagen oder benutzerdefinierte clientseitige Codes zu stopfen, die schwerer zu warten sind.
Das ist besonders wichtig, wenn sich Inhalte häufig ändern. Wenn ein Katalog, Feed oder strukturiertes Datenblatt aktuell bleiben muss, kann die Generierung zur Build-Zeit für viele Projekte ausreichend sein. Wenn die Antwort den neuesten Anforderungen, Benutzereingaben oder serverseitigen Prüfungen entsprechen muss, bieten SSR-Endpunkte diese Flexibilität, ohne deine gesamte Architektur zu ändern.
Es gibt auch einen Leistungsaspekt. Statische Endpunkte können schnell sein, da sie einfach Dateien sind, die vom Host bereitgestellt werden. SSR-Endpunkte halten die Logik zwar ebenfalls nah an der Seite, laufen jedoch nur bei Bedarf. In beiden Fällen kannst du unnötige clientseitige Arbeiten vermeiden und den Browser darauf konzentrieren, die Seite selbst darzustellen.
Ein weniger offensichtlicher Vorteil ist die operationale Klarheit. Wenn die Route im selben Repository wie die Inhalte und Vorlagen lebt, ist es einfacher, Änderungen gemeinsam zu überprüfen. Wenn sich ein Feed-Format ändert, können die Inhaltsquelle und die Endpunktlogik im selben Pull-Request aktualisiert werden. Das reduziert die Wahrscheinlichkeit, dass eine Bereitstellung Seiten versendet, die nicht mit dem Datenexport übereinstimmen, oder dass eine externe Integration ein veraltetes Format weiterhin verwendet.
Für Teams mit begrenzter Ingenieurzeit ist diese Einfachheit wertvoll. Du kannst eine praktische Menge API-ähnlichen Verhaltens unterstützen, ohne einen separaten Backend-Stack, einen separaten Freigabeprozess oder eine separate Monitoring-Oberfläche einzuführen. Das Ergebnis ist nicht nur weniger Code; es ist auch weniger Koordinationsaufwand.
Wie es funktioniert
Astro-Endpunkte folgen demselben Routing-Modell wie Seiten, aber die Ausgabe ist eine Response anstelle eines Komponentenbaums. Der Dateiname der Route bestimmt die URL, und die Erweiterung im Dateinamen wird aus dem endgültigen Pfad entfernt. Zum Beispiel wird eine Datei namens data.json.ts zu /data.json.
Statische Generierungspfad
Im statischen Modus ruft Astro den Endpunkt zur Build-Zeit auf. Der Code wird einmal während des Builds ausgeführt, und Astro schreibt den zurückgegebenen Inhalt in eine statische Datei. Dies ist ideal für Ausgaben, die sich nicht pro Anfrage ändern müssen, wie einen Feed, ein generiertes JSON-Dokument oder ein vorab berechnetes Asset.
Wenn die Route dynamisch ist, kombinierst du sie normalerweise mit getStaticPaths(). Diese Funktion sagt Astro, welche Parameterwerte zu generieren sind. Zum Beispiel kann eine Route wie [id].json.ts mehrere Dateien generieren, wenn du die Liste der IDs während des Builds bereitstellst.
Die praktische Konsequenz ist, dass der Endpunkt Teil deines Build-Pipelines wird. Das kann eine Stärke sein, wenn du vorhersehbare Ausgaben und einfaches Caching möchtest, bedeutet aber auch, dass der Build Zugriff auf die Datenquelle haben muss, die der Endpunkt benötigt. Wenn die Datenquelle während der Build-Zeit nicht verfügbar ist, kann die Route ihre Datei nicht erzeugen.
SSR-Anforderungsweg
Im SSR-Modus wird der Endpunkt zu einer Live-Server-Route. Anstatt vorab erstellt zu werden, wird er ausgeführt, wenn eine Anfrage eingeht. Das schaltet anforderungsbewusste Logik, Statuscodes, Header und nur zur Laufzeit verfügbare Datenzugriffe frei. Das bedeutet auch, dass du unterschiedlich auf params, die Anforderungs-URL oder andere serverseitige Bedingungen reagieren kannst.
Die Route kann Methoden wie GET exportieren, und im SSR-Modus kann sie auch andere HTTP-Methoden unterstützen, wenn nötig. Wenn eine Anfrage nicht mit einer von dir exportierten Methode übereinstimmt, folgt Astro seinem normalen Routing-Verhalten, weshalb das Design von Endpunkten immer noch absichtlich und nicht ad-hoc sein sollte.
Eine nützliche Möglichkeit, über den Unterschied nachzudenken, ist Frische versus Vorhersehbarkeit. Statische Endpunkte sind vorhersehbar, weil die Ausgabe festgelegt ist, bis der nächste Build stattfindet. SSR-Endpunkte sind frisch, weil sie auf die aktuelle Anfrage reagieren können. Keiner ist universell besser. Die richtige Wahl hängt davon ab, ob die Antwort inhaltsgesteuert oder anfragegesteuert ist.
Was die Antwort enthält
Der wichtige Teil ist das Response-Objekt. Dieses Objekt enthält den Inhalt und kann auch Header und Statuscodes umfassen. Für binäre Ausgaben kann der Inhalt ein Array-Puffer oder buffer-ähnliche Inhalte sein. Für JSON ist es normalerweise eine stringifizierte Nutzlast mit dem richtigen Inhaltstyp. Das macht Astro-Endpunkte API-Routen flexibel genug für sowohl einfache Exporte als auch dynamischere Serverlogik.
In der Praxis ist der Antwortvertrag das, worauf nachgelagerte Tools angewiesen sind. Wenn ein anderes System XML erwartet, muss der Endpunkt konsistent XML zurückgeben. Wenn ein Browser oder eine Integration einen 404-Fehler erwartet, wenn ein Datensatz fehlt, sollte der Endpunkt nicht stillschweigend eine leere 200-Antwort zurückgeben. Klare Antwortverhalten sind Teil der Implementierung und keine nachträgliche Überlegung.
Anwendungsfälle
Der häufigste Anwendungsfall ist ein Inhalts-Feed. Ein Blog, Änderungsprotokoll oder eine Ressourcenbibliothek benötigt häufig RSS- oder JSON-Ausgaben, damit andere Tools sich für Updates anmelden können. Astro-Endpunkte passen gut, da die Feed-Logik neben der Inhaltsquelle leben und automatisch regeneriert werden kann.
Ein zweiter Anwendungsfall sind generierte Assets. Die Dokumentation zeigt, dass Endpunkte binäre Dateien zurückgeben können, was bedeutet, dass du sie verwenden kannst, um Bilder oder andere dateiähnliche Antworten zu erzeugen. Das ist nützlich, wenn das Asset von Site-Daten abhängt oder wenn du möchtest, dass eine Route eine Datei auf Anfrage zusammenstellt.
Ein dritter Anwendungsfall ist leichtgewichtiges API-Verhalten für die Seite selbst. Ein Verkaufs- oder Marketingstandort benötigt möglicherweise eine kleine JSON-Abfrage, eine dynamische Statusantwort oder eine Route, die überprüft, ob eine Ressource existiert. In diesen Fällen kann ein Endpunkt das serverseitige Verhalten bereitstellen, ohne einen separaten Backend-Dienst einzuführen.
Für Teams, die inhaltslastige Seiten erstellen, passen Endpunkte auch gut zu strukturierten Inhalts-Workflows. Wenn dein Inhaltsmodell bereits organisiert ist, kann ein Endpunkt eine saubere, maschinenlesbare Version dieser Daten für ein anderes System bereitstellen. Wenn du Inhalte strukturiert halten möchtest, ist der Leitfaden zu CMS-Kollektionen ein nützlicher Begleiter, da er dir hilft, über die Quelldaten nachzudenken, bevor du sie über eine Route bereitstellst.
Es gibt auch ein praktisches internes Nutzungsszenario: Ein Team benötigt möglicherweise eine Route, die ein Vorschau-Tool, ein Migrationsskript oder einen zeitgesteuerten Job betreibt. In diesem Fall ist der Endpunkt keine öffentlich zugängliche Marketing-Infrastruktur; es ist ein Dienstprogramm-Endpunkt, der die operationale Logik nahe an der Seite hält. Das passt oft besser, als einen separaten internen Dienst für eine enge Aufgabe zu erstellen.
Wenn du zwischen einer Seite und einem Endpunkt entscheidest, frage, was der Verbraucher benötigt. Wenn der Verbraucher eine Person ist, die Inhalte liest, erstelle eine Seite. Wenn der Verbraucher eine Maschine, eine Integration oder einen dateibasierten Workflow ist, ist ein Endpunkt normalerweise die sauberere Wahl. Diese einfache Frage verhindert viel Überengineering.
Typische Szenarien, mit denen Teams konfrontiert sind
Ein Content-Team möchte möglicherweise einen Feed, der sich aktualisiert, wann immer ein neuer Artikel veröffentlicht wird. Ein Entwickler möchte möglicherweise eine JSON-Route, die ein kleines Admin-Tool oder ein Vorschaufenster antreibt. Ein Händler benötigt möglicherweise eine herunterladbare Datei, die eine andere Plattform nächtlich importiert. Dies sind alles unterschiedliche Probleme, aber dasselbe Endpunktmuster kann sie lösen, da die Route durch den Ausgabevertrag definiert wird, nicht durch die UI.
Der wichtige Teil ist, die Route an die Erwartungen des Verbrauchers anzupassen. Wenn der Verbraucher eine stabile URL und ein festes Schema benötigt, ist die statische Generierung oft ausreichend. Wenn der Verbraucher eine Antwort benötigt, die sich basierend auf der aktuellen Anfrage ändert, ist SSR die bessere Wahl. Diese Entscheidung sorgt dafür, dass die Implementierung mit dem tatsächlichen Workflow übereinstimmt, anstatt jeden Output in dasselbe Muster zu zwingen.
Wie man es implementiert oder anwendet
Beginne damit, zu entscheiden, ob die Ausgabe statisch sein kann. Wenn die Antwort auf Inhalten basiert, die sich nur ändern, wenn du neu baust, ist die statische Generierung normalerweise einfacher und günstiger zu betreiben. Wenn die Antwort von der aktuellen Anfrage, dem Benutzerstatus oder den Laufzeitdaten abhängt, wähle SSR, damit der Endpunkt bei Bedarf ausgeführt werden kann.
Als Nächstes wähle die Form der Route. Eine Datei wie src/pages/feed.xml.ts ist für einen Feed geeignet, während src/pages/api/products.json.ts besser für eine JSON-Antwort geeignet ist. Wenn die Route Parameter benötigt, verwende die Klammernsyntax wie [slug].json.ts und entscheide, ob diese Werte zur Build-Zeit generiert oder live behandelt werden sollen.
Implementiere dann den Handler mit einem GET-Export und gib eine Response zurück. Halte das Format des Inhalts explizit. Wenn du JSON bedienst, stringifiziere die Nutzlast und setze den Inhaltstyp. Wenn du ein Bild oder eine andere binäre Datei servierst, gib den binären Inhalt zurück und stelle sicher, dass die Header dem Dateityp entsprechen.
Ein guter Workflow besteht darin, zuerst den einfachsten möglichen Endpunkt zu erstellen und dann die Komplexität nur hinzuzufügen, wenn der Anwendungsfall es erfordert. Zum Beispiel könntest du mit einem statischen JSON-Export der letzten Artikel beginnen und ihn später in SSR umwandeln, wenn du eine Filterung zur Anforderungszeit benötigst. Das hält die Route einfach nachvollziehbar und vermeidet eine vorzeitige Backend-Design.
Wenn du einen dynamischen Endpunkt implementierst, entscheide früh, ob die Route aus Inhaltsdaten oder einer Live-Abfrage gefunden werden soll. Wenn die Werte im Voraus bekannt sind, gibt getStaticPaths() Astro die benötigte Liste. Wenn die Werte erst zur Anforderungszeit bekannt werden, halte die Route im SSR-Modus und validiere den Parameter im Handler.
Es hilft auch, über die Verbraucher nachzudenken, bevor du sie versendest. Wenn der Endpunkt von einem Feed-Reader, einer Browsererweiterung oder einem anderen Dienst gelesen wird, teste die rohe URL direkt, anstatt nur die Seite in einem Browser zu überprüfen. Das erkennt Probleme wie falsche Header, fehlerhaftes JSON oder einen Antwortinhalt, der im Quellcode gut aussieht, aber für einen Maschinenverbraucher fehlschlägt.
Eine praktische Entscheidungscheckliste:
- Verwende statische Endpunkte, wenn die Ausgabe vorab berechnet werden kann.
- Verwende SSR-Endpunkte, wenn die Antwort von der Anfrage abhängt.
- Verwende
getStaticPaths()für dynamische Routen in statischen Builds. - Setze
Content-Typeexplizit für nicht-HTML-Antworten. - Gib die richtigen Statuscodes zurück, wenn eine Ressource fehlt oder ungültig ist.
- Halte die Endpunktlogik eng; verwandle eine Route nicht in ein allgemeines Backend.
Wenn deine Seite bereits Astro für leistungsorientierte Bereitstellung verwendet, passen Endpunkte natürlich zu dieser Architektur. Sie sind besonders hilfreich, wenn sie mit Rendering-Entscheidungen kombiniert werden, die die Seitenauslieferung effizient halten, wie die in dem Leitfaden zur Inselarchitektur behandelten Muster.
Eine einfache Implementierungssequenz
Eine praktische Möglichkeit, das Muster anzuwenden, besteht darin, zuerst den Vertrag zu definieren, dann die Datenquelle und dann die Route. Zum Beispiel: Entscheide, dass der Endpunkt JSON zurückgeben soll, entscheide, welche Felder der Verbraucher benötigt, und schreibe erst dann den Handler. Diese Reihenfolge verhindert einen häufigen Fehler, bei dem die Route um die am einfachsten zugänglichen Daten herum aufgebaut wird, anstatt um das, was der Verbraucher tatsächlich benötigt.
Wenn die Route öffentlich ist, füge einen schnellen Test für die endgültige URL und die Antwortheader hinzu. Wenn die Route intern ist, dokumentiere, wer sie verwendet und ob es sicher ist, das Schema zu ändern. Diese kleinen Schritte machen den Endpunkt leichter wartbar, wenn die Seite wächst.
Häufige Fehler und Fallstricke
Der häufigste Fehler ist anzunehmen, dass jeder Endpunkt SSR sein sollte. Das ist nicht wahr. Wenn die Ausgabe sich zwischen Bereitstellungen nie ändert, ist die statische Generierung normalerweise einfacher zu cachen, günstiger bereitzustellen und einfacher zu testen. Die Wahl von SSR als Standard kann unnötige Laufzeitarbeiten verursachen.
Ein weiteres häufiges Problem ist das Vergessen, dass dynamische statische Endpunkte getStaticPaths() benötigen. Eine Route mit einem parameterisierten Klammer-Parameter weiß nicht automatisch, welche Dateien zu generieren sind. Wenn du diesen Schritt im statischen Modus überspringst, hat der Build nicht genügend Informationen, um die erwarteten Ausgaben zu erstellen.
Ein dritter Fallstrick besteht darin, die falschen Header zurückzugeben. Das ist besonders wichtig für binäre oder strukturierte Formate. Wenn du JSON ohne den richtigen Inhaltstyp zurückgibst oder ein Bild ohne den richtigen Header im SSR, können Verbraucher die Antwort möglicherweise nicht korrekt interpretieren. Die Route funktioniert technisch, könnte aber in der Praxis immer noch unzuverlässig sein.
Teams neigen auch manchmal dazu, Endpunkte übermäßig zu nutzen, als wären sie ein vollständiges Backend-Framework. Das kann zu verwickelter Logik, duplizierten Authentifizierungsprüfungen und schwer zu testenden Dateien führen. Endpunkte sind am besten, wenn sie fokussiert sind: eine Route, eine Verantwortung, eine klare Antwortform.
Schließlich ignoriere die Benennung der Route nicht. Da der Dateiname die endgültige URL bestimmt, kann ein kleiner Benennungsfehler seltsame Pfade oder unerwartetes Verhalten mit abschließenden Schrägstrichen verursachen. Das ist besonders wichtig für Datei-Erweiterungsrouten wie XML oder JSON, bei denen die URL-Form vorhersehbar bleiben sollte.
Ein weiterer subtiler Fallstrick besteht darin, Annahmen zur Build-Zeit in Laufzeitcode zu mischen. Zum Beispiel kann ein Endpunkt, der im statischen Modus funktioniert, im SSR fehlschlagen, wenn er von nur zur Build-Zeit verfügbaren Daten oder einem Dateipfad abhängt, der in der bereitgestellten Umgebung nicht verfügbar ist. Die Lösung besteht darin, den Datenzugriff von der Antwortformatierung zu trennen, sodass die Route leichter angepasst werden kann, wenn sich der Rendering-Modus ändert.
Lösungen, die normalerweise das Problem lösen
Wenn eine Route das falsche Format zurückgibt, überprüfe zuerst die rohe Antwort, anstatt die Seitenvorschau zu betrachten. Wenn eine dynamische statische Route fehlt, bestätige, dass getStaticPaths() jeden erwarteten Parameterwert zurückgibt. Wenn eine Live-Route langsam ist, überprüfe, ob sie wieder in die statische Generierung zurückversetzt werden kann. Die meisten Endpunktprobleme entstehen aus einem Missverhältnis zwischen der Aufgabe der Route und dem Modus, in dem sie läuft.
Beste Praktiken und schnelle Checkliste
Der sicherste Ansatz ist, jeden Endpunkt wie einen öffentlichen Vertrag zu behandeln. Sobald ein anderes Tool, ein Feed-Reader oder eine Integration darauf angewiesen ist, sollte die Form der Antwort und das Verhalten bei Status stabil bleiben. Das bedeutet, dass du von Anfang an bewusst über den Inhaltstyp, die Benennung der Route und die Fehlerbehandlung nachdenken solltest.
Schreibe die kleinste Route, die das Problem löst. Wenn der Endpunkt nur eine Liste von Elementen bereitstellen muss, gib diese Liste und nichts mehr zurück. Wenn er einen Parameter überprüfen muss, validiere ihn früh und antworte mit einem klaren Statuscode, wenn der Wert fehlt oder ungültig ist. Kleine Routen sind leichter zu warten und einfacher zu verstehen während der Bereitstellungen.
Es hilft auch, Build-Zeit- und Laufzeitbelange in deinem Kopf getrennt zu halten. Statische Endpunkte handeln von der Vorberechnung von Ausgaben; SSR-Endpunkte reagieren auf eine Anfrage. Wenn du diese Linien verwischst, hast du in der Regel Code, der schwieriger zu debuggen und schwieriger zu cachen ist.
Eine nützliche Gewohnheit ist es, den beabsichtigten Verbraucher in der Route selbst oder in nahegelegenen Kommentaren zu dokumentieren. Wenn der Endpunkt für einen Feed existiert, sag das. Wenn er für eine interne Automatisierung existiert, notiere das erwartete Format und ob die Route öffentlich ist. Das macht zukünftige Refaktorisierungen sicherer, da der nächste Entwickler sehen kann, warum die Route existiert und was kaputtgehen würde, wenn sie sich ändert.
Schnelle Checkliste:
- Benenne die Datei so, dass die endgültige URL offensichtlich ist.
- Entscheide, ob statisch oder SSR, bevor du die Logik schreibst.
- Verwende
getStaticPaths(), wenn statische dynamische Routen bekannte Werte benötigen. - Gib eine
Responsemit dem richtigen Inhaltsformat zurück. - Setze Header und Statuscodes absichtlich.
- Halte den Endpunkt auf eine Ausgabe fokussiert.
- Teste die Antwort, wie es ein Verbraucher tun würde, nicht nur im Browser.
- Überarbeite die Route, wenn sich die Datenquelle oder der Bereitstellungsmodus ändert.
Wenn du Astro bereits für die Inhaltsbereitstellung verwendest, zahlt sich diese Disziplin schnell aus. Endpunkte werden ein zuverlässiger Teil des Systems, anstatt eine Auffangschicht zu sein, die später schwierig zu erweitern ist.
Aus der Praxis — illustratives Szenario (hypothetisch, kein Kundenprojekt)
Illustratives Beispiel — kein reales Kundenprojekt: Stell dir einen Händler vor, der eine inhaltsreiche Astro-Seite mit einem Blog, einem kleinen Produktkatalog und einem Newsletter-Anmeldungsprozess betreibt. Das Team möchte drei Dinge aus demselben Code: einen RSS-Feed für Abonnenten, eine JSON-Datei für ein internes Automatisierungstool und einen leichtgewichtigen Endpunkt, der überprüft, ob ein Slug existiert, bevor eine neue Seite veröffentlicht wird.
Eine typische Einrichtung würde mit einem statischen RSS-Endpunkt beginnen. Die Inhalte ändern sich nur, wenn die Seite neu gebaut wird, also gibt es keinen Grund, den Feed bei jeder Anfrage auszuführen. Das Team fügt eine Routen-Datei hinzu, die XML zurückgibt, bestätigt, dass die Header korrekt sind, und lässt den Host die Datei wie jedes andere statische Asset bereitstellen. Das hält den Feed schnell und einfach zu cachen.
Für die Slug-Prüfung wählt das Team SSR. Diese Route muss basierend auf der aktuellen Anfrage und der aktuellen Datenquelle antworten, daher macht ein Live-Endpunkt mehr Sinn als eine Datei zur Build-Zeit. Der Handler liest den Parameter, überprüft, ob der Slug existiert, und gibt einen klaren Statuscode zurück, wenn dies nicht der Fall ist. Das gibt dem Veröffentlichungsworkflow eine einfache Ja-oder-Nein-Antwort, ohne einen separaten Dienst einzubeziehen.
Der interne Automatisierungsexport ist der Mittelweg. Wenn sich die Daten nur ändern, wenn das Content-Team die Seite aktualisiert, ist ein statischer JSON-Endpunkt ausreichend. Wenn die Automatisierung den neuesten Zustand zur Anforderungszeit benötigt, kann das Team ihn später auf SSR umschalten. Die wichtige Erkenntnis ist, dass die Wahl des Endpunkts dem Datenformat und den Frischeanforderungen folgt, nicht den Gewohnheiten des Teams oder dem vermeintlichen Prestige, “eine API zu haben”.
In diesem Szenario würde das Team wahrscheinlich die Routen in einer Sequenz implementieren. Zuerst würden sie das Ausgabeformat und den Verbraucher definieren, dann statische oder SSR wählen und schließlich die rohe URL mit einem Browser und einer Befehlszeilenanfrage testen. Wenn die Antwort für ein anderes Tool gedacht ist, würden sie die genauen Header und Statuscodes überprüfen, bevor sie sie in den Workflow integrieren. Diese Reihenfolge ist wichtig, da sie den häufigen Fehler verhindert, die Route zu erstellen, bevor der Vertrag klar ist.
Die Lektion aus diesem Szenario ist praktisch: Verwende Endpunkte, um unnötige Infrastruktur zu entfernen, halte aber jede Route eng. Wenn die Ausgabe vorhersehbar ist, ist die statische Generierung normalerweise der sauberste Weg. Wenn die Ausgabe von der Anfrage abhängt, ist SSR das richtige Werkzeug. Die Route sollte den geschäftlichen Bedarf bedienen und nicht zu einem Ort werden, an dem jede serverseitige Idee im Projekt gespeichert wird.
Verwandte Konzepte und weiterführende Literatur
Astro-Endpunkte sind am sinnvollsten, wenn du verstehst, wie sie in den Rest der Plattform passen. Wenn du zwischen Inhaltsquellen, Rendering-Modi oder Routenverhalten entscheidest, helfen dir diese verwandten Leitfäden, das richtige Muster auszuwählen.
- Astro Inhaltskollektionen: der praktische Weg, Inhalte strukturiert zu halten — nützlich, wenn dein Endpunkt organisierte Inhalte bereitstellen soll.
- Verständnis der Astro-Inselarchitektur für bessere Leistung — hilfreicher Kontext, um die Seitenauslieferung effizient neben benutzerdefinierten Routen zu halten.
- Astro-Ansichtstransitionen: sanftere Navigation ohne Rätsel — relevant, wenn du möchtest, dass Routenänderungen auf der Seite nahtlos erscheinen.
- Astro-Themen — durchstöbere Astro-Bauten, die von strukturierten Daten, Feeds und anderen endpunktgesteuerten Ausgaben profitieren können.
- Astro-Dokumentation: Endpunkte — offizielle Referenz für Routenverhalten, statische Generierung und SSR-Endpunkte.
Thema vertiefen
Weitere Astro-Guides, Glossar-Einträge und Workflows findest du im Themen-Hub.
Häufige Fragen
Wofür werden Astro-Endpunkte verwendet?
Astro-Endpunkte dienen dazu, Nicht-Seiten-Antworten von deiner Seite bereitzustellen, wie JSON, RSS-Feeds, Bilder oder andere API-ähnliche Ausgaben. Sie können zur Build-Zeit in statischen Seiten generiert oder zur Anforderungszeit im SSR-Modus behandelt werden. Das macht sie nützlich, wenn du Inhalte und Datenlieferung im selben Projekt haben möchtest.
Sind Astro-Endpunkte dasselbe wie API-Routen?
In der Praxis können Astro-Endpunkte wie API-Routen fungieren, wenn du sie verwendest, um auf Anfragen mit Daten oder Serverlogik zu antworten. Der Unterschied besteht darin, dass Astro dasselbe Endpunktsystem auch für die Generierung statischer Dateien verwendet, nicht nur für das Verhalten von Live-Servern.
Benötigen Astro-Endpunkte SSR?
Nein, Astro-Endpunkte benötigen kein SSR. Im statischen Modus kann Astro den Endpunkt zur Build-Zeit ausführen und das Ergebnis als Datei speichern. SSR ist nur erforderlich, wenn der Endpunkt bei jeder Anfrage ausgeführt werden soll und auf nur zur Laufzeit verfügbare Daten oder Verhalten zugreifen muss.
Können Astro-Endpunkte binäre Dateien zurückgeben?
Ja. Astro-Endpunkte können binäre Antworten wie Bilder zurückgeben, solange du ein korrektes Response-Objekt zurückgibst. Im SSR-Modus musst du auch den richtigen Content-Type-Header setzen, damit der Server und der Browser wissen, wie sie die Datei behandeln sollen.
Wie funktionieren dynamische Astro-Endpunkte?
Dynamische Endpunkte verwenden parametrisierte Routen und können Parameter empfangen, ähnlich wie Seiten. Im statischen Modus kombinierst du sie normalerweise mit `getStaticPaths()`, damit Astro weiß, welche Dateien zu generieren sind. Im Servermodus kann der Endpunkt Parameter zur Anforderungszeit ohne `getStaticPaths()` lesen.
Wann sollte ich Astro-Endpunkte anstelle eines separaten Backends verwenden?
Verwende Astro-Endpunkte, wenn die Antwort eng mit deiner Seite verbunden ist und du die Implementierung einfach im selben Codebeispiel halten möchtest. Sie eignen sich gut für Feeds, leichte JSON-Antworten, generierte Assets und Anfragen-zu-Logik, die kein vollständiges, eigenständiges Backend benötigt. Wenn du eine größere API-Oberfläche, komplexere Authentifizierung oder viele externe Integrationen benötigst, kann ein separates Backend besser sein.