QHttpServerRouterRule Class | Qt HTTP Server 6.4.1

- Qt 6.4
- Qt HTTP Server
- C++ Classes
- QHttpServerRouterRule
- Qt 6.4.1 Reference Documentation

# QHttpServerRouterRule Class

The QHttpServerRouterRule is the base class for QHttpServerRouter rules. More...

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

- List of all members, including inherited members

## Public Functions

| QHttpServerRouterRule(const QString &pathPattern, const QHttpServerRequest::Methods methods, int routerHandler)
| QHttpServerRouterRule(const QString &pathPattern, int routerHandler)
virtual | ~QHttpServerRouterRule()

## Protected Functions

bool | exec(const QHttpServerRequest &request, QTcpSocket *socket) const
bool | hasValidMethods() const
virtual bool | matches(const QHttpServerRequest &request, QRegularExpressionMatch *match) const

## Detailed Description

Use QHttpServerRouterRule to specify expected request parameters:

Constant | Description
--- | ---
`path` | QUrl::path()
`HTTP` | methods QHttpServerRequest::Methods
`callback` | User-defined response callback

Note: This is a low level API, see QHttpServer for higher level alternatives.

Example of QHttpServerRouterRule and QHttpServerRouter usage:

     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,
                                                     QTcpSocket *const socket) mutable {
             auto boundViewHandler = router.bindCaptured<ViewHandler>(
                     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"

     // Invalid:
     route("/user/<arg>", [] () { } );  // ERROR: path pattern has <arg>, but ViewHandler does not have any arguments
     route("/user/\\d+", [] () { } );   // ERROR: path pattern does not support manual regexp

Note: Regular expressions in the path pattern are not supported, but can be registered (to match a use of "<val>" to a specific type) using QHttpServerRouter::addConverter().

## Member Function Documentation

### QHttpServerRouterRule::QHttpServerRouterRule(const QString &pathPattern, const QHttpServerRequest::Methods methods, int routerHandler)

Constructs a rule with pathPattern pathPattern, methods methods and routerHandler routerHandler.

The rule accepts any combinations of available HTTP methods.

See also QHttpServerRequest::Methods.

### QHttpServerRouterRule::QHttpServerRouterRule(const QString &pathPattern, int routerHandler)

Constructs a rule with pathPattern pathPattern, and routerHandler routerHandler.

The rule accepts all HTTP methods by default.

See also QHttpServerRequest::Methods.

### `[virtual]` QHttpServerRouterRule::~QHttpServerRouterRule()

Destroys a QHttpServerRouterRule.

### `[protected]` bool QHttpServerRouterRule::exec(const QHttpServerRequest &request, QTcpSocket *socket) const

Executes this rule for the given request, if it matches.

This function is called by QHttpServerRouter when it receives a new request. If the given request matches this rule, this function handles the request by delivering a response to the given socket, then returns `true`. Otherwise, it returns `false`.

### `[protected]` bool QHttpServerRouterRule::hasValidMethods() const

Returns `true` if the methods is valid

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

Determines whether a given request matches this rule.

This virtual function is called by exec() to check if request matches this rule. If a match is found, it is stored in the object pointed to by match (which must not be `nullptr`) and this function returns `true`. Otherwise, it returns `false`.