Depot dient zur Speicherung temporärer Daten, die während einer Anfrage verarbeitet werden. Middleware kann ihre verarbeiteten temporären Daten im Depot ablegen, um sie für nachfolgende Programme verfügbar zu machen.
Wenn ein Server eine Anfrage von einem Client-Browser empfängt, wird eine Instanz von Depot
erstellt. Diese Instanz wird nach der Bearbeitung der Anfrage durch alle Middleware und Handler
zerstört.
Zum Beispiel können wir in einer Login-Middleware current_user
setzen und dann in nachfolgender Middleware oder Handler
die aktuellen Benutzerinformationen auslesen.
Depot
wird verwendet, um Daten während der Anfrageverarbeitung zu speichern und zu teilen. Es implementiert einen typsicheren Datencontainer, der zwei Hauptnutzungsmodi unterstützt:
insert
/get
-Methodeninject
/obtain
-MethodenWie im Beispiel gezeigt, eignet sich Depot
besonders für die Datenweitergabe zwischen Middleware und Handlern. Middleware kann Werte (wie Benutzerinformationen oder Authentifizierungsstatus) im Depot
setzen, die nachfolgende Handler abrufen können, ohne sie erneut berechnen oder abfragen zu müssen. Das Design von Depot
gewährleistet Datenkonsistenz und Zugänglichkeit während der gesamten Anfrageverarbeitungskette und ist ein zentrales Werkzeug für den Aufbau komplexer Webanwendungen.
insert
undget
setzen und abrufenWie oben gezeigt, können mit insert
key
und value
in Depot
eingefügt werden. Für Werte dieses Typs kann direkt mit get
darauf zugegriffen werden.
Falls der key
nicht existiert oder der key
existiert, aber der Typ nicht übereinstimmt, wird None
zurückgegeben.
inject
undobtain
setzen und abrufenManchmal gibt es Fälle, in denen kein spezifischer key
benötigt wird und für diesen Typ nur eine einzige Instanz existiert. Hier können inject
zum Einfügen und obtain
zum Abrufen der Daten verwendet werden. Diese Methoden erfordern keinen key
.
Kategorie | Methode | Beschreibung |
---|---|---|
Erstellung/Kapazität | new() | Erstellt ein leeres Depot |
with_capacity(capacity) | Erstellt ein Depot mit angegebener Kapazität | |
capacity() | Ruft die Kapazität ab | |
inner() | Ruft die Referenz auf die interne HashMap ab | |
Typeninjektion/Abruf | inject<V>(value) | Fügt einen Wert nach Typ ein |
obtain<T>() | Ruft die Referenz auf den eingefügten Wert ab | |
obtain_mut<T>() | Ruft die veränderbare Referenz auf den eingefügten Wert ab | |
contains<T>() | Prüft, ob ein bestimmter Typ enthalten ist | |
scrape<T>() | Entfernt und gibt den eingefügten Wert zurück | |
Schlüssel-Wert-Operationen | insert(key, value) | Fügt ein Schlüssel-Wert-Paar ein |
get<V>(key) | Ruft die Referenz auf den Wert zum Schlüssel ab | |
get_mut<V>(key) | Ruft die veränderbare Referenz auf den Wert zum Schlüssel ab | |
contains_key(key) | Prüft, ob ein bestimmter Schlüssel enthalten ist | |
remove<V>(key) | Entfernt den Schlüssel und gibt den Wert zurück | |
delete(key) | Löscht das Schlüssel-Wert-Paar |