Ablaufverarbeitung
Der Service wandelt die Anfrage zunächst in die Response von Salvo um und tritt dann in die Routing-Matching-Phase ein.
Routing-Matching-Phase
Beim Routing-Matching werden Filter in der Reihenfolge ihrer Hinzufügung ausgeführt, von außen nach innen und von oben nach unten. Wenn ein Filter fehlschlägt, gilt der Match als nicht erfolgreich.
Während des Matching-Prozesses werden die Pfadinformationen der Anfrage schrittweise verbraucht. Sobald ein Pfadfilter erfolgreich matched, verbraucht er den gematchten Teil des Pfads. Wenn alle Pfadsegmente verbraucht sind, kein Filter in der Matching-Kette fehlschlägt und der letzte Router in der aktuellen Kette ein goal-Handler hat, ist der Match erfolgreich und die Matching-Phase endet. Alle Handler, die aus der Matching-Kette gesammelt wurden, gehen in die Ausführungsphase über.
Wenn der Pfad nicht vollständig verbraucht ist, keine Fehler in der Kette auftreten, aber keine weiteren untergeordneten Routen zum Fortsetzen des Matchings vorhanden sind, gilt die aktuelle Kette als Match-Fehler, und der Prozess wechselt zur nächsten Route für das Matching.
Wenn alle Routen ohne Erfolg gematcht wurden, tritt der Prozess in die Fehlerbehandlungsphase ein.
Handler-Ausführungsphase
Die während der Matching-Phase gesammelten Handler werden nacheinander ausgeführt. Während der Ausführung können vorherige Middleware ctrl::call_next() aufrufen, um nachfolgende Middleware zuerst ausführen zu lassen, bevor ihre eigene Logik ausgeführt wird. Wenn während der Ausführung ein Fehlerstatuscode oder eine Weiterleitung auftritt, werden nachfolgende Handler nicht ausgeführt. Wenn der Statuscode einen Fehler anzeigt und der Body der Response nicht gesetzt ist oder ResBody::Error ist, tritt der Prozess in die Fehlerbehandlungsphase ein; andernfalls wird die Fehlerbehandlungsphase übersprungen.
Fehlerbehandlungsphase
Catcher ist ein Typ zur Fehlerbehandlung und kann auch Middleware (Hoops) enthalten. Fehler durchlaufen nacheinander alle Handler innerhalb des Catchers. Wenn ein Handler den Fehler bereits behandelt hat und nicht möchte, dass nachfolgende Handler fortfahren, kann er den Rest mit ctrl.skip_rest() überspringen und die Fehlerbehandlungsphase direkt beenden.
Catcher muss mindestens einen Handler als Standard-Fehlerbehandler enthalten. Der Standard ist DefaultGoal, aber Sie können Ihren eigenen Handler vollständig anpassen, um die Standard-Fehlerbehandlung zu implementieren. Es zeigt Fehlerinformationen im vom content-type-Header angeforderten Format an und unterstützt json, xml, text und html Formate. DefaultGoal bietet auch Anzeigeeinstellungen; standardmäßig zeigt es beispielsweise Salvo-bezogene Links an, wenn das HTML-Format angezeigt wird. Sie können DefaultGoal::footer oder DefaultGoal::with_footer aufrufen, um eine benutzerdefinierte Fußzeile nach Wunsch festzulegen.
Service wandelt die Response von Salvo in den Hyper-Response-Typ um, der letztendlich an Clients wie Browser zurückgegeben wird.
Salvo-Anfragelebenszyklus
Dies ist eine visuelle Darstellung und Erklärung des HTTP-Anfragelebenszyklus im Salvo-Web-Framework.