Served实战案例:从零构建一个完整的RESTful用户管理API

发布时间:2026/7/28 23:08:20

Served实战案例:从零构建一个完整的RESTful用户管理API
Served实战案例从零构建一个完整的RESTful用户管理API【免费下载链接】servedA C11 RESTful web server library项目地址: https://gitcode.com/gh_mirrors/se/servedServed是一个轻量级C11 RESTful web服务器库它提供了简洁的API来帮助开发者快速构建高效的RESTful服务。本教程将通过实战案例展示如何使用Served从零开始构建一个功能完整的用户管理API包括用户的创建、查询、更新和删除操作。准备工作环境搭建与项目配置1. 安装Served库首先需要将Served库克隆到本地并进行编译安装git clone https://gitcode.com/gh_mirrors/se/served cd served mkdir build cd build cmake .. make sudo make install2. 项目结构设计推荐的项目结构如下user_api/ ├── include/ │ └── user.hpp # 用户数据结构定义 ├── src/ │ ├── user.cpp # 用户业务逻辑实现 │ └── main.cpp # API入口文件 └── CMakeLists.txt # 项目构建配置核心实现构建用户管理API1. 定义用户数据结构在include/user.hpp中定义用户数据结构#include string #include unordered_map struct User { std::string id; std::string name; std::string email; int age; }; class UserManager { private: std::unordered_mapstd::string, User _users; std::string generate_id(); public: User create_user(const std::string name, const std::string email, int age); User get_user(const std::string id); std::unordered_mapstd::string, User get_all_users(); bool update_user(const std::string id, const User user); bool delete_user(const std::string id); };2. 实现业务逻辑在src/user.cpp中实现用户管理的核心逻辑#include ../include/user.hpp #include uuid/uuid.h #include served/request_error.hpp std::string UserManager::generate_id() { uuid_t uuid; char id[37]; uuid_generate(uuid); uuid_unparse(uuid, id); return std::string(id); } User UserManager::create_user(const std::string name, const std::string email, int age) { User user; user.id generate_id(); user.name name; user.email email; user.age age; _users[user.id] user; return user; } // 其他方法实现...3. 配置RESTful路由在src/main.cpp中使用Served配置API路由#include served/served.hpp #include boost/property_tree/json_parser.hpp #include ../include/user.hpp using namespace served; namespace pt boost::property_tree; int main() { multiplexer mux; UserManager user_manager; // 获取所有用户 mux.handle(/api/users) .get( { pt::ptree root, users_array; auto users user_manager.get_all_users(); for (const auto pair : users) { pt::ptree user_node; user_node.put(id, pair.second.id); user_node.put(name, pair.second.name); user_node.put(email, pair.second.email); user_node.put(age, pair.second.age); users_array.push_back(std::make_pair(, user_node)); } root.add_child(users, users_array); std::stringstream ss; pt::json_parser::write_json(ss, root, true); res.set_header(Content-Type, application/json); res ss.str(); }); // 创建用户 mux.handle(/api/users) .post( { pt::ptree root; std::stringstream ss(req.body()); pt::json_parser::read_json(ss, root); User user user_manager.create_user( root.getstd::string(name), root.getstd::string(email), root.getint(age) ); res.set_status(status::CREATED); res.set_header(Content-Type, application/json); res {\id\:\ user.id \}; }); // 获取单个用户 mux.handle(/api/users/{id}) .get( { try { User user user_manager.get_user(req.params[id]); pt::ptree root; root.put(id, user.id); root.put(name, user.name); root.put(email, user.email); root.put(age, user.age); std::stringstream ss; pt::json_parser::write_json(ss, root, true); res.set_header(Content-Type, application/json); res ss.str(); } catch (const request_error e) { res.set_status(status::NOT_FOUND); res {\error\:\User not found\}; } }); // 更新用户 mux.handle(/api/users/{id}) .put( { // 实现更新逻辑 }); // 删除用户 mux.handle(/api/users/{id}) .del( { // 实现删除逻辑 }); std::cout Server running on http://127.0.0.1:8080 std::endl; net::server server(127.0.0.1, 8080, mux); server.run(4); // 使用4个线程处理请求 return 0; }功能测试验证API接口使用curl测试API创建用户curl -X POST -H Content-Type: application/json -d {name:John Doe,email:johnexample.com,age:30} http://localhost:8080/api/users获取所有用户curl http://localhost:8080/api/users获取单个用户curl http://localhost:8080/api/users/{user_id}进阶优化提升API性能与安全性1. 添加请求日志使用Served的插件系统添加访问日志#include served/plugins/access_log.cpp // 在server.run()前添加 mux.use_after(served::plugin::access_log);2. 实现请求验证添加请求参数验证中间件mux.use_before([](response res, const request req) { if (req.method() POST req.path() /api/users) { // 验证请求体是否包含必要字段 // ... } });总结Served构建RESTful API的优势Served作为轻量级C RESTful框架具有以下优势简洁API通过直观的链式调用配置路由和处理请求高性能基于异步I/O模型支持多线程处理灵活性可与Boost等库无缝集成处理JSON等数据格式扩展性通过中间件和插件系统轻松扩展功能通过本教程你已经掌握了使用Served构建完整RESTful API的核心步骤。更多高级功能可以参考官方文档docs/Plugins.md和docs/Multiplexer.md。【免费下载链接】servedA C11 RESTful web server library项目地址: https://gitcode.com/gh_mirrors/se/served创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

Fastjson反序列化漏洞攻防演进与纵深防御实战指南

Fastjson反序列化漏洞攻防演进与纵深防御实战指南

2026/7/28 22:58:19

1. 项目概述:一场持续数年的攻防拉锯战如果你是一名Java后端开发者,或者负责过企业应用的安全审计,那么“Fastjson反序列化漏洞”这个名字,绝对能让你心头一紧。这不仅仅是一个漏洞,而是一场持续了数年、攻防双方不断升…

解密 gh_mirrors/bd/bds-files:生物信息学项目 reproducibility 的关键资源与最佳实践

解密 gh_mirrors/bd/bds-files:生物信息学项目 reproducibility 的关键资源与最佳实践

2026/7/28 22:58:19

解密 gh_mirrors/bd/bds-files:生物信息学项目 reproducibility 的关键资源与最佳实践 【免费下载链接】bds-files Supplementary files for my book, "Bioinformatics Data Skills" 项目地址: https://gitcode.com/gh_mirrors/bd/bds-files gh_mi…

玩转CodeX:CodeX安装教程(Windows+Linux+MacOS)

玩转CodeX:CodeX安装教程(Windows+Linux+MacOS)

2026/7/28 22:58:19

本文介绍如何安装 AI 编码界遥遥领先的工具 ——— CodeX,CodeX 是 OpenAI 推出的一款 AI 编码 Cli,搭载最新的 GPT-5 模型。安装不同的操作系统环境,本文会从 Windows、Linux、Mac 三个不同的系统环境依次介绍安装方法。 Windows 环境安装 …

PDF数字签名安全特性与C#删除实现详解

PDF数字签名安全特性与C#删除实现详解

2026/7/28 23:58:22

1. 项目概述:PDF数字签名的安全特性与删除需求PDF数字签名作为文档认证的核心机制,本质上是通过非对称加密技术实现的电子印章。我在处理金融行业合规文档时发现,一个经过数字签名的PDF文件包含三个关键部分:签名域(Si…

GraphQL API测试策略:内省验证、字段覆盖与N+1查询检测

GraphQL API测试策略:内省验证、字段覆盖与N+1查询检测

2026/7/28 23:58:22

1. 项目概述:为什么GraphQL测试需要一套专属策略?如果你正在开发或维护一个GraphQL API,并且还在用测试REST API的老一套方法,那你可能正在错过一些关键的质量保障点,甚至为线上故障埋下了隐患。GraphQL的灵活性既是其…

6版西游记:打工人的精神嘴替

6版西游记:打工人的精神嘴替

2026/7/28 23:58:22

26版西游记:打工人的精神嘴替🔥 话题播放破5亿📂 二创爆款⏱ 阅读约5分钟你敢信吗?一群民间网友用真人cos的方式,拍了一版"2026版西游记",不是官方翻拍,却在全网刷屏,话题…

MySQL从入门到实战:环境搭建、SQL核心与性能优化指南

MySQL从入门到实战:环境搭建、SQL核心与性能优化指南

2026/7/28 23:58:22

在实际数据库开发、数据分析和后端工作中,MySQL 是绕不开的核心技能。很多开发者虽然能写简单的 SELECT * FROM table ,但面对复杂查询、性能优化、数据类型选择和事务控制时,却常常感到力不从心。从零基础到真正能在生产环境中游刃有余地使用 MySQL,需要一条清晰、系统且…

如何高效获取国家中小学智慧教育平台的电子教材PDF文件?

如何高效获取国家中小学智慧教育平台的电子教材PDF文件?

2026/7/28 23:58:22

如何高效获取国家中小学智慧教育平台的电子教材PDF文件? 【免费下载链接】tchMaterial-parser 国家中小学智慧教育平台 电子课本下载工具,帮助您从智慧教育平台中获取电子课本的 PDF 文件网址并进行下载,让您更方便地获取课本内容。 项目地…

Fast-BEV 纯视觉 BEV 重新训练与标注工具推荐

Fast-BEV 纯视觉 BEV 重新训练与标注工具推荐

2026/7/28 23:48:22

1. 项目目标 本文面向以下训练与部署方案: 重新训练 Fast-BEV;模型输入为纯视觉图像;当前主要使用前视相机;使用连续多帧图像进行时序融合;车辆安装单束线雷达;单束线雷达不作为 Fast-BEV 主网络输入&#…

[具身智能-649]:个人电脑搭建 RTSP 服务完整方案(Windows / Ubuntu 双平台,适配 RDK X5 rtsp2display 调试)

[具身智能-649]:个人电脑搭建 RTSP 服务完整方案(Windows / Ubuntu 双平台,适配 RDK X5 rtsp2display 调试)

2026/7/28 13:30:18

目标:电脑作为RTSP 服务端,循环推送 H264/H265 视频流; RDK X5 通过 rtsp2display 拉流预览,完全不需要在开发板编译 live555。 提供两套成熟方案: ✅ 方案 A:FFmpeg(最简单,优先推…

PDF合并与动态水印的工程化方案:2026国内免费工具实测对比

PDF合并与动态水印的工程化方案:2026国内免费工具实测对比

2026/7/28 16:04:36

一、背景与测试方案 在实际项目交付中,PDF文件合并与版权保护水印的叠加是一个高频但容易被低估的技术需求。典型的处理链路涉及:多源PDF的文件流合并、页面级水印渲染(含透明度混合与图层叠加)、输出文件体积控制。看似简单的操作…

PDF拆分压完图糊了?2026国内免费实测,档案员都在用的组合方案

PDF拆分压完图糊了?2026国内免费实测,档案员都在用的组合方案

2026/7/28 16:04:35

说实话,提到PDF拆分再压缩,我真是被折腾得够呛。 上个月公司年度合同归档,一份300多页的PDF总合同,需要按年份拆分成三个独立文件,再分别压缩到10MB以内方便邮件发送各部门确认。我心想这还不简单?先找个海…