Sur cette page

Client de l'API RESTful ColorPalette

Exemple illustrant comment générer le code client OpenAPI et l'intégrer dans une application.

Tableau de palette de couleurs comprenant des échantillons de couleurs, leurs noms, leurs valeurs hexadécimales RVB, leurs valeurs Pantone et des boutons d'action

Cet exemple montre comment utiliser le générateur Qt OpenAPI pour créer du code client d’API RESTful à partir de la spécification colorpalette.yaml et l’intégrer dans une application QML. Sa structure et son interface utilisateur correspondent étroitement à l’exemple « Qt Quick Demo - RESTful API client », ce qui permet d’identifier facilement les différences au niveau de la mise en réseau et de l’approche d’intégration.

Exécution de l’exemple

Vous pouvez exécuter l’exemple à partir de :

Fonctionnalités de l’application

Cet exemple offre les mêmes fonctionnalités de base que la démo «Qt Quick » - Client API RESTful.

Sélection du serveur

Au démarrage, l’application propose une option de serveur prédéfinie avec laquelle le client Color Palette peut communiquer :

Une fois le serveur sélectionné et le bouton « Connect » (Générer le code client) cliqué, le client API RESTful envoie une requête HTTP GET de test pour vérifier que le serveur est disponible. Si le serveur n’est pas en cours d’exécution, l’application reste sur la vue de sélection du serveur.

Boîte de dialogue de sélection de serveur proposant une option de serveur API REST basé sur Qt et un bouton « Se connecter »

Génération du code client à partir d’une spécification OpenAPI

Le fichier « CMakeLists.txt » invoque le générateur Qt OpenAPI pour générer du code client à partir de la spécification colorpalette.yaml en appelant la fonction qt_add_openapi_client().

qt_add_openapi_client(ColorpaletteClientExample
    SPEC_FILE
        ${CMAKE_CURRENT_SOURCE_DIR}/colorpalette.yaml
)

Les classes API générées ColorsApi et UsersApi gèrent tous les détails HTTP de bas niveau :

  • Configuration du serveur
  • Construction des requêtes HTTP pour toutes les méthodes HTTP standard
  • Sérialisation des paramètres d’entrée conformément à la spécification
  • Désérialisation des réponses du serveur en objets typés
  • Les succès et les erreurs sont signalés via des signaux Qt

Par rapport à l'autre version de l'exemple qui utilise directement les API QtNetworkAuth, cette approche élimine la construction manuelle des requêtes réseau.

Exposition des API générées vers QML

Les classes d'API générées ColorsApi et UsersApi sont exposées à QML via des classes d'aide définies dans ApiBridges.h. Chaque classe d'aide utilise la macro QML_FOREIGN et enregistre l'instance C++ sous-jacente en tant que singleton, ce qui permet à QML d'accéder au même objet tout en conservant la propriété en C++. Pour plus de détails sur ce sujet, consultez la documentation Qt Qml sur l'exposition d'un objet existant en tant que singleton.

struct ForeignColorsAPI
{
    Q_GADGET
    QML_FOREIGN(QtOpenAPI::ColorsApi)
    QML_SINGLETON
    QML_NAMED_ELEMENT(ColorsApi)

};

Utilisation des API depuis QML

Une fois enregistrées, les API sont disponibles de manière globale dans QML. Cela permet aux composants QML d’accéder directement à ColorsApi et UsersApi et d’appeler leurs méthodes, comme illustré ci-dessous :

ColorsApi.getColors(page)

Chaque méthode d’API émet des signaux lorsque l’opération aboutit ou échoue, ce qui permet aux composants QML de gérer les réponses du serveur :

function onAddColorFinished() {
    root.fetchColors(root.currentColorPage)
}

function onAddColorErrorOccurred(errorType, errorStr) {
    root.handleError(errorStr)
}
Types singleton d’aide

Certaines méthodes d’API prennent des types non triviaux en paramètres, tels que ` Credentials ` et ` Color`. L’exemple fournit des singletons QML permettant de construire des instances de ces types dans ` ApiBridges.h` :

class Credentials: public QObject
{
    Q_OBJECT
    QML_ELEMENT
    QML_SINGLETON
public:
    Q_INVOKABLE QtOpenAPI::Credentials create(const QString &email, const QString &password)
    {
        QtOpenAPI::Credentials credentials;
        credentials.setEmail(email);
        credentials.setPassword(password);
        return credentials;
    }
};

Ces singletons peuvent ensuite être utilisés en QML lors de l’appel de méthodes de l’API. Par exemple, ` Credentials ` est utilisé pour créer un objet d’identifiants avant la connexion :

let credentials = Credentials.create(userInfo.model.email, "apassword");
UsersApi.loginUser(credentials);

Fichiers source

Projet d’exemple sur code.qt.io

Voir également Tous les exemples Qt, DémonstrationQt Quick – Client API RESTful et Serveur API RESTful.

© 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.