Qt Quick 演示 - RESTful API 客户端
如何创建 RESTful API QML 客户端的示例。
本示例展示了如何通过一个假想的调色板服务创建一个基本的 QML RESTful API 客户端。应用程序使用 RESTful 通信与选定的服务器进行数据请求和发送。REST 服务以 QML 元素的形式提供,其子元素封装了服务器提供的各个 JSON 数据 API。
应用程序功能
本示例提供以下基本功能:
- 选择要与之通信的服务器
- 列出用户和颜色
- 登录和注销用户
- 修改和创建新颜色
服务器选择
程序启动时会显示与调色板服务器通信的选项。预定义选项包括
- reqres.in,一个公开可用的 REST API 测试服务
- 基于 Qt 的 REST API 服务器示例 QtHttpServer
一旦选择了这些选项,RESTful API 客户端就会向 color API 发送测试 HTTP GET,以检查服务是否可访问。
这两个预定义 API 选项之间的一个主要区别是,基于 Qt Test 的 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 服务的一种方法。本例中的资源是分页的用户资源和颜色资源以及登录服务。资源元素通过基本 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,并根据需要有效地收发QNetworkRequest 和QNetworkReply 。
运行示例
要从 Qt Creator,打开Welcome 模式,并从Examples 中选择示例。更多信息,请参阅Qt Creator: 教程:构建并运行。
© 2025 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.