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)

相关推荐
姜学迁15 分钟前
Rust-枚举
开发语言·后端·rust
【D'accumulation】1 小时前
令牌主动失效机制范例(利用redis)注释分析
java·spring boot·redis·后端
2401_854391081 小时前
高效开发:SpringBoot网上租赁系统实现细节
java·spring boot·后端
Cikiss1 小时前
微服务实战——SpringCache 整合 Redis
java·redis·后端·微服务
Cikiss1 小时前
微服务实战——平台属性
java·数据库·后端·微服务
zmjia1111 小时前
全流程Python编程、机器学习与深度学习实践技术应用
python·深度学习·机器学习
OEC小胖胖1 小时前
Spring Boot + MyBatis 项目中常用注解详解(万字长篇解读)
java·spring boot·后端·spring·mybatis·web
龙的爹23332 小时前
论文翻译 | Generated Knowledge Prompting for Commonsense Reasoning
人工智能·gpt·机器学习·语言模型·自然语言处理·nlp·prompt
2401_857617622 小时前
SpringBoot校园资料平台:开发与部署指南
java·spring boot·后端
计算机学姐2 小时前
基于SpringBoot+Vue的在线投票系统
java·vue.js·spring boot·后端·学习·intellij-idea·mybatis