On this page

Qt Quick Demo - RESTful API client

Example of how to create a RESTful API QML client.

A color palette service GUI

This example shows how to create a basic QML RESTful API client with an imaginary color palette service. The application uses RESTful communication with a local server to request and send data. The REST service is provided as a QML element whose child elements wrap the individual JSON data APIs provided by the server.

Running the Example

You can run the example from:

Application functionality

The example provides the following basic functionalities:

  • List users and colors
  • Login and logout users
  • Modify and create new colors
Running the server

The client communicates with the Qt-based REST API server example in QtHttpServer, which listens on http://127.0.0.1:49425. Start that server before launching the client.

The client connects at startup and issues an HTTP GET to the color API. If the server cannot be reached, a dialog reports the failed connection and lets you retry once the server is running.

The Qt-based REST API server is a stateful application that lets you modify the colors, and the changes persist for the lifetime of the server process.

List users and colors

The users and colors are paginated resources on the server-side. This means that the server provides the data in chunks called pages. The UI listing reflects this pagination and views the data on pages.

Viewing the data on UI is done with standard QML views:

ListView {
    id: colorListView

    model: root.colors.data

Where the model is a list of JSON data received from the server.

Logging in

Logging in happens via the login function provided by the login popup:

userMenu.userLoginService.login({"email" : userInfo.modelData.email,
                    "password" : "apassword",
                    "id" : userInfo.modelData.id})

Under the hood, the login sends a HTTP POST request. Upon receiving a successful response, the authorization token is extracted from the response, which is then used in subsequent HTTP requests that require the token.

A GUI that lists the users

Editing colors

Editing and adding new colors is done in a popup:

A GUI for editing a color

Note that uploading the color changes to the server requires that a user has logged in.

REST implementation

The example illustrates one way to compose a REST service from individual resource elements. In this example, the resources are the paginated user and color resources plus the login service. The resource elements are bound together by the base URL (server URL) and the shared network access manager.

The basis of the REST service is the RestService element whose children items compose the actual service:

RestService {
    id: paletteService
    url: window.serverUrl

    PaginatedResource {
        id: users
        path: "users"
    }

    PaginatedResource {
        id: colorPalette
        path: "unknown"
    }

    BasicLogin {
        id: colorLogin
        loginPath: "login"
        logoutPath: "logout"
    }
}

Upon instantiation, the RestService element loops its children elements and sets them up to use the same network access manager. This way the individual resources share the same access details, such as the server URL and authorization token.

The actual communication is done with a rest access manager that implements some convenience functionality to deal specifically with HTTP REST APIs and effectively deals with sending and receiving the QNetworkRequest and QNetworkReply as needed.

Source files

Example project @ code.qt.io

See also All Qt Examples and Qt Quick Examples and Tutorials.

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