You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flask中如何从API A多次调用API B并返回批量结果?

当然可行!

你完全找错方向啦——redirect是用来让前端浏览器跳转到另一个页面/接口的,而你需要的是在Flask后端内部主动调用API B,收集每个请求的响应后再统一返回给前端,这完全可以实现。

下面给你两种常见的实现方案:

方案一:通过HTTP请求调用外部API B(最通用)

如果API B是部署在独立服务上的(不管是不是Flask写的),用requests库直接发起HTTP请求就好,这是后端之间调用接口的标准做法:

步骤1:安装依赖

先确保你安装了requests:

pip install requests

步骤2:API A的实现代码

from flask import Flask, jsonify
import requests

app = Flask(__name__)

# 假设API B的地址是这个,根据实际情况修改
API_B_URL = "http://your-api-b-domain/path/to/b"

@app.route('/api/a', methods=['GET'])
def api_a():
    # 这里模拟获取条目列表,实际从你的业务逻辑里拿
    items = ["item1", "item2", "item3"]
    status = []
    
    for item in items:
        try:
            # 调用API B,根据API B的要求用GET/POST,传参方式也按需调整
            response = requests.post(API_B_URL, json={"item": item}, timeout=10)
            # 可以根据响应状态码判断是否成功,或者直接返回响应内容
            result = {
                "item": item,
                "success": response.status_code in (200, 201),
                "response": response.json() if response.ok else response.text
            }
        except requests.exceptions.RequestException as e:
            # 捕获请求异常(超时、连接失败等)
            result = {
                "item": item,
                "success": False,
                "error": str(e)
            }
        status.append(result)
    
    return jsonify(status)

if __name__ == '__main__':
    app.run(debug=True)

方案二:直接调用同应用内的API B视图函数(如果API B和A在同一个Flask项目里)

如果API B是你同一个Flask应用里的视图函数,没必要走HTTP请求绕一圈,直接调用函数就行,但要注意Flask上下文的问题:

from flask import Flask, jsonify, request

app = Flask(__name__)

# 假设这是你的API B视图函数
@app.route('/api/b', methods=['POST'])
def api_b():
    item = request.get_json().get("item")
    # 这里写API B的业务逻辑
    if item:
        return jsonify({"message": f"Processed {item}"}), 200
    return jsonify({"error": "Missing item"}), 400

@app.route('/api/a', methods=['GET'])
def api_a():
    items = ["item1", "item2", "item3"]
    status = []
    
    for item in items:
        try:
            # 手动创建请求上下文,因为直接调用视图函数不会自动生成
            with app.test_request_context('/api/b', method='POST', json={"item": item}):
                # 调用API B的视图函数,拿到响应对象
                response_data, status_code = api_b()
                result = {
                    "item": item,
                    "success": status_code in (200, 201),
                    "response": response_data
                }
        except Exception as e:
            result = {
                "item": item,
                "success": False,
                "error": str(e)
            }
        status.append(result)
    
    return jsonify(status)

if __name__ == '__main__':
    app.run(debug=True)

注意事项

  • 如果你要处理大量的item,同步循环调用可能会让API A的响应时间很长,这时候可以考虑用异步任务(比如Celery)来处理,不过这属于进阶需求了,先把基础实现跑通再说。
  • 记得给API B的请求加超时时间,避免某个请求卡住导致整个API A挂住。

这样实现后,前端就能拿到每个条目的处理状态,完全符合你的需求~

内容的提问来源于stack exchange,提问作者Pranjal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:57:40