1. 项目简介
Crow 是一个用 C++ 编写的现代化、高性能 Web 框架,旨在为 C++ 开发者提供类似 Python Flask 或 Node.js Express 的简洁、直观的 Web 开发体验。它基于 ASIO 网络库,支持 HTTP/1.1 和 WebSocket,具有轻量级、零依赖(仅需 C++11 编译器)的特点。
项目 GitHub 地址:GitHub - CrowCpp/Crow: A Fast and Easy to use microframework for the web. · GitHub
2. 核心特性
- 简洁的路由语法:支持 RESTful 风格路由,路径参数、查询参数解析简单直观。
- 内置中间件支持:提供日志、静态文件服务、CORS 等常用中间件。
- 模板引擎集成:默认支持 Mustache 模板,便于动态 HTML 生成。
- WebSocket 支持:原生支持 WebSocket,适合实时应用。
- JSON 友好:请求/响应体自动 JSON 序列化与反序列化。
- 跨平台:支持 Linux、macOS、Windows。
3. 快速开始
3.1 安装
Crow 是 Header‑Only 库,只需包含头文件即可使用:
cpp
#include <crow.h>
可以通过 Git 克隆仓库:
bash
git clone https://github.com/CrowCpp/Crow.git
cd Crow
# 头文件位于 include/crow.h
3.2 第一个示例
以下是一个简单的 "Hello World" 服务:
cpp
#include <crow.h>
int main()
{
crow::SimpleApp app;
CROW_ROUTE(app, "/")([](){
return "Hello, Crow!";
});
app.port(8080).multithreaded().run();
}
编译并运行后,访问 http://localhost:8080 即可看到输出。
4. 路由与请求处理
Crow 的路由语法非常直观:
cpp
CROW_ROUTE(app, "/hello/<string>")([](const crow::request& req, std::string name){
return "Hello, " + name;
});
CROW_ROUTE(app, "/add")
.methods("POST"_method)([](const crow::request& req){
auto json = crow::json::load(req.body);
int a = json["a"].i();
int b = json["b"].i();
return crow::response{200, {{"sum", a + b}}};
});
5. 中间件
Crow 允许通过中间件对请求/响应进行预处理或后处理,例如日志中间件:
cpp
struct LoggerMiddleware {
struct context {};
void before_handle(crow::request& req, crow::response& res, context& ctx) {
CROW_LOG_INFO << "Request: " << req.url;
}
void after_handle(crow::request& req, crow::response& res, context& ctx) {
CROW_LOG_INFO << "Response: " << res.code;
}
};
// 在 App 中使用
crow::App<LoggerMiddleware> app;
6. 与同类框架对比
| 框架 | 语言 | 特点 | 适用场景 |
|---|---|---|---|
| Crow | C++ | 轻量、Header‑Only、语法简洁 | 快速原型、微服务、嵌入式 Web 接口 |
| Drogon | C++ | 功能全面、ORM、模板引擎 | 全栈 Web 应用 |
| cpp‑httplib | C++ | 单文件、无依赖 | 简单 HTTP 客户端/服务端 |
| Flask | Python | 生态丰富、开发快速 | 快速迭代、数据科学 Web 服务 |
7. 总结
Crow 为 C++ 开发者提供了一个极其轻便、易上手的 Web 框架选择。它避免了传统 C++ Web 开发的繁琐配置,让开发者能够专注于业务逻辑。如果你需要在 C++ 项目中快速搭建一个 REST API 或简单的 Web 服务,Crow 值得一试。
进一步学习资源:
- 官方 GitHub:CrowCpp/Crow
- 示例代码:examples/
- 在线文档:crowcpp.org
