如何捕获调用 API 的响应,该 API 对特定回调 URL 做出响应以供客户端查看?
假设我正在向 Flask 中的某个后端 url 发送 ajax 帖子:
$.ajax({
type: 'POST',
url: 'api-req',
data: {'d1': '{{ d1 }}', 'd2': d2},
success: function(data) {
console.log(data); //should do something else here
}
});
到目前为止一切顺利,该 URL 正在向某些 API 服务发出请求:
@public.route('/api-req', methods=['GET', 'POST'])
def api_req():
if request.method == 'POST':
d1 = request.form['d1']
d2 = request.form['d2']
api_url = f'{base_url}/api'
api_data = {"d1": d1, "d2": d2, "callbackUrl": "http://www.myurl.com/api-service/response"}
r = requests.post(sign_url, json=sign_data)
return r.text # should return something else
@public.route('/api-service/response', methods=['POST'])
def api_resp():
# do something here to capture and send to client which is waiting
pass
但现在我不知道如何捕获来自 API 服务的响应并将其发送到客户端前端以继续。
您需要一些“中介”来在端点和支持等待数据准备就绪的回调 URL 处理程序之间交换数据,例如使用 RabbitMQ,您可以“订阅”具有某个 id 的消息,然后等待,除非回调将该消息放入队列
我不确定我是否理解,但我认为您可以使用 websocket 连接您的客户端,该 websocket 将在特定调用完成时收到通知,然后响应 API 将发布到它
https://language-tools.ec.europa.eu/assets/pages/05_example_python.html
通过来自服务器的回调异步响应检查来自 EU 的此解决方案。 涉及到一个中间路线:
@app.route('/checkResult', methods=['POST'])