使用 SQLite 和 Rocket 在 Rust 中创建 API
// 引入必要的库
use rocket::http::Status;
use rocket::response::{Debug, Redirect};
use rocket_contrib::json::JsonValue;
use sqlite::{Connection, State};
// 初始化 SQLite 数据库连接
fn init_db() -> Result<Connection, sqlite::Error> {
let db = Connection::open_in_memory()?;
db.execute(
"CREATE TABLE IF NOT EXISTS tasks (
id INTEGER PRIMARY KEY AUTOINCREMENT,
description TEXT NOT NULL
)",
)?;
Ok(db)
}
// 获取所有任务的 API 端点
#[get("/tasks")]
pub fn get_tasks(db: State<Connection>) -> Result<JsonValue, Status> {
let mut stmt = db.prepare("SELECT id, description FROM tasks")?;
let tasks = stmt.query_map([], |row| {
JsonValue::new_object()
.set("id", row.get(0))
.set("description", row.get(1))
})?;
Ok(JsonValue::array(tasks))
}
// 添加新任务的 API 端点
#[post("/tasks", data = "<description>")]
pub fn add_task(
db: State<Connection>,
description: String
) -> Result<Redirect, Status> {
let mut stmt = db.prepare("INSERT INTO tasks (description) VALUES (?)")?;
stmt.execute([&description])?;
Ok(Redirect::to("/tasks"))
}
// 主函数,启动 Rocket 应用
fn main() {
let db = init_db().expect("数据库初始化失败");
rocket::ignite()
.manage(db)
.mount("/", routes![get_tasks, add_task])
.launch();
}
这段代码展示了如何使用 SQLite 和 Rocket 在 Rust 中创建一个简单的任务管理 API。其中包含了数据库初始化、获取所有任务的端点以及添加新任务的端点。代码使用了 Rust 的错误处理方式,并且遵循了 Rocket 推荐的 API 设计模式。
评论已关闭