当前位置: 首页 > news >正文

Qt6文档阅读笔记-RESTful API Server解析

本例使用QHttpServer创建RESTful API服务端。

此例接收REST风格的请求,与此例与之对应的客户端是RESTful Color Palette API client。

满足REST限制的API被称为RESTful风格的API。

RESTful API服务端一般包括:create、read、update、delete操作。

其中部分操作需要RESTful服务端提供login/logout功能。

执行服务端的二进制程序的命令:

./colorpaletteserver

./colorpaletteserver --port 1234

上面命令中port参数提供了指定服务端开放的tcp端口的功能。

 httpServer.route(QString("%1").arg(apiPath), QHttpServerRequest::Method::Get,[&api](const QHttpServerRequest &request) { return api.getPaginatedList(request); });

上例中,route指定GET方法,以JSON数组的形式返回当前提供的页码的数据。其中QHttpServer::route()中使用QHttpServerRequest::Method::Get枚举类型,指明这个route为GET方法。

 httpServer.route(QString("%1/<arg>").arg(apiPath), QHttpServerRequest::Method::Get,[&api](qint64 itemId) { return api.getItem(itemId); });

上面的代码通过请求中的ID参数,获取list实例中单独的那条。

httpServer.route(QString("%1/<arg>").arg(apiPath), QHttpServerRequest::Method::Get,[&api](qint64 itemId) { return api.getItem(itemId); });

上例中,route接收POST方法,新增一个实例,并且返回新增的实例。此请求必须被认证,认证的token需要放到请求的head中,其中token为调用服务端api/login和api/register返回的数据。

 QHttpServerResponse postItem(const QHttpServerRequest &request){const std::optional<QJsonObject> json = byteArrayToJsonObject(request.body());if (!json)return QHttpServerResponse(QHttpServerResponder::StatusCode::BadRequest);const std::optional<T> item = factory->fromJson(*json);if (!item)return QHttpServerResponse(QHttpServerResponder::StatusCode::BadRequest);if (data.contains(item->id))return QHttpServerResponse(QHttpServerResponder::StatusCode::AlreadyReported);const auto entry = data.insert(item->id, *item);return QHttpServerResponse(entry->toJson(), QHttpServerResponder::StatusCode::Created);}

上面的postItem函数中返回了不同HTTP状态。上例中利用QHttpServerResponse::QHttpServerResponse方法传输过来的json对应,与HTTP状态相关做对应。

创建一个实例,请求题需要包含email、first_name、last_name、avatar这类json对象。

 {"email": "jane.doe@qt.io","first_name": "Jane","last_name": "Doe","avatar": "/img/faces/1-image.jpg"}

http://www.xdnf.cn/news/66187.html

相关文章:

  • 从C语言变量看内存
  • BR_调制特性(RF/TRM/CA/BV-07-C [Modulation Characteristics])
  • [密码学基础]GB与GM国密标准深度解析:定位、差异与协同发展
  • 【C++】基于红黑树的map和set封装实现
  • 美信监控易:易用性卓越的智能运维管理平台
  • 详解机器学习各算法的优缺点!!
  • 算法——背包问题(分类)
  • DeepSeek与WPS的动态数据可视化图表构建
  • 2025 活体识别+人脸认证工具类【阿里云api,需要先申请试用】
  • NetApp ONTAP 9 故障磁盘更换操作指南
  • MySQL的窗口函数(Window Functions)
  • 实训Day-1 漏洞攻击实战
  • 【LeetCode 热题 100】哈希、双指针、滑动窗口
  • 【Markdown】【HTML】在Markdown中实现康奈尔笔记模式(右侧留白)
  • 算法分析与设计——动态规划复习题(待更新
  • Flutter 状态管理 Riverpod
  • 华为IPD流程变革如何推动组织转型?2025变革路径
  • 从代码实现理解Vision Permutator:WeightedPermuteMLP模型解析
  • Java并发编程-线程池
  • spark–sql项目实验
  • 声学重构+交互创新,特伦斯便携钢琴V30Pro专业演奏的移动化时代
  • 信息收集之hack用的网络空间搜索引擎
  • 文件有几十个T,需要做rag,用ragFlow能否快速落地呢?
  • PCB原理图解析(炸鸡派为例)
  • Google独立站和阿里国际站不是一回事
  • Python爬虫与代理IP:高效抓取数据的实战指南
  • Web开发:ABP框架10——使用数据库存储文件,完成文件的下载和上传
  • 【第四章】19-匹配规则定义
  • GPT-4.1 开启智能时代新纪元
  • 算法之动态规划