FATE联邦学习框架:API实践Upload和DownLoad的踩坑记录

官方API文档:API - FATE Flow (federatedai.github.io)

因为公司技术栈和Fate的技术架构的原因,我们最终选择了采用Java去调用接口的方式与FATE平台实现连通。

然而在测试FATE官方提供的API时,却发现了FATE的不少坑。因为现在使用FATE的人并不多的原因,网上完全没有解决方案。很多坑也是多方调查才解决的,在这里记录下,希望对你有所帮助。

1. 测试接口范围

因为我们使用场景比较特殊,我仅测试了以下五个接口,其中/data/upload/tracking/component/output/data/download接口测试失败,其他均正常。

根据其他使用者的反馈,问题也主要出在这两个接口中,其他接口根据官网文档都能调通

2. upload接口调用方式

1.官方介绍

根据官方文档的介绍,upload接口的调用方式如下:

于是,我选择了通过url直接传参数,将文件变为二进制文件传入的方式。

如图,参数为application/octet-stream类型

最后的结果很明显,失败了。

2. Github ISSUE关键解答

原文链接如下:FATE1.10.0的fate flow Swagger API的/data/upload接口报错 · Issue #4613 · FederatedAI/FATE (github.com)

这里面官方工作人员回答,说可以直接通过application/json传入文件参数。

虽然这次请求成功了,可是进入Fate管理端发现任务执行失败,通过查询日志定位是文件找不到的问题。

注意截图中文件地址前缀为fateflow说明上传文件的地址默认为Fate所在的机器,说明报错原因是不能上传本地文件。

在此问题解答中,官方人员也说明了这种情况。KeyError: 'file' when using REST API to upload data · Issue #3647 · FederatedAI/FATE (github.com)

也就是说application/json传入的文件地址参数只能将Fate所在机器的文件上传到Fate中,如果想要上传本地文件至Fate中,需要将use_local_data参数改为1。

但是亲测,参数改为1接口直接报错。

也就是说,要将本地文件传入Fate平台仍然需要通过application/octet-stream类型的参数将文件以二进制的形式传入到Fate平台中。

3. 成功的调用方式

亲测只有通过form-data 传入文件和参数才能上传文件,并且上传成功。

3. DownLoad 接口调用方式

这个接口倒是没有上传接口解决起来那么离谱,但我觉得官方文档的误导性太强了。

官方文档介绍如下:

但是使用postman调用尝试失败报错

解决方法非常简单,只需把post方式用get方式即可。

提示method not allowed 然后尝试改用get请求确实有点合理,但是官方文档明晃晃标注post请求就不太合理了吧。

而且我旁边的六年老Java大哥也和我说这么多年第一次见get请求传requestBody参数的。这个接口的请求方式确实挺出乎意料的。

还有一点需要注意,这个方法最后是传回一个文件,需要用send and download的方式才能下载到压缩文件,只用send最后会显示一堆乱码而不是下载文件。

如果使用java调用的话,可以参考这篇文档,亲测可用。

java 实现带RequestBody传Json参数的GET请求 - 掘金 (juejin.cn)

相关推荐
2401_85763639几秒前
计算机课程管理平台:Spring Boot与工程认证的结合
java·spring boot·后端
也无晴也无风雨1 小时前
深入剖析输入URL按下回车,浏览器做了什么
前端·后端·计算机网络
涔溪1 小时前
HTTP TCP三次握手深入解析
网络·tcp/ip·http
封步宇AIGC4 小时前
量化交易系统开发-实时行情自动化交易-3.4.2.Okex行情交易数据
人工智能·python·机器学习·数据挖掘
2401_857610034 小时前
多维视角下的知识管理:Spring Boot应用
java·spring boot·后端
封步宇AIGC4 小时前
量化交易系统开发-实时行情自动化交易-2.技术栈
人工智能·python·机器学习·数据挖掘
景鹤4 小时前
【算法】递归+回溯+剪枝:78.子集
算法·机器学习·剪枝
代码小鑫4 小时前
A027-基于Spring Boot的农事管理系统
java·开发语言·数据库·spring boot·后端·毕业设计
颜淡慕潇6 小时前
【K8S问题系列 | 9】如何监控集群CPU使用率并设置告警?
后端·云原生·容器·kubernetes·问题解决
光明中黑暗6 小时前
机器学习 笔记
人工智能·笔记·机器学习