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)

相关推荐
金銀銅鐵9 小时前
[Java] 用 GUI 展示 EnumSet 增减元素时的内部变化(上)
java·后端·ai编程
念何架构之路9 小时前
go-grpc设计思想
开发语言·后端·golang
system_error_x10 小时前
SpringBoot 集成 Thymeleaf 简洁入门
java·spring boot·后端
步行cgn12 小时前
Spring MVC 视图机制的核心接口与类
java·开发语言·后端·spring·mvc
码事漫谈12 小时前
AI 读你的提示词,其实很没耐心
后端
珠海西格电力13 小时前
零碳园区管理系统的性能评估体系的行业标准
大数据·网络·人工智能·物联网·机器学习·架构·能源
用户83562907805113 小时前
如何使用 Python 格式化 Excel 单元格中的长文本
后端·python
我命由我1234513 小时前
Python 开发 - Python 的 pathlib
java·开发语言·后端·python·学习·java-ee·学习方法
IT_陈寒13 小时前
Java性能优化完全指南
前端·人工智能·后端
电子IT笔记13 小时前
对接群晖NAS,上传和删除踩坑记录
前端·后端