# simple-api-gateway **Repository Path**: grantchenhuarong/simple-api-gateway ## Basic Information - **Project Name**: simple-api-gateway - **Description**: 实现简易的网关代理能力,涵盖用户管理、API管理、授权管理及订阅管理功能,提供API集中管控,提供鉴权、日志、限流的基础服务。 - **Primary Language**: Python - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2025-04-09 - **Last Updated**: 2025-10-10 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # simple-api-gateway ## 介绍 实现简易的网关代理能力,涵盖用户管理、API管理、授权管理及订阅管理功能,提供API集中管控,提供鉴权、日志、限流的基础服务。 主要使用VSC+Cline+DS的自动化编程技术完成架构、前后端、数据库开发,同时自动生成单元测试用例 ## 软件架构 软件架构说明 1. 前端Vue 2. 后端FastAPI 3. 数据库使用PostgreSQL 4. Redis做限流、日志队列 5. Celery实现定时任务框架 ## 安装教程 1. xxxx 2. xxxx 3. xxxx ## 使用说明 1. API网关基础使用 - 启动FastAPI服务 - 配置API路由和权限 2. 日志处理机制 - API调用日志先写入Redis列表(api_call_logs) - ~~独立日志写入服务定期批量从Redis读取并写入PostgreSQL~~ - ~~启动日志写入服务: `python backend/log_writer.py [--interval 10] [--batch-size 100]`~~ - ~~interval: 扫描Redis的间隔时间(秒)~~ - ~~batch-size: 每次批量处理的日志数量~~ - 修改成为Celery框架调用实现定期转储到PostgreSQL数据库当中 3. 限流配置 - 通过Redis实现API调用限流 - 可在api_grants表中配置每个用户的每分钟调用限制 ## 启动操作 ### 窗口1:backend ``` # 启动PostgreSQL数据库 service postgresql start # 启动Redis服务器 service redis-server start # 启动后端服务 cd /gemini/code/simple-api-gateway/backend PYTHONUNBUFFERED=1 gunicorn main:app -b 0.0.0.0:8000 -k uvicorn.workers.UvicornWorker -w 10 --capture-output --enable-stdio-inheritance --access-logfile - --error-logfile - --log-level debug ``` ### 窗口1:frontend ``` cd /gemini/code/simple-api-gateway/frontend npm run dev -- --host=0.0.0.0 ``` ### 窗口3:Worker ``` cd /gemini/code/simple-api-gateway celery -A backend.cronjobs.celery_main worker -P eventlet -l INFO -E ``` ### 窗口4:Beat ``` cd /gemini/code/simple-api-gateway celery -A backend.cronjobs.celery_main beat -l INFO ``` ## 更新操作 ``` git fetch --all git reset origin --hard ``` ## ToDoList | 序号 | 待实现内容 | 提出时间 | 完成时间 | 实现人员 | 备注 | | ---- | ------------------------------------------------------------ | ---------- | ---------- | -------- | ------------------------------------------------------------ | | 1 | 定时自动(早8中12晚8点)巡查注册的API服务状况,将无法服务的API信息,通过企微群机器人方式通知到运维人员。 | 2025-05-26 | 2025-05-27 | 陈华荣 | 使用Celery框架重构定时任务,将每30秒将redis内API调用日志刷入PG数据库、每半小时同步最新API授权信息到redis和此任务统一改造。 | | 2 | 增加对于负载均衡的处理,网关中转的后端API地址拓展成可以多个。统一的网关入口调用时,网关对于多个服务地址随机重新排队,再顺序调用,成功则返回调用结果;否则继续调用下一个直到成功或者轮询完毕。相应的,对于API的检测也需要对所有配置的后端服务进行检测,判断当中有任意一个成功则网关服务正常,但是会将其中检测失败的后端服务API,企微服务通知运维人员。 | 2025-05-26 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | ## 参与贡献 1. Fork 本仓库 2. 新建 Feat_xxx 分支 3. 提交代码 4. 新建 Pull Request ## 特技 1. 使用 Readme\_XXX.md 来支持不同的语言,例如 Readme\_en.md, Readme\_zh.md 2. Gitee 官方博客 [blog.gitee.com](https://blog.gitee.com) 3. 你可以 [https://gitee.com/explore](https://gitee.com/explore) 这个地址来了解 Gitee 上的优秀开源项目 4. [GVP](https://gitee.com/gvp) 全称是 Gitee 最有价值开源项目,是综合评定出的优秀开源项目 5. Gitee 官方提供的使用手册 [https://gitee.com/help](https://gitee.com/help) 6. Gitee 封面人物是一档用来展示 Gitee 会员风采的栏目 [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/)