当前位置:首页>python>我用 FastAPI 把 Python 脚本变成了人人能用的服务

我用 FastAPI 把 Python 脚本变成了人人能用的服务

  • 2026-10-10 23:30:50
我用 FastAPI 把 Python 脚本变成了人人能用的服务

你写了一个好用的 Python 脚本,想分享给别人用?本文记录我把汇率查询脚本升级成 API + 网页的全过程。


一、原来:一个命令行脚本

我手头有一个查询美元兑人民币汇率的 Python 脚本,效果是这样的:

$ python usd-cny-boc.py============================================================  USD/CNY Exchange Rate Query (Bank of China)============================================================  Query period: 2026-06-06 to 2026-06-12  2026-06-06  ->  7.2341  2026-06-07  ->  7.2289  ...  Lowest rate: 2026-06-07  ->  7.2289

自己用着挺爽,但想分享给别人时问题来了:

场景
问题
给普通朋友
"我不会用命令行啊"
给同事
"我没装 Python"
给程序员
"能直接接口调用吗?不想每次跑脚本"

传统解决方案的局限:

  • ❌ 打包成 exe:程序员无法通过脚本接入
  • ❌ 发 Python 文件:要求对方装环境
  • ❌ 截图发结果:无法实时查询

我需要的是一个:普通人能网页查,程序员能接口调的服务。


二、FastAPI:三步封装成 API

第一步:安装依赖

pip install fastapi uvicorn

第二步:写 API 代码

from fastapi import FastAPI, Queryfrom typing importOptionalapp = FastAPI(title="USD/CNY Exchange Rate API")@app.get("/api/rates")defget_rates(    date: Optional[str] = Query(None, description="查询日期"),    days: int = Query(7, ge=1, le=30, description="查询天数")):"""查询美元兑人民币汇率"""# ... 查询逻辑 ...return {"rates": [...],"lowest_rate": {...},"summary": {...}    }

第三步:启动服务

python main.py

服务运行在 http://localhost:8000[1]


三、API 的三种用法

用法一:普通人 → 网页查询

打开浏览器,访问 http://localhost:8000

界面特点:

  • ✅ 输入日期和天数,点击查询
  • ✅ 结果列表展示,最低汇率高亮标记
  • ✅ 底部统计摘要(查询期间、最低值、完整率)
  • ✅ 手机/电脑都能用(响应式设计)
  • ✅ 加载动画,错误提示

不需要懂代码,不需要装任何软件,有浏览器就能用。

用法二:程序员 → 接口调试

访问 http://localhost:8000/docs

Swagger UI 自动生成:

  • ✅ 接口列表和参数说明
  • ✅ 在线测试(Try it out)
  • ✅ 请求/响应示例
  • ✅ 数据模型定义

用法三:程序调用 → 一行代码

# curl 命令行curl "http://localhost:8000/api/rates?days=7"
# Python requestsimport requestsresponse = requests.get("http://localhost:8000/api/rates?days=7")data = response.json()for rate in data["rates"]:print(f"{rate['date']}: {rate['rate']}")
// JavaScript fetchfetch("http://localhost:8000/api/rates?days=7")  .then(r => r.json())  .then(data =>console.log(data.lowest_rate));

四、技术亮点

4.1 一个服务,三种界面

路径
用途
用户
/
网页查询界面
普通人
/docs
Swagger UI
程序员调试
/api/rates
JSON 数据接口
程序调用

4.2 自动数据校验

@app.get("/api/rates")defget_rates(    days: int = Query(7, ge=1, le=30)  # 自动限制 1-30 天):

输入超出范围?自动返回 422 错误,不需要手写校验。

4.3 自动生成文档

写代码时加注释:

defget_rates(    date: Optional[str] = Query(None, description="查询日期 (YYYY-MM-DD)")):"""查询美元兑人民币汇率"""

文档自动生成,零维护成本。


五、部署上线

Docker 部署

FROM python:3.11-slimWORKDIR /appCOPY requirements.txt .RUN pip install -r requirements.txtCOPY main.py .CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]
docker build -t exchange-rate-api .docker run -p 8000:8000 exchange-rate-api

云服务器部署

# 使用 systemd 守护进程sudo systemctl enable exchange-apisudo systemctl start exchange-api

六、给你的脚本做 API 的 checklist

□ 把核心逻辑抽成函数(不依赖 print/input)□ 用 FastAPI 创建应用和端点□ 用 Pydantic 定义数据模型(自动校验)□ 添加参数说明和文档字符串□ 处理错误(返回标准 HTTP 状态码)□ 写个简单网页给普通人用□ 启用 CORS(让前端能调用)□ 写 README(告诉别人怎么用)□ 测试所有端点□ Docker 打包部署

七、总结

阶段
形态
谁能用
脚本时代
Python 文件
会命令行的人
EXE 时代
可执行文件
普通用户
API 时代网页 + 接口任何人、任何设备

核心转变:

  • 从 print() 到 return JSON
  • 从 sys.argv 到 Query Parameters
  • 从 "跑完就结束" 到 "24小时在线服务"
  • 从 "自己用" 到 "人人能用"

八、完整代码

本文完整代码已整理:

  • 包含:main.py + requirements.txt + README.md + Dockerfile

你也有想分享的脚本?试试封装成 API 吧!

有问题欢迎在评论区交流 👇


最新文章

随机文章