QHttpServerRouterRule Class
La classe `QHttpServerRouterRule` est la classe de base des règles de routage d'QHttpServerRouter. En savoir plus...
| En-tête : | #include <QHttpServerRouterRule> |
| CMake : | find_package(Qt6 REQUIRED COMPONENTS HttpServer) target_link_libraries(mytarget PRIVATE Qt6::HttpServer) |
| qmake : | QT += httpserver |
| Depuis : | Qt 6.4 |
Fonctions publiques
| 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 |
Membres publics statiques
| typename ViewTraits::BindableType | bindCaptured(QObject *receiver, Functor &&slot, const QRegularExpressionMatch &match) |
Fonctions protégées
| bool | exec(const QHttpServerRequest &request, QHttpServerResponder &responder) const |
| bool | hasValidMethods() const |
| virtual bool | matches(const QHttpServerRequest &request, QRegularExpressionMatch *match) const |
Description détaillée
QHttpServerRouterRule définit la relation entre un chemin de requête, une méthode HTTP et la fonction de rappel du gestionnaire correspondante. Un « QHttpServerRouter » est un ensemble de ces règles, qui exécute le gestionnaire approprié lorsqu’une requête correspond à la fois au chemin et à la méthode. Le gestionnaire est chargé de générer la réponse.
Chemins et modèles
Chaque QHttpServerRouterRule comprend un chemin ou un modèle qui détermine les requêtes qu’elle peut traiter. Les chemins peuvent contenir des espaces réservés qui sont transmis au gestionnaire. Les exemples ci-dessous illustrent des modèles de chemin à l’aide de la méthode de commodité QHttpServer::route(), bien qu’ils puissent également être définis à l’aide du constructeur de QHttpServerRouterRule.
Dans le cas le plus simple, le chemin est une chaîne de caractères commençant par "/":
QHttpServer server;
server.route("/user", [] () { return "hello user"; } );Ce modèle de chemin définit une règle qui redirige toutes les requêtes vers "/user" vers le gestionnaire spécifié, qui est dans ce cas une simple fonction lambda. (Notez que lorsque vous utilisez directement QHttpServerRouterRule, la syntaxe du gestionnaire diffère — voir ci-dessous.)
La présence de « "/" » à la fin du modèle de chemin permet à la règle de correspondre à des chemins supplémentaires comportant des arguments après « "/" ». Lorsque vous utilisez la méthode de commodité ` QHttpServer::route()`, l’argument est automatiquement transmis à la fonction lambda :
server.route("/user/", [] ( qint64 id ) { return "hello user"; } );Cela correspondrait à des chemins de requête tels que "/user/1", "/user/2", etc.
Capture d’arguments dans le chemin
Vous pouvez placer des arguments n’importe où dans le modèle de chemin à l’aide des espaces réservés "<arg>", et plusieurs d’entre eux sont pris en charge dans le chemin :
server.route("/user/<arg>/history", [] (qint64 id){ return "hello user"; } );
server.route("/user/<arg>/history/", [] (qint64 id, qint64 page){ return "hello user"; } );Par exemple, cela correspondrait à une requête telle que "/user/1/history/2". Tout type de données enregistré dans QHttpServerRouter::converters() peut être utilisé à la fois dans la fonction de rappel et dans les espaces réservés correspondants du chemin.
Méthode de requête
La méthode de requête correspond à l’une des valeurs de QHttpServerRequest::Method. Si aucune méthode n’est spécifiée lors de la création d’une règle, celle-ci correspondra aux requêtes de n’importe quelle méthode connue.
Signature du gestionnaire
Un gestionnaire est une fonction de rappel présentant la signature suivante :
void (*)(const QRegularExpressionMatch &, const QHttpServerRequest &, QHttpServerResponder &);- Le premier argument reçoit les groupes de capture correspondants issus du chemin d'accès.
- Le deuxième argument contient les détails de la requête.
- Le troisième argument sert à envoyer la réponse.
Ajout de règles à QHttpServerRouter
L'exemple ci-dessous montre comment créer et enregistrer une nouvelle règle avec un gestionnaire dans ` QHttpServerRouter` :
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);
boundViewHandler(); // Execute the handler
});
// Add rule to the router
router.addRule<ViewHandler>(std::move(rule));
}
// Valid:
route("/user/", [] (qint64 id) { } ); // Matches "/user/1", "/user/3", etc.
route("/user/<arg>/history", [] (qint64 id) { } ); // Matches "/user/1/history", "/user/2/history"
route("/user/<arg>/history/", [] (qint64 id, qint64 page) { } ); // Matches "/user/1/history/1", "/user/2/history/2"Remarque : il s'agit d'une API de bas niveau. Pour des alternatives de plus haut niveau, consultez QHttpServer.
Remarque : les expressionsrégulières ne sont pas prises en charge dans les modèles de chemin d'accès, mais vous pouvez utiliser QHttpServerRouter::addConverter() pour faire correspondre "<arg>" à un type spécifique.
Documentation sur les fonctions membres
template <typename Functor> QHttpServerRouterRule::QHttpServerRouterRule(const QString &pathPattern, const QHttpServerRequest::Methods methods, const QObject *receiver, Functor &&slot)
Crée une règle de routage pour pathPattern et methods, en les reliant aux adresses spécifiées receiver et slot.
- La fonction slot peut être un pointeur de fonction, un lambda non modifiable ou tout autre objet appelable copiable doté de l'opérateur d'appel
const. - Si slot est une entité appelable, receiver fait office d’objet de contexte.
- Le gestionnaire reste valide jusqu’à ce que l’ receiver soit détruit.
La règle peut gérer n'importe quelle combinaison de méthodes HTTP disponibles.
Voir également QHttpServerRequest::Methods.
template <typename Functor> QHttpServerRouterRule::QHttpServerRouterRule(const QString &pathPattern, const QObject *receiver, Functor &&slot)
Cette surcharge crée une règle de routage pour pathPattern et l'associe à receiver et slot.
- La valeur par défaut est QHttpServerRequest::Method::AnyKnown, ce qui signifie qu'elle correspondra à toute méthode HTTP reconnue.
- La fonction slot peut être un pointeur de fonction, un lambda non modifiable ou tout autre objet appelable copiable doté de l'opérateur d'appel
const. - Si slot est un objet appelable, receiver fait office d’objet de contexte.
- Le gestionnaire reste valide jusqu’à la destruction de l’ receiver.
Il s’agit d’une fonction surchargée.
[virtual noexcept] QHttpServerRouterRule::~QHttpServerRouterRule()
Supprime un objet de type « QHttpServerRouterRule ».
[static] template <typename Functor, typename ViewTraits = QHttpServerRouterViewTraits<Functor>> typename ViewTraits::BindableType QHttpServerRouterRule::bindCaptured(QObject *receiver, Functor &&slot, const QRegularExpressionMatch &match)
Lie les URL receiver et slot aux arguments extraits de l'URL. La fonction renvoie une fonction appelable liée qui prend tous les arguments restants requis par le gestionnaire, en les transmettant à slot après les valeurs dérivées de l'URL.
Chaque valeur capturée à partir de l’URL (sous forme de chaîne de caractères) est convertie en type de paramètre correspondant dans le gestionnaire en fonction de sa position, ce qui garantit qu’elle peut être transmise sous la forme match.
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) {
// Lier et appeler viewHandler avec la chaîne et le quint32 capturés par match :
QHttpServerRouterRule::bindCaptured(pageView, match)();
});
router.addRule<ViewHandler>(std::move(rule));const QObject *QHttpServerRouterRule::contextObject() const
Récupère l'objet de contexte associé à cette règle. Cet objet fait office de récepteur chargé de traiter la requête.
[protected] bool QHttpServerRouterRule::exec(const QHttpServerRequest &request, QHttpServerResponder &responder) const
Exécute la règle. Traite l'request ion fournie en vérifiant si elle correspond à cette règle.
- Cette fonction est appelée par QHttpServerRouter lorsqu’une nouvelle request est reçue.
- Si l'request correspond à la règle, elle traite la requête en envoyant une réponse via l'responder fournie et renvoie
true. - S'il n'y a pas de correspondance, elle renvoie
false.
[protected] bool QHttpServerRouterRule::hasValidMethods() const
Vérifie la validité de la méthode de requête. Renvoie « true » si la méthode HTTP indiquée est valide.
[virtual protected] bool QHttpServerRouterRule::matches(const QHttpServerRequest &request, QRegularExpressionMatch *match) const
Détermine si l'request fournie remplit les conditions de cette règle.
- Cette fonction virtuelle est appelée par ` exec()` pour évaluer ` request`.
- Si la requête correspond, les détails sont stockés dans ` match ` (qui ne doit pas être `
nullptr`), et la fonction renvoie `true`. - Sinon, elle renvoie
false.
© 2026 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.