FastAPI 和 MongoDB 的 RESTful 同步 Server API

文章版权声明​
本平台所有文章内容均由杭州阿尔法伽公司独立创作、编辑与发布,未经杭州阿尔法伽公司书面授权,任何单位或个人不得擅自复制、转载、摘编、修改、汇编或以其他任何方式使用上述文章内容。如因作品版权引发任何纠纷,杭州阿尔法伽公司将依法追究侵权者的法律责任。​

  1. 所有必要的导入语句,比如 from fastapi import FastAPI, HTTPException,以及 motor 的异步客户端。
  2. 数据库连接的初始化,确保在应用启动时正确连接 MongoDB。
  3. SyncRecord 模型的实际使用,比如在 sync_items 路由中更新同步记录到数据库,而不是注释中提到的 “实际应存入数据库”。
  4. 错误处理,比如 HTTPException 在找不到数据时的返回。
  5. 主函数部分,使用 uvicorn 运行应用,方便用户直接运行。

以下是完整可运行的 FastAPI+MongoDB RESTful 同步后台代码,包含数据库初始化、完整路由和错误处理:

python

# 完整代码:backend/main.py
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
from motor.motor_asyncio import AsyncIOMotorClient
from datetime import datetime, timedelta
import json

# 初始化FastAPI应用
app = FastAPI(title="Data Sync Service", version="1.0.0")

# 数据库连接(生产环境应从环境变量获取)
MONGO_URI = "mongodb://localhost:27017"
mongo_client = AsyncIOMotorClient(MONGO_URI)
db = mongo_client["sync_demo"]  # 数据库名
items_collection = db["items"]  # 业务数据集合
sync_records_collection = db["sync_records"]  # 同步记录集合

# 数据模型定义
class Item(BaseModel):
    id: str | None = None  # 客户端生成UUID,服务端自动填充ObjectId
    content: str
    updated_at: datetime = datetime.utcnow()  # 服务端时间戳

    class Config:
        json_encoders = {datetime: lambda v: v.isoformat()}

# 同步记录模型
class SyncRecord(BaseModel):
    user_id: str
    last_sync: datetime = datetime(2000, 1, 1)  # 初始同步时间

    class Config:
        json_encoders = {datetime: lambda v: v.isoformat()}

# 启动事件:创建索引
@app.on_event("startup")
async def startup_event():
    # 为updated_at创建索引,加速同步查询
    await items_collection.create_index("updated_at")
    # 为user_id+last_sync创建唯一索引
    await sync_records_collection.create_index(
        [("u
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值