Serveur 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 dans le style REST et peut être utilisé avec son homologue, le client RESTful Color Palette API, du côté client.
Une application qui obéit aux contraintes REST peut être décrite de manière informelle comme RESTful. Le serveur API RESTful permet des opérations de création, de lecture, de mise à jour et de suppression de couleurs (ressource inconnue pour être compatible avec l'API Reqres) et d'utilisateurs. Le serveur API RESTful fournit également une fonctionnalité de connexion/déconnexion. L'exemple est basé sur l'API Reqres.
Pour lancer l'application serveur, exécutez le binaire serveur :
./colorpaletteserver
ou
./colorpaletteserver --port 1234
Un paramètre facultatif port peut être fourni pour spécifier le port sur lequel le serveur doit être exécuté.
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 le tableau JSON avec 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 obtenir un seul élément de la liste d'entités, l'identifiant 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 autorisée. Pour autoriser la demande, la valeur de l'en-tête TOKEN doit être égale au jeton renvoyé précédemment 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 en tant qu'objet JSON, les méthodes POST renvoient é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 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 avec les champs email first_name last_name et avatar - pour créer de nouveaux utilisateurs. Par exemple, pour créer de nouveaux utilisateurs :
{
"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.