RESTful-API-Server
Beispiel für die Erstellung eines RESTful-API-Servers mithilfe der Klasse „ QHttpServer “.

Dieses Beispiel zeigt, wie man mit der Klasse „ QHttpServer “ einfache RESTful-Web-APIs in einer kleinen Anwendung erstellt und hostet. Dieser Server akzeptiert Aufrufe im REST-Stil und kann auf der Client-Seite mit dem dazugehörigen Beispiel-Client „RESTful Color Palette API“ verwendet werden.
Eine Anwendung, die die REST-Vorgaben einhält, kann informell als RESTful bezeichnet werden. Der RESTful-API-Server ermöglicht Create-, Read-, Update- und Delete-Operationen für Farben (unbekannte Ressource, um mit der Reqres-API kompatibel zu sein) und Benutzer. Der RESTful-API-Server bietet außerdem Anmelde- und Abmeldefunktionen. Das Beispiel basiert auf der Reqres-API.
Um die Serveranwendung auszuführen, führen Sie die Server-Binärdatei aus:
./colorpaletteserveroder
./colorpaletteserver --port 1234Optional kann der Parameter ` port ` angegeben werden, um den Port festzulegen, auf dem der Server laufen soll.
httpServer.route(
QString("%1").arg(apiPath), QHttpServerRequest::Method::Get,
[&api](const QHttpServerRequest &request) { return api.getPaginatedList(request); });Im obigen Beispiel wird die Route für die GET-Methode angegeben, die ein JSON-Array mit einer paginierten Liste der gespeicherten Elemente zurückgibt. Dazu wird die Methode ` QHttpServer::route()` mit der Enumeration ` QHttpServerRequest::Method::Get ` verwendet.
httpServer.route(QString("%1/<arg>").arg(apiPath), QHttpServerRequest::Method::Get,
[&api](qint64 itemId) { return api.getItem(itemId); });Um ein einzelnes Element aus der Liste der Entitäten abzurufen, wird die Element-ID in der Abfrage der Anfrage übergeben.
httpServer.route(QString("%1").arg(apiPath), QHttpServerRequest::Method::Post,
[&api, &sessionApi](const QHttpServerRequest &request) {
if (!sessionApi.authorize(request)) {
return QHttpServerResponse(
QHttpServerResponder::StatusCode::Unauthorized);
}
return api.postItem(request);
});In diesem Beispiel akzeptiert die Route die POST-Methode, die einen neuen Eintrag zur Elementliste hinzufügt und ein JSON-Objekt zurückgibt, das den hinzugefügten Eintrag darstellt. Diese Anfrage muss autorisiert werden. Zur Autorisierung der Anfrage muss der Wert des Headers „ TOKEN “ mit dem zuvor von den Methoden „ api/login “ oder „ api/register “ zurückgegebenen Token übereinstimmen.
QHttpServerResponse postItem(const QHttpServerRequest &request)
{
const std::optional<QJsonObject> json = byteArrayToJsonObject(request.body());
if (!json)
return QHttpServerResponse(QHttpServerResponder::StatusCode::BadRequest);
const std::optional<T> item = factory->fromJson(*json);
if (!item)
return QHttpServerResponse(QHttpServerResponder::StatusCode::BadRequest);
if (data.contains(item->id))
return QHttpServerResponse(QHttpServerResponder::StatusCode::AlreadyReported);
const auto entry = data.insert(item->id, *item);
return QHttpServerResponse(entry->toJson(), QHttpServerResponder::StatusCode::Created);
}Neben dem neuen Eintrag als JSON-Objekt geben POST-Methoden auch unterschiedliche HTTP-Statuscodes zurück: „ Created “ für neue Einträge oder „ AlreadyReported “ für bereits vorhandene Einträge. Dieses Beispiel nutzt eine Überladung von „ QHttpServerResponse::QHttpServerResponse “, um ein JSON-Objekt und den entsprechenden HTTP-Statuscode zu senden.
Um einen Eintrag zu erstellen, muss der Request-Body ein JSON-Objekt mit den Feldern „ email “, „ first_name “, „ last_name “ und „ avatar “ sein – um neue Benutzer anzulegen. Zum Beispiel:
{
"email": "jane.doe@qt.io",
"first_name": "Jane",
"last_name": "Doe",
"avatar": "/img/faces/1-image.jpg"
}Dateien:
- colorpalette/CMakeLists.txt
- colorpalette/apibehavior.h
- colorpalette/colorpalette.pro
- colorpalette/main.cpp
- colorpalette/types.h
- colorpalette/utils.h
Bilder:
- colorpalette/assets/img/1-image.jpg
- colorpalette/assets/img/10-image.jpg
- colorpalette/assets/img/11-image.jpg
- colorpalette/assets/img/12-image.jpg
- colorpalette/assets/img/2-image.jpg
- colorpalette/assets/img/3-image.jpg
- colorpalette/assets/img/4-image.jpg
- colorpalette/assets/img/5-image.jpg
- colorpalette/assets/img/6-image.jpg
- colorpalette/assets/img/7-image.jpg
- colorpalette/assets/img/8-image.jpg
- colorpalette/assets/img/9-image.jpg
© 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.