阿里云盘官方接口限制和解决方法

其实很早就准备接入阿里云盘了,因为在印象中阿里云盘的速度体验比较好,谁曾想:这是一次主观臆断。凡事没有调查就没有发言权,以后要避免凭印象做决定。

限速问题

百度网盘的限速主要体现在下载速度上,而阿里云盘的限速是全方位的,包括:

  1. 下载速度限制。
  2. 下载并发数限制。
  3. API调用限制。

其中的API调用限制基本上所有网盘都有,但是同样的内容同样的方式进行上传、下载,阿里云盘更容易触发。

下载并发数限制

按照阿里云盘官方应用分级描述:普通应用文件分段下载并发限制(单app单用户维度,1s窗口的并发上限)为3。但是实际测试下来,连续连载三个文件就会触发403错误,而且这三个文件的时间跨度已经超过了1秒。

API调用限制

比较常见的是429错误,即API调用配额,按照官方的描述,普通应用的API配额如下:

接口调用配额(单app单用户维度)核心 API 调用配额:~/openFile/list      10 秒 40 次~/getDownloadUrl  10 秒 10 次。剩余 API 限流:15 QPS

问题是:阿里云盘的接口本身还有较大改进空间,比如没有递归返回文件列表的接口。

假如应用需要知道某一个文件夹下的内容信息,输入是文件夹路径,输出是文件夹内的条目信息。那么只能多次调用list,每次调用list返回一个子文件夹的信息。但是由于list接口依赖parent_file_id,而parent_file_id又需要通过get_by_path获取。这又增加了API调用次数,更容易触发429错误。

关键接口缺失

缺少递归获取文件夹内条目的接口,相比百度网盘一次请求就能完成的任务,在阿里云盘上需要多次请求,且请求次数取决于子文件夹数量。

接口参数问题

本地文件创建时间字段不生效

文件创建接口:POST 域名 + /adrive/v1.0/openFile/create。其中的local_created_atlocal_modified_at字段不生效,

场景:先通过create接口创建,然后再通过获取文件详情接口POST 域名 + /adrive/v1.0/openFile/get,会返回created_at和updated_at,但是它们不是创建文件时指定的本地创建时间和本地修改时间(估计是服务器上时间)。同样的,在文件上传过程中,调用complete接口返回的created_at和updated_at也不是调用create接口时指定的本地时间。

文件上传没有覆盖选项

在文件上传的create步骤中,有如下选项,如果存在同名文件,只能选择:自动重命名、拒绝创建和创建同名文件。实在无法理解为什么要创建同名文件?而不是直接替换掉。

check_name_modestring必填auto_rename 自动重命名,存在并发问题

refuse 同名不创建

ignore 同名文件可创建

问题处理方法

问题解决方法
问题一:下载并发数限制导致403错误控制下载请求的出口频率,对于分段下载:3次/秒,非分段下载:3次/60秒
问题二:API调用限制采用同样的方法进行出口限制
问题三:缺少递归列举接口官方接口还在开发,暂时只能用list接口替代
问题四:文件本地创建时间不生效等待官方修复
问题五:文件上传模式中没有覆盖选项在上传前,如果要覆盖,先delete,再上传