Qt 快速演示 - RESTful API 客户端
如何创建 RESTful API QML 客户端的示例。
此示例演示如何创建一个基本的 QML RESTful API 客户端,使用一个虚构的颜色调色板服务。应用程序使用与所选服务器进行 RESTful 通信来请求和发送数据。REST 服务作为一个 QML 元素提供,其子元素包装了服务器提供的单个 JSON 数据 API。
应用程序功能
该示例提供了以下基本功能
- 选择要与之通信的服务器
- 列出用户和颜色
- 登录和注销用户
- 修改和创建新颜色
服务器选择
启动时,应用程序将显示与颜色调色板服务器进行通信的选项。预定义选项包括
- reqres.in,一个公开发布的 REST API 测试服务
- 基于 Qt 的 REST API 服务器示例,在 QtHttpServer
一旦选择,RESTful API 客户端会对颜色 API 发出测试 HTTP GET 请求以检查服务是否可访问。
两个预定义 API 选项之间的一个主要区别是 基于 Qt 的 REST API 服务器示例 是一个可以修改颜色的状态化应用程序,而 reqres.in 是一个无状态的 API 测试服务。换句话说,当使用 reqres.in 后端时,修改颜色不会产生持久影响。
列出用户和颜色
用户和颜色是服务器端分页资源。这意味着服务器以称为 页 的块形式提供数据。UI 列表反映了这种分页并在页面上查看数据。
在 UI 上查看数据使用标准的 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和授权令牌。
实际的通信是通过一个rest访问管理器完成的,该管理器实现了某些方便的功能,专门用于处理HTTP REST API,并且有效地处理发送和接收所需的QNetworkRequest和QNetworkReply。
运行示例
要从Qt Creator运行该示例,打开欢迎模式并从示例中选择。有关更多信息,请访问构建和运行示例。
© 2024 Qt公司有限公司。包含在此处的文档贡献是各自所有者的版权。此处提供的文档是根据自由软件基金会发布的GNU自由文档许可协议版本1.3的条款许可的。Qt及其相关标志是芬兰和/或其他国家和地区的The Qt Company Ltd.的商标。所有其他商标均为各自所有者的财产。