Serveur d'API RESTful
Exemple de création d'un serveur d'API RESTful à l'aide de la classe QHttpServer.

Cet exemple montre comment créer et héberger des API Web RESTful simples dans une petite application à l’aide de la classe QHttpServer. Ce serveur accepte les appels au format REST et peut être utilisé avec son équivalent côté client, l’API RESTful Color Palette.
Une application qui respecte les contraintes REST peut être qualifiée de manière informelle de « RESTful ». Le serveur d’API RESTful permet d’effectuer des opérations de création, de lecture, de mise à jour et de suppression sur des couleurs (ressource inconnue pour assurer la compatibilité avec l’API Reqres) et des utilisateurs. Le serveur d’API RESTful fournit également des fonctionnalités de connexion et de déconnexion. Cet exemple est basé sur l’API Reqres.
Pour exécuter l'application serveur, lancez le binaire du serveur :
./colorpaletteserverou
./colorpaletteserver --port 1234Un paramètre facultatif ` port ` peut être fourni pour spécifier le port sur lequel le serveur doit s’exécuter.
httpServer.route(
QString("%1").arg(apiPath), QHttpServerRequest::Method::Get,
[&api](const QHttpServerRequest &request) { return api.getPaginatedList(request); });Dans l’exemple ci-dessus, la route est spécifiée pour la méthode GET, qui renvoie un tableau JSON contenant la liste paginée des éléments stockés. Pour ce faire, la méthode QHttpServer::route() est utilisée avec l’énumération QHttpServerRequest::Method::Get.
httpServer.route(QString("%1/<arg>").arg(apiPath), QHttpServerRequest::Method::Get,
[&api](qint64 itemId) { return api.getItem(itemId); });Pour récupérer un élément unique de la liste des entités, l'ID de l'élément est transmis dans la requête.
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);
});Dans cet exemple, la route accepte la méthode POST, qui ajoute une nouvelle entrée à la liste des éléments et renvoie un objet JSON représentant l’entrée ajoutée. Cette requête doit être authentifiée. Pour authentifier la requête, la valeur de l’en-tête TOKEN doit être égale au jeton précédemment renvoyé par les méthodes api/login ou api/register.
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);
}Outre la nouvelle entrée sous forme d’objet JSON, la méthode POST renvoie également différents codes d’état HTTP : Created pour les nouvelles entrées, ou AlreadyReported pour les entrées préexistantes. Cet exemple utilise une surcharge de la méthode QHttpServerResponse::QHttpServerResponse pour envoyer un objet JSON et le code d’état HTTP correspondant.
Pour créer une entrée, le corps de la requête doit être un objet JSON comportant les champs email, first_name, last_name et avatar – pour créer de nouveaux utilisateurs. Par exemple :
{
"email": "jane.doe@qt.io",
"first_name": "Jane",
"last_name": "Doe",
"avatar": "/img/faces/1-image.jpg"
}Fichiers :
- colorpalette/CMakeLists.txt
- colorpalette/apibehavior.h
- colorpalette/colorpalette.pro
- colorpalette/main.cpp
- colorpalette/types.h
- colorpalette/utils.h
Images :
- 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.