所有文章 > 如何集成API > 使用 Turso 和 Rust 构建 Cat Facts REST API 服务
使用 Turso 和 Rust 构建 Cat Facts REST API 服务

使用 Turso 和 Rust 构建 Cat Facts REST API 服务

在这篇文章中,我们将介绍如何使用 Turso 构建和部署一个基于 Rust 的 REST API 服务。Turso 是一种被称为“边缘的 SQLite”的服务,通过云端托管 SQLite 并提供副本,让您在需要的地方快速访问数据库的本地副本,从而节省读取数据的时间和成本。

这种特性非常适合频繁读取 SQL 数据库的 Web 应用,例如生成大量报告或处理以 GET 请求为主的 Web 服务。

我们将以一个基于 Turso 的 Cat Facts API 服务为例,展示如何实现以下功能:

  • 获取一条随机猫咪趣闻;
  • 用户提交自己的猫咪趣闻;
  • 用户订阅服务,每天接收一条猫咪趣闻。

完整示例代码库可在 GitHub 查看。


一. 入门

1. 安装 Turso

Turso 可以通过脚本或 Homebrew 安装:

brew install chiselstrike/tap/turso

安装完成后,验证安装:

turso --version

2. 注册 Turso 服务

注册 Turso 服务:

turso auth signup

注册需通过 GitHub 登录并授予权限。完成后,Turso 会生成一个访问令牌,有效期为 7 天,请妥善保存。

3. 创建数据库

创建数据库:

turso db create my-db

进入数据库 shell:

turso db shell my-db

Turso 会提供数据库 URL 和访问令牌,请记录安全。更多信息请参考 Turso 官方文档


二. 设置 Shuttle 环境

1. 安装 Shuttle CLI

cargo install cargo-shuttle

2. 初始化 Shuttle 应用

cargo shuttle init

本教程假设使用 Axum 入门模板。完成后,需要在 Cargo.toml 添加依赖,并将 Turso 数据库 URL 与访问令牌写入项目根目录下的 Secrets.toml

[default]
DATABASE_URL = "your-turso-database-url"
API_TOKEN = "your-turso-api-token"

三. 后端开发

服务包含两部分:

  1. Web 服务:提供 API 路由
  2. 后台任务:定时向订阅者发送猫咪趣闻

1. 设置数据库迁移

main 函数中添加:

sqlx::query!(
    "CREATE TABLE IF NOT EXISTS CatFacts (id INTEGER PRIMARY KEY, fact TEXT NOT NULL)"
).execute(&pool).await?;

这会在数据库中创建表格,如果已存在则不会重复创建。

2. 定义应用状态

使用 AppState 管理全局状态,包括数据库连接:

struct AppState {
    db_client: Arc<Mutex<SqlitePool>>,
}

3. 实现 API 路由

需要实现以下路由:

  • 健康检查;
  • 欢迎页面;
  • 获取随机猫咪趣闻;
  • 提交猫咪趣闻;
  • 添加订阅者。

示例获取趣闻路由:

async fn get_fact(state: Arc<AppState>) -> impl IntoResponse {
    // 从数据库中获取随机猫咪趣闻
}

将路由注册到 Axum,并在 main 启动服务。


四. 后台任务

后台任务功能:每天定时向订阅者发送猫咪趣闻。

任务逻辑:

  1. 每秒检查当前时间是否为设定发送时间;
  2. 若到达发送时间,从数据库获取随机趣闻及订阅者邮箱;
  3. 使用 SMTP 发送邮件。

示例代码:

async fn send_subscriber_mail(state: Arc<AppState>) {
    // 获取订阅者和猫咪趣闻,并发送邮件
}

通过 tokio::select! 宏实现后台任务与 Web 服务并行运行。


五. 部署

完成开发后,使用 Shuttle 部署:

cargo shuttle deploy

部署成功后,可通过终端提供的 URL 访问 Web 服务。

部署完成示例


六. 结论

本文展示了如何使用 Turso 与 Shuttle 构建 Rust REST API 服务。进一步扩展可考虑:

  • 添加订阅者邮箱验证;
  • 使用队列管理订阅任务;
  • 添加管理员审批功能;
  • 构建完整前端界面。

完整示例代码库:GitHub

原文链接: https://www.shuttle.dev/blog/2023/07/28/turso-shuttle-integration-cats-api

#你可能也喜欢这些API文章!

我们有何不同?

API服务商零注册

多API并行试用

数据驱动选型,提升决策效率

查看全部API→
🔥

热门场景实测,选对API

#AI文本生成大模型API

对比大模型API的内容创意新颖性、情感共鸣力、商业转化潜力

25个渠道
一键对比试用API 限时免费

#AI深度推理大模型API

对比大模型API的逻辑推理准确性、分析深度、可视化建议合理性

10个渠道
一键对比试用API 限时免费