如何基于GET请求调用API中指定Python函数实现计算与web服务分离
实现方案
基础实现思路
你不需要自己写逻辑判断要调用的函数,直接用Python轻量API框架的路由功能就能实现路径和计算函数的绑定,开发效率高,也符合行业通用规范。最适合新手的方案是用FastAPI或者Flask搭建compute节点的API服务,整个流程的实现成本很低。
compute侧API示例(FastAPI版本)
FastAPI对新手友好,自带接口文档、参数校验,性能也足够用,示例代码如下:
from fastapi import FastAPI, HTTPException, Header import pandas as pd # 替换成你自己的数据库连接 from your_db_config import db_conn app = FastAPI() # 自定义API密钥,用于接口鉴权,避免未授权访问 VALID_API_KEY = "你自己设置的随机密钥串" # 你的计算函数 def my_func(): data = pd.read_sql("SELECT * FROM database", con=db_conn) # pandas DataFrame 转成可序列化的字典列表格式 return data.to_dict(orient="records") # 路由绑定:访问/my_func路径就会触发下面的处理函数 @app.get("/my_func") def call_my_func(x_api_key: str = Header(None)): # 先校验API密钥 if x_api_key != VALID_API_KEY: raise HTTPException(status_code=401, detail="非法访问") try: result = my_func() return {"code": 0, "msg": "success", "data": result} except Exception as e: raise HTTPException(status_code=500, detail=f"计算失败: {str(e)}")
写完之后直接用uvicorn就能启动服务:uvicorn main:app --host 0.0.0.0 --port 8000,启动后访问http://你的compute节点IP:8000/docs就能看到自动生成的接口调试页面,可以直接在线测试接口是否可用。
webpage侧调用示例
要加异常处理和超时设置,避免计算接口异常影响Django服务的稳定性:
import requests COMPUTE_API_URL = "https://my_api.com/my_func" API_KEY = "和compute节点设置的一致的密钥" def get_compute_data(): try: resp = requests.get( COMPUTE_API_URL, headers={"X-API-Key": API_KEY}, timeout=120 # 根据你的计算任务实际耗时调整 ) # 状态码非200时直接抛出异常 resp.raise_for_status() resp_json = resp.json() return resp_json["data"] except requests.exceptions.RequestException as e: # 这里可以加日志记录错误,或者返回自定义错误提示 print(f"调用计算接口失败:{e}") return None
进阶优化(针对长耗时计算任务)
如果你的计算任务单次执行超过1分钟,不适合用同步调用的方式,会导致请求挂住,建议改成异步任务模式:
- compute侧引入Celery + Redis/RabbitMQ做任务队列,收到请求后先返回任务ID,后台异步执行计算
- webpage侧拿到任务ID后,可以定期轮询任务状态,或者给compute侧传回调地址,计算完成后主动通知webpage拿结果
学习资源推荐
入门教程
- HTTP协议基础:先搞清楚HTTP常用方法、状态码、请求头、响应格式的基本概念,是API开发的基础
- FastAPI官方入门教程:内容通俗易懂,有大量可直接运行的示例,跟着敲一遍就能写出可用的接口
- Flask官方快速入门:如果你偏好更轻量、更灵活的框架,可以看这个,生态非常丰富,遇到问题很容易找到解决方案
相关书籍
- 《FastAPI实战》:从零到一教你开发生产可用的FastAPI服务,包含很多实际项目的最佳实践,适合新手快速上手
- 《Python Web开发实战》:覆盖Flask、API设计、性能优化、部署等全流程内容,能帮你建立完整的Python Web开发知识体系
- 《RESTful API设计最佳实践》:教你设计规范、易维护、兼容性好的API接口,帮你避开常见的API设计坑
内容的提问来源于stack exchange,提问作者CutePoison
相关产品推荐
相关产品推荐

