QHttpServerRouterRule Class
Die QHttpServerRouterRule ist die Basisklasse für QHttpServerRouter Regeln. Mehr...
Kopfzeile: | #include <QHttpServerRouterRule> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS HttpServer) target_link_libraries(mytarget PRIVATE Qt6::HttpServer) |
qmake: | QT += httpserver |
Seit: | Qt 6.4 |
Öffentliche Funktionen
QHttpServerRouterRule(const QString &pathPattern, const QHttpServerRequest::Methods methods, const QObject *receiver, Functor &&slot) | |
QHttpServerRouterRule(const QString &pathPattern, const QObject *receiver, Functor &&slot) | |
virtual | ~QHttpServerRouterRule() |
const QObject * | contextObject() const |
Statische öffentliche Mitglieder
typename ViewTraits::BindableType | bindCaptured(QObject *receiver, Functor &&slot, const QRegularExpressionMatch &match) |
Geschützte Funktionen
bool | exec(const QHttpServerRequest &request, QHttpServerResponder &responder) const |
bool | hasValidMethods() const |
virtual bool | matches(const QHttpServerRequest &request, QRegularExpressionMatch *match) const |
Detaillierte Beschreibung
QHttpServerRouterRule drückt die Verbindung zwischen einem Anfragepfad, einer HTTP-Anfragemethode und dem entsprechenden Handler-Callback aus. Die QHttpServerRouter ist eine Sammlung solcher Regeln, aus der die Handler aufgerufen werden, wenn der Pfad und die Anfragemethode mit der Anfrage übereinstimmen. Der Handler-Callback muss die Antwort auf die Anfrage liefern.
Pfad und Patterns
Jede QHttpServerRouterRule enthält einen Pfad oder ein Pfadmuster, das die Pfade definiert, für die sie über ihren Handler eine Antwort liefern kann. Der Pfad kann Platzhalter enthalten, die an den Handler der Regel weitergeleitet werden. Die folgenden Beispiele von Pfadmustern werden mit der Komfortmethode QHttpServer::route gezeigt, können aber auch dem Konstruktor von QHttpServerRouterRule übergeben werden.
Im einfachsten Fall ist der Pfad ein String mit einem führenden "/":
QHttpServer server; server.route("/user", [] () { return "hello user"; } );
Dieses Pfadmuster erstellt eine Regel, die alle Anfragen mit "/user" an den bereitgestellten Handler weiterleitet, der in diesem Fall ein einfaches Lambda ist (beachten Sie, dass die Syntax des Handlers anders aussehen würde, wenn Sie QHttpServerRouterRule direkt verwenden, siehe unten).
Das Pfadmuster kann weiterhin ein abschließendes "/" enthalten, um eine Regel zu erstellen, die eine Sammlung von Pfaden mit Argumenten nach dem abschließenden "/" anspricht. Das Argument wird als QRegularExpressionMatch an die Regel weitergeleitet. Mit der Komfortmethode QHttpServer::route wird das Argument direkt an das Lambda weitergeleitet:
server.route("/user/", [] ( qint64 id ) { return "hello user"; } );
Dies würde den Anfrage-Urls "/user/1", "/user/2" usw. entsprechen.
Das Argument kann durch Verwendung des Platzhalters "<arg>" frei mit dem Pfadmuster positioniert werden. Dieses Schlüsselwort erlaubt außerdem mehrere Platzhalter.
server.route("/user/<arg>/history", [] (qint64 id){ return "hello user"; } ); server.route("/user/<arg>/history/", [] (qint64 id, qint64 page){ return "hello user"; } );
Dies würde z. B. auf die Anfrage url "/user/1/history/2" passen. Alle Typen, die in QHttpServerRouter::converters() registriert sind, können im Callback und dem jeweiligen Platzhalter verwendet werden.
Anforderungsmethode
Die Anfragemethode ist einfach eine von QHttpServerRequest::Method. Wenn bei einer Überladung der Regelkonstruktion keine Methode angegeben wird, passt die Regel auf jede Anfragemethode.
Handler-Signatur
Der Handler ist ein Callback mit der Signatur
void (*)(const QRegularExpressionMatch &, const QHttpServerRequest &, QHttpServerResponder &);
Der Handler-Callback erhält alle übereinstimmenden Platzhalter als sein erstes Argument. Das zweite Argument enthält Details über die Anfrage und die Antwort muss vom Handler in das letzte Argument geschrieben werden.
Das folgende Codebeispiel zeigt, wie neue Regeln mit dem entsprechenden Handler erstellt und zu einer QHttpServerRouter hinzugefügt werden können:
template<typename ViewHandler> void route(const char *path, const QHttpServerRequest::Methods methods, ViewHandler &&viewHandler) { auto rule = std::make_unique<QHttpServerRouterRule>( path, methods, [this, viewHandler = std::forward<ViewHandler>(viewHandler)] (QRegularExpressionMatch &match, const QHttpServerRequest &request, QHttpServerResponder &responder) mutable { auto boundViewHandler = QHttpServerRouterRule::bindCaptured<ViewHandler>( this, std::move(viewHandler), match); // call viewHandler boundViewHandler(); }); // QHttpServerRouter router.addRule<ViewHandler>(std::move(rule)); } // Valid: route("/user/", [] (qint64 id) { } ); // "/user/1" // "/user/3" // route("/user/<arg>/history", [] (qint64 id) { } ); // "/user/1/history" // "/user/2/history" // route("/user/<arg>/history/", [] (qint64 id, qint64 page) { } ); // "/user/1/history/1" // "/user/2/history/2"
Hinweis: Dies ist eine API auf niedriger Ebene, siehe QHttpServer für Alternativen auf höherer Ebene.
Hinweis: Reguläre Ausdrücke im Pfadmuster werden nicht unterstützt, können aber mit QHttpServerRouter::addConverter() registriert werden (um eine Verwendung von "<arg>" mit einem bestimmten Typ abzugleichen).
Dokumentation der Mitgliedsfunktionen
template <typename Functor> QHttpServerRouterRule::QHttpServerRouterRule(const QString &pathPattern, const QHttpServerRequest::Methods methods, const QObject *receiver, Functor &&slot)
Konstruiert eine Regel für pathPattern, methods und verbindet sie mit receiver und slot. slot kann auch ein Funktionszeiger, ein nicht-mutierbares Lambda oder ein anderes kopierbares callable mit const call operator sein. In diesem Fall wird receiver ein Kontextobjekt sein. Der Handler ist so lange gültig, bis das Empfängerobjekt zerstört wird.
Die Regel akzeptiert alle Kombinationen der verfügbaren HTTP-Methoden.
Siehe auch QHttpServerRequest::Methods.
template <typename Functor> QHttpServerRouterRule::QHttpServerRouterRule(const QString &pathPattern, const QObject *receiver, Functor &&slot)
Dies ist eine überladene Funktion.
Konstruiert eine Regel für pathPattern, QHttpServerRequest::Method::AnyKnown und verbindet sie mit receiver und slot. slot kann auch ein Funktionszeiger, ein nicht-mutierbares Lambda oder ein anderes kopierbares callable mit const call Operator sein. In diesem Fall wird receiver ein Kontextobjekt sein. Der Handler ist so lange gültig, bis das Empfängerobjekt zerstört wird.
[virtual noexcept]
QHttpServerRouterRule::~QHttpServerRouterRule()
Zerstört eine QHttpServerRouterRule.
[static]
template <typename Functor, typename ViewTraits = QHttpServerRouterViewTraits<Functor>> typename ViewTraits::BindableType QHttpServerRouterRule::bindCaptured(QObject *receiver, Functor &&slot, const QRegularExpressionMatch &match)
Versorgt receiver und slot mit Argumenten, die von einer URL abgeleitet sind. Gibt die gebundene Funktion zurück, die alle verbleibenden Argumente akzeptiert, die der Handler annehmen kann, und liefert sie an den Slot nach den von der URL abgeleiteten Werten. Jede Übereinstimmung des auf die URL angewandten Regex (als Zeichenkette) wird in den Typ des Handler-Parameters an seiner Position konvertiert, so dass er als match übergeben werden kann.
QHttpServerRouter router;auto pageView = [](const QString &page, const quint32 num) { qDebug("page: %s, num: %d", qPrintable(page), num); };using ViewHandler = decltype(pageView);auto rule = std::make_unique<QHttpServerRouterRule>( "/<arg>/<arg>/log", [&router, &pageView] (QRegularExpressionMatch &match, const QHttpServerRequest&request, QHttpServerResponder&&responder) { // Binden und Aufrufen von viewHandler mit der erfassten Zeichenkette von match und quint32: QHttpServerRouterRule::bindCaptured(pageView, match)(); }); router.addRule<ViewHandler>(std::move(rule));
const QObject *QHttpServerRouterRule::contextObject() const
Gibt das Kontextobjekt dieser Regel zurück. Dies ist der Empfänger, der die Anfrage bearbeiten muss.
[protected]
bool QHttpServerRouterRule::exec(const QHttpServerRequest &request, QHttpServerResponder &responder) const
Führt diese Regel für die angegebene request aus.
Diese Funktion wird von QHttpServerRouter aufgerufen, wenn sie eine neue Anfrage erhält. Wenn die angegebene request mit dieser Regel übereinstimmt, bearbeitet diese Funktion die Anfrage, indem sie eine Antwort an die angegebene responder sendet, und gibt dann true
zurück. Andernfalls gibt sie false
zurück.
[protected]
bool QHttpServerRouterRule::hasValidMethods() const
Gibt true
zurück, wenn die Methode gültig ist.
[virtual protected]
bool QHttpServerRouterRule::matches(const QHttpServerRequest &request, QRegularExpressionMatch *match) const
Ermittelt, ob eine gegebene request dieser Regel entspricht.
Diese virtuelle Funktion wird von exec() aufgerufen, um zu prüfen, ob request mit dieser Regel übereinstimmt. Wenn eine Übereinstimmung gefunden wird, wird sie in dem Objekt gespeichert, auf das match zeigt (das nicht nullptr
sein darf ), und diese Funktion gibt true
zurück. Andernfalls gibt sie false
zurück.
© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.