🍳 食韵味简 ------ 免费开源的中式菜谱 API 服务
一个免费开源的中式菜谱 API 项目。内置 3000 道 中式菜谱、覆盖 10 大菜系,开箱即用,无需注册、无需 API Key。

*首页:今日推荐 + 数据统计卡片 + "做一桌菜"入口
一、项目简介
食韵味简 是一个免费、开源的中式菜谱 API 服务,同时也是一个完整的落地网站。它将"菜谱数据"开放成标准 REST API,任何人都可以调用它来构建自己的菜谱应用。
项目采用"展示型首页 + 开放 API + 在线调试"的一体化形态,围绕菜谱做了完整的转译:
- 随机"一道好菜" → 菜谱的随机推荐
- 多维分类 → 菜谱的菜系/类型/标签
- 同样提供在线调试、分类浏览、接口文档等开发者友好功能
二、功能亮点
| 功能 | 说明 |
|---|---|
| 🎲 随机菜谱 | 支持按菜系、类型、标签、时长多维随机 |
| 🔍 全文检索 | 标题 / 描述 / 食材模糊搜索,分页返回 |
| 🍽️ 做一桌菜 | 一键智能搭配凉菜、热菜、汤羹、主食、甜点,凑齐一桌菜 |
| 🖥️ 在线调试 | 内置 Python / JS / Node / Go / Java / PHP / curl 多语言示例,实时查看 JSON 结果与耗时 |
| 🎨 六套主题 | 暖阳、樱粉、清净、墨韵、暮山、夜阑,一键切换,记忆偏好 |
| 📚 分类浏览 | 按菜系 / 类型 / 标签 / 时长筛选,渐变色卡片 + 专属 emoji |
| 📖 详情弹窗 | 点开即看食材清单、制作流程,无需跳页 |

菜谱详情:食材清单 + 制作流程

做一桌菜:选择道数、菜系偏好、口味偏好

智能搭配 12 道菜,按类型分组展示
三、技术栈
- 后端:Python 3.13 + FastAPI + SQLite
- 前端:Vue 3 + TypeScript + Vite + Tailwind CSS
- 数据 :内置 3000 道菜谱(
backend/data/recipes.json),覆盖 10 大菜系(川、粤、鲁、苏、浙、闽、湘、徽、京、家常)× 5 大类型(凉菜、热菜、汤羹、主食、甜点) - 部署:前后端一体化,FastAPI 直接托管前端静态文件,单服务即可上线

接口总览:全部 10 个开放端点

在线调试:7 种语言代码示例 + 实时 JSON 返回

分类浏览:多维筛选 + 精选推荐

菜系详情页(以鲁菜为例)
四、快速开始
1. 克隆代码
bash
git clone https://atomgit.com/wangchunyu114/cook-easy.git
cd cook-easy
2. 启动后端(端口 8000)
bash
cd backend
pip install -r requirements.txt
python start.py # 启动服务
# python stop.py # 停止服务
启动后端后即可体验:
| 地址 | 说明 |
|---|---|
| http://127.0.0.1:8000 | 网站首页(一体化的前端页面) |
| http://127.0.0.1:8000/docs | Swagger UI 交互式接口文档 |
3. 启动前端(端口 5173,开发模式)
bash
cd frontend
npm install
python start.py # 等价于 npm run dev
# python stop.py # 停止服务
然后浏览器访问 http://127.0.0.1:5173。
前端开发服务器已配置代理,
/api前缀会自动转发到http://127.0.0.1:8000,无需额外配置跨域。
4. 前后端一体化构建(生产部署)
bash
cd frontend
npm run build
# 将 frontend/dist 产物复制到 backend/static_frontend
# 由 FastAPI 直接托管,单服务即可部署上线
五、API 一览
所有接口均返回 JSON,无需注册、无需 API Key,直接调用即可。
| 接口 | 说明 | 示例 |
|---|---|---|
GET /api/recipes/random |
随机一道菜谱 | /api/recipes/random |
GET /api/recipes/random |
按条件随机 | /api/recipes/random?cuisine=川菜&category=热菜&tag=下饭 |
GET /api/recipes/{id} |
按 ID 获取菜谱 | /api/recipes/1 |
GET /api/search |
全文检索 | /api/search?q=红烧&page=1&per_page=20 |
GET /api/cuisines |
菜系列表 | /api/cuisines |
GET /api/categories |
类型列表 | /api/categories |
GET /api/tags |
标签列表 | /api/tags |
GET /api/stats |
数据统计 | /api/stats |
GET /health |
健康检查 | /health |
返回结构示例
json
{
"data": {
"id": 1,
"title": "麻婆豆腐",
"subtitle": "一勺红油,人间至味",
"description": "川菜代表,豆腐嫩滑,麻辣鲜香......",
"difficulty": "简单",
"time_minutes": 20,
"cuisine": { "id": 1, "name": "川菜", "description": "麻辣鲜香......" },
"category": { "id": 2, "name": "热菜", "description": "......" },
"ingredients": ["嫩豆腐 400g", "牛肉末 80g"],
"steps": ["豆腐切块,入加盐的开水中焯烫......"],
"tags": [{ "id": 1, "name": "下饭" }]
}
}
Python 调用示例
python
import requests
url = "https://cook-easy-319130-10-1452418235.sh.run.tcloudbase.com/api/recipes/random"
resp = requests.get(url, timeout=5)
data = resp.json()["data"]
print(f"今日推荐:{data['title']}")
print("食材:", "、".join(data['ingredients'][:3]))
六、项目结构
cook-easy/
├── backend/
│ ├── app/
│ │ ├── main.py # FastAPI 入口(含静态资源托管)
│ │ ├── database.py # SQLite 初始化与数据导入
│ │ ├── schemas.py # Pydantic 模型
│ │ ├── common.py # 公共查询逻辑
│ │ ├── routers/ # API 路由(search/cuisine/category/tags/stats...)
│ │ └── scripts/ # 数据生成与校验脚本
│ ├── data/
│ │ └── recipes.json # 内置 3000 道菜谱数据
│ ├── static_frontend/ # 前端构建产物(一体化部署用)
│ └── start.py / stop.py # 服务启停
├── frontend/
│ ├── src/
│ │ ├── api/client.ts # API 客户端
│ │ ├── components/ # Hero / 接口总览 / 在线调试 / 分类浏览 / FAQ / 详情弹窗 / 主题切换
│ │ ├── composables/ # useTheme 主题管理
│ │ ├── utils/ # 食材 emoji 映射等工具
│ │ ├── views/ # 页面视图
│ │ └── types/ # TypeScript 类型
│ └── start.py / stop.py
七、扩展菜谱数据
编辑 backend/data/recipes.json,按现有格式追加条目(id 不重复),删除已生成的 recipes.db 后重新启动即可生效。
八、结语
3000 道数据规模;从单一暗色页面,到六套可切换主题;从只会返回 JSON 的 API,到"做一桌菜"这样的完整产品体验------食韵味简 既是一个可以直接使用的菜谱 API,也是一个前端 + 后端 + 数据的完整开源示例。
如果对你有帮助,欢迎 Star ⭐、提交 Issue 或 PR,一起让这个项目更好。
- 🌐 在线体验:https://cook-easy-319130-10-1452418235.sh.run.tcloudbase.com
- 📂 开源仓库:https://atomgit.com/wangchunyu114/cook-easy
- 📝 License:MIT