En esta página

QHttpServerRouterRule Class

QHttpServerRouterRule es la clase base para las reglas de QHttpServerRouter. Más...

Cabecera: #include <QHttpServerRouterRule>
CMake: find_package(Qt6 REQUIRED COMPONENTS HttpServer)
target_link_libraries(mytarget PRIVATE Qt6::HttpServer)
qmake: QT += httpserver
Desde: Qt 6.4

Funciones Públicas

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

Miembros públicos estáticos

typename ViewTraits::BindableType bindCaptured(QObject *receiver, Functor &&slot, const QRegularExpressionMatch &match)

Funciones Protegidas

bool exec(const QHttpServerRequest &request, QHttpServerResponder &responder) const
bool hasValidMethods() const
virtual bool matches(const QHttpServerRequest &request, QRegularExpressionMatch *match) const

Descripción Detallada

QHttpServerRouterRule define la relación entre una ruta de petición, un método HTTP y la correspondiente llamada de retorno del manejador. Un QHttpServerRouter es una colección de estas reglas, ejecutando el manejador apropiado cuando una petición coincide tanto con la ruta como con el método. El manejador es responsable de generar la respuesta.

Rutas y patrones

Cada QHttpServerRouterRule incluye una ruta o patrón que determina qué peticiones puede gestionar. Las rutas pueden contener marcadores de posición que se pasan al manejador. Los siguientes ejemplos ilustran patrones de ruta utilizando el método QHttpServer::route(), aunque también pueden ser definidos utilizando el constructor de QHttpServerRouterRule.

En el caso más simple la ruta es una cadena con un "/" al principio:

QHttpServer server;
server.route("/user", [] () { return "hello user"; } );

Este patrón de ruta define una regla que dirige todas las peticiones a "/user" al manejador especificado, que en este caso es una simple función lambda. (Tenga en cuenta que cuando se utiliza QHttpServerRouterRule directamente, la sintaxis del manejador es diferente - véase más adelante).

Un "/" final en el patrón de ruta permite que la regla coincida con rutas adicionales con argumentos después de "/". Cuando se utiliza el método de conveniencia QHttpServer::route(), el argumento se pasa automáticamente a la función lambda:

server.route("/user/", [] ( qint64 id ) { return "hello user"; } );

Esto coincidiría con rutas de petición como "/user/1", "/user/2", etc.

Captura de argumentos en la ruta

Puede colocar argumentos en cualquier lugar del patrón de la ruta utilizando los marcadores de posición "<arg>", y se admiten varios de ellos en la ruta:

server.route("/user/<arg>/history", [] (qint64 id){ return "hello user"; } );
server.route("/user/<arg>/history/", [] (qint64 id, qint64 page){ return "hello user"; } );

Por ejemplo, esto coincidiría con una petición como "/user/1/history/2". Cualquier tipo de dato registrado en QHttpServerRouter::converters() puede utilizarse tanto en la función de devolución de llamada como en los marcadores de posición correspondientes de la ruta.

Método de solicitud

El método de solicitud corresponde a uno de los valores de QHttpServerRequest::Method. Si no se especifica ningún método al construir una regla, ésta coincidirá con solicitudes de cualquier método conocido.

Firma del controlador

Un manejador es una función de devolución de llamada con la siguiente firma:

  • El primer argumento recibe cualquier grupo de captura coincidente de la ruta.
  • El segundo argumento contiene los detalles de la solicitud.
  • El tercer argumento se utiliza para enviar la respuesta.

Añadir reglas a QHttpServerRouter

El siguiente ejemplo muestra cómo crear y registrar una nueva regla con un manejador en 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"

Nota: Esta es una API de bajo nivel. Para alternativas de más alto nivel, consulte QHttpServer.

Nota: No se admiten expresiones regulares en los patrones de ruta, pero puede utilizar QHttpServerRouter::addConverter() para que "<arg>" coincida con un tipo específico.

Documentación de las funciones miembro

template <typename Functor> QHttpServerRouterRule::QHttpServerRouterRule(const QString &pathPattern, const QHttpServerRequest::Methods methods, const QObject *receiver, Functor &&slot)

Crea una regla de enrutamiento para pathPattern y methods, conectándolo a los receiver y slot especificados.

  • El slot puede ser un puntero de función, un lambda no mutable, o cualquier otro callable copiable con el operador de llamada const.
  • Si slot es invocable, receiver actúa como su objeto de contexto.
  • El manejador permanece válido hasta que se destruye receiver.

La regla puede manejar cualquier combinación de métodos HTTP disponibles.

Véase también QHttpServerRequest::Methods.

template <typename Functor> QHttpServerRouterRule::QHttpServerRouterRule(const QString &pathPattern, const QObject *receiver, Functor &&slot)

Esta sobrecarga construye una regla de enrutamiento para pathPattern y la asocia con receiver y slot.

  • Por defecto es QHttpServerRequest::Method::AnyKnown, lo que significa que coincidirá con cualquier método HTTP reconocido.
  • slot puede ser un puntero a una función, una lambda no mutable o cualquier otra llamada copiable con el operador de llamada const.
  • Si slot es invocable, receiver actúa como su objeto de contexto.
  • El manejador permanece válido hasta que se destruye receiver.

Se trata de una función sobrecargada.

[virtual noexcept] QHttpServerRouterRule::~QHttpServerRouterRule()

Destruye un QHttpServerRouterRule.

[static] template <typename Functor, typename ViewTraits = QHttpServerRouterViewTraits<Functor>> typename ViewTraits::BindableType QHttpServerRouterRule::bindCaptured(QObject *receiver, Functor &&slot, const QRegularExpressionMatch &match)

Vincula los sitios receiver y slot con argumentos extraídos de la URL. La función devuelve una llamada vinculada que toma los argumentos restantes requeridos por el controlador, proporcionándolos a slot después de los valores derivados de la URL.

Cada valor capturado de la URL (como cadena) se convierte al tipo de parámetro correspondiente en el manejador en función de su posición, lo que garantiza que pueda pasarse como 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) { // Bind and call viewHandler with match's captured string and quint32:    QHttpServerRouterRule::bindCaptured(pageView, match)(); }); router.addRule<ViewHandler>(std::move(rule));

const QObject *QHttpServerRouterRule::contextObject() const

Recupera el objeto de contexto asociado a esta regla. Este objeto sirve como receptor responsable de gestionar la solicitud.

[protected] bool QHttpServerRouterRule::exec(const QHttpServerRequest &request, QHttpServerResponder &responder) const

Ejecuta la regla. Procesa el request dado comprobando si coincide con esta regla.

  • Esta función es llamada por QHttpServerRouter cuando se recibe un nuevo request.
  • Si el request coincide con la regla, gestiona la petición enviando una respuesta a través del responder proporcionado y devuelve true.
  • Si no hay coincidencia, devuelve false.

[protected] bool QHttpServerRouterRule::hasValidMethods() const

Valida el método de solicitud. Devuelve true si el método HTTP especificado es válido.

[virtual protected] bool QHttpServerRouterRule::matches(const QHttpServerRequest &request, QRegularExpressionMatch *match) const

Determina si el request proporcionado cumple las condiciones de esta regla.

  • Esta función virtual es llamada por exec() para evaluar la request.
  • Si la solicitud coincide, los detalles se almacenan en match (que no debe ser nullptr), y la función devuelve true.
  • En caso contrario, devuelve 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.