引言:为什么用C++编写REST API?
C++传统上与系统编程、游戏和高负载应用相关联。然而,现代C++(从C++11/17/20标准开始)提供了快速开发Web服务所需的所有工具。当需要最高性能、低内存消耗或与现有C++代码(例如计算机视觉库或数值计算)集成时,使用C++编写REST API是合理的。
在本指南中,我们将在30分钟内用C++创建一个功能完整的REST API。为此,我们将使用轻量且优雅的库Crow。它无需复杂配置,支持路由、JSON(通过json.hpp)和中间件。文章结束时,你将拥有一个包含三个端点的可用服务器。
步骤1:搭建环境并安装Crow
为此,我们需要一个支持C++17的编译器(g++ 7+、clang 5+或MSVC 2017+)和CMake构建系统。Crow是一个“仅头文件”的库,这简化了安装:只需下载一个头文件。
安装
- 从GitHub下载最新版本的Crow(或使用
git clone)。 - 将
include文件夹复制到你的项目中。 - 安装
nlohmann/json(同样为仅头文件)以处理JSON。
项目结构
my_rest_api/├── CMakeLists.txt├── main.cpp└── include/ ├── crow.h └── json.hppCMakeLists.txt
cmake_minimum_required(VERSION 3.10)project(my_rest_api)
set(CMAKE_CXX_STANDARD 17)
include_directories(include)
add_executable(my_rest_api main.cpp)target_link_libraries(my_rest_api pthread)构建:mkdir build && cd build && cmake .. && make
步骤2:创建基础服务器和路由
Crow使用简单的DSL来定义路由。让我们创建一个监听8080端口并处理GET和POST请求的服务器。
基础服务器代码
#include "crow.h"#include <string>
int main() { crow::SimpleApp app;
// 简单的GET路由 CROW_ROUTE(app, "/")([](){ return "欢迎使用C++ REST API!"; });
// 带路径参数的GET CROW_ROUTE(app, "/user/<int>")([](int user_id){ return crow::response("用户ID: " + std::to_string(user_id)); });
app.port(8080).multithreaded().run();}这段代码创建了两个端点。crow::SimpleApp是主应用程序类。multithreaded()方法启用了线程池中的请求处理。启动服务器,在浏览器中检查http://localhost:8080/。
路由中的参数类型
Crow支持路径中的以下参数类型:
<int>— 整数<string>— 字符串<path>— 路径剩余部分(例如/files/<path>)<float>— 浮点数
步骤3:使用JSON和处理POST请求
一个真正的REST API必须能够接收并返回JSON。让我们引入nlohmann/json并实现类似CRUD的操作。
示例:简单的内存“数据库”
#include "crow.h"#include "json.hpp"#include <unordered_map>#include <memory>
using json = nlohmann::json;
struct Task { int id; std::string title; bool completed;};
std::unordered_map<int, std::shared_ptr<Task>> tasks;int next_id = 1;
int main() { crow::SimpleApp app;
// GET /tasks — 获取所有任务 CROW_RO