本页面

Qt Quick 演示 - RESTful API 客户端

如何创建 RESTful API QML 客户端的示例。

调色板服务图形用户界面

本示例展示了如何使用假想的调色板服务创建一个基本的 QML RESTful API 客户端。应用程序使用 RESTful 通信与选定的服务器进行数据请求和发送。REST 服务以 QML 元素的形式提供,其子元素封装了服务器提供的各个 JSON 数据 API。

运行示例

要从 Qt Creator,打开Welcome 模式,并从Examples 中选择示例。更多信息,请参阅Qt Creator: Tutorial:构建并运行

应用程序功能

示例提供以下基本功能:

  • 选择要通信的服务器
  • 列出用户和颜色
  • 登录和注销用户
  • 修改和创建新颜色
选择服务器

启动时,应用程序会显示调色板服务器可与之通信的预定义选项:

一旦选择了这些选项,RESTful API 客户端就会向 color API 发送测试 HTTP GET,以检查服务是否可访问。

显示两个服务器供选择的图形用户界面

这两个预定义 API 选项之间的一个主要区别是,基于 Qt XML 的 REST API 服务器示例是一个有状态的应用程序,可以让你修改颜色,而reqres.in 是一个无状态的 API 测试服务。换句话说,在使用reqres.in 后端时,修改颜色不会产生持久影响。

列出用户和颜色

用户和颜色是服务器端的分页资源。这意味着服务器以称为页面的块为单位提供数据。用户界面列表反映了这种分页方式,并在页面上查看数据。

通过标准 QML 视图在用户界面上查看数据:

ListView {
    id: colorListView

    model: root.colors.data

其中模型是从服务器接收的 JSON 数据列表。

登录

登录通过登录弹出窗口提供的登录功能进行:

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

在其内部,登录会发送 HTTP POST 请求。收到成功响应后,会从响应中提取授权令牌,然后将其用于需要该令牌的后续 HTTP 请求。

列出用户的图形用户界面

编辑颜色

编辑和添加新颜色是在弹出式窗口中完成的:

编辑颜色的图形用户界面

请注意,将颜色更改上传到服务器需要用户已登录。

REST 实现

该示例说明了从单个资源元素组成 REST 服务的一种方法。在本例中,资源是分页的usercolor 资源以及登录服务。资源元素通过基本 URL(服务器 URL)和共享网络访问管理器绑定在一起。

REST 服务的基础是RestService 元素,其子项组成了实际服务:

RestService {
    id: paletteService

    PaginatedResource {
        id: users
        path: "users"
    }

    PaginatedResource {
        id: colors
        path: "unknown"
    }

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

在实例化时,RestService 元素会循环其子元素,并将它们设置为使用相同的网络访问管理器。这样,各个资源就能共享相同的访问细节,如服务器 URL 和授权令牌。

实际通信是通过休息访问管理器完成的,它实现了一些方便的功能,专门处理 HTTP REST API,并根据需要有效处理QNetworkRequestQNetworkReply 的发送和接收。

源文件

示例项目 @ code.qt.io

另请参阅 所有 QtXML示例Qt Quick 示例与教程

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