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),仅供参考