C++ 也能优雅写 Web?5 分钟用 Hical 搭建 REST API

张开发
2026/6/15 1:54:56 15 分钟阅读
C++ 也能优雅写 Web?5 分钟用 Hical 搭建 REST API
提到 C 写 Web 服务你脑海中浮现的可能是满屏的模板报错、手动解析 HTTP 报文、以及回调嵌套到看不清缩进的代码。但在 2026 年C20 协程 PMR 内存池 C26 反射的组合已经让 C Web 开发体验发生了质变。本文用 Hical 框架带你体验10 行代码启动 HTTP 服务器40 行代码搞定完整 REST API。10 行代码启动 HTTP 服务器#includecore/HttpServer.husingnamespacehical;intmain(){HttpServerserver(8080);server.router().get(/,[](constHttpRequest)-HttpResponse{returnHttpResponse::ok(Hello, hical!);});server.start();}curlhttp://localhost:8080/# Hello, hical!没有工厂类没有 Builder 链没有 XML 配置。创建服务器、注册路由、启动 —— 三步完事。40 行代码完整 REST API实际项目当然不止一个路由。下面是一个包含 JSON 响应、路径参数、请求体读取、日志中间件的完整示例#includecore/HttpServer.husingnamespacehical;intmain(){HttpServerserver(8080);// 日志中间件 —— 洋葱模型请求前后各打一行日志server.use([](HttpRequestreq,MiddlewareNext next)-AwaitableHttpResponse{std::couthttpMethodToString(req.method()) req.path()std::endl;autoresco_awaitnext(req);std::cout - static_castint(res.statusCode())std::endl;co_returnres;});// GET /api/status —— JSON 响应server.router().get(/api/status,[](constHttpRequest)-HttpResponse{returnHttpResponse::json({{status,running},{version,2.0.0},{framework,hical}});});// POST /api/echo —— 读取请求体并回写server.router().post(/api/echo,[](constHttpRequestreq)-HttpResponse{returnHttpResponse::ok(req.body());});// GET /users/{id} —— 路径参数自动提取server.router().get(/users/{id},[](constHttpRequestreq)-HttpResponse{returnHttpResponse::json({{userId,req.param(id)},{name,User req.param(id)}});});server.start();}测试一下# JSON 响应curlhttp://localhost:8080/api/status# {status:running,version:2.0.0,framework:hical}# 路径参数curlhttp://localhost:8080/users/42# {userId:42,name:User 42}# POST 回写curl-XPOST-dHellohttp://localhost:8080/api/echo# Hello这 40 行代码覆盖了 REST API 最常见的场景JSON 返回、路径参数、请求体处理、请求日志。如果你用过 Express.js 或 Flask会发现 API 风格非常相似 —— 只是语言换成了 C。为什么选 Hical协程异步告别回调地狱注意上面中间件里的co_await next(req)。这不是回调不是 Promise而是 C20 原生协程。异步代码写起来跟同步一样顺畅server.router().get(/async,[](constHttpRequest)-AwaitableHttpResponse{co_awaithical::sleep(0.1);// 异步等待不阻塞线程co_returnHttpResponse::ok(done);});PMR 内存池性能开箱即用Hical 内置三层 PMRPolymorphic Memory Resource内存池全局同步池、线程本地无锁池、请求级单调缓冲区。HTTP 请求处理中的缓冲区、JSON 对象、响应体全部走 PMR 分配请求结束时整体释放 —— 零碎片、零锁争用。你不需要做任何配置默认就启用了。C26 反射就绪一行代码搞定序列化定义一个 DTO 结构体加一行HICAL_JSON宏就能自动序列化/反序列化 JSONstructUserDTO{std::string name;intage;std::string email;HICAL_JSON(UserDTO,name,age,email)// 就这一行};// 序列化UserDTO user{Alice,30,aliceexample.com};autojsonmeta::toJson(user);// - {name:Alice,age:30,email:aliceexample.com}// 反序列化从 HTTP 请求体autouserreq.readJsonUserDTO();当编译器支持 C26 反射时连这行宏都不需要 —— Hical 会自动切换到原生反射路径。安装vcpkg推荐vcpkginstallhical61-hicalfind_package(hical CONFIG REQUIRED) target_link_libraries(my_app PRIVATE hical::hical_core)源码构建gitclone https://github.com/Hical61/Hical.gitcdHical cmake-Bbuild-DCMAKE_BUILD_TYPERelease cmake--buildbuildCMake FetchContentinclude(FetchContent) FetchContent_Declare(hical GIT_REPOSITORY https://github.com/Hical61/Hical.git GIT_TAG v2.0.0) FetchContent_MakeAvailable(hical) target_link_libraries(my_app PRIVATE hical_core)想深入了解本文只展示了 Hical 最基础的用法。框架还支持 WebSocket 双向通信、SSL/TLS 加密、Cookie/Session 管理、静态文件服务、Multipart 文件上传等完整功能。深度教学系列从架构设计到性能调优第一篇设计理念与架构总览第二篇协程异步与 PMR 内存池第三篇路由、中间件与 SSL第四篇实战案例与性能调优第五篇Cookie、Session 与文件服务GitHub: https://github.com/Hical61/Hical如果觉得 Hical 有意思欢迎给个 Star这是对开源项目最好的支持。

更多文章