Qt 快速演示 - RESTful API 客户端

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

此示例演示如何创建一个基本的 QML RESTful API 客户端,使用一个虚构的颜色调色板服务。应用程序使用与所选服务器进行 RESTful 通信来请求和发送数据。REST 服务作为一个 QML 元素提供,其子元素包装了服务器提供的单个 JSON 数据 API。

应用程序功能

该示例提供了以下基本功能

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

启动时,应用程序将显示与颜色调色板服务器进行通信的选项。预定义选项包括

一旦选择,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,并且有效地处理发送和接收所需的QNetworkRequestQNetworkReply

运行示例

要从Qt Creator运行该示例,打开欢迎模式并从示例中选择。有关更多信息,请访问构建和运行示例

示例项目 @ code.qt.io

© 2024 Qt公司有限公司。包含在此处的文档贡献是各自所有者的版权。此处提供的文档是根据自由软件基金会发布的GNU自由文档许可协议版本1.3的条款许可的。Qt及其相关标志是芬兰和/或其他国家和地区的The Qt Company Ltd.的商标。所有其他商标均为各自所有者的财产。