本文浅析Dropbox当前V2版本的API。参考文档DBX Platform developer guide

Dropbox的API是基于HTTP Restful设计的,在Documentation HTTP章节可以找到API最基本的描述。你可以直接使用HTTP来访问Dropbox的API,但是Dropbox提供了多种语言封装的SDK,比如:.Net, Java, Javascript, Python, Swift, Objective-C等等。

第三方APP使用Dropbox的API要获得Access Token。有两种Access Token,一种是私有的,另一种则是通过OAuth流程获得的。私有的Access Token只能用来访问自己Dropbox账户的内容,而通过OAuth获得的Access Token可以运行APP访问他人的账户。除了Access Token这种鉴权方式以外,还有几种辅助的鉴权方式,看Authentication types

Dropbox内部对文件的存储应该是分块的。根据Content Hash的解释,大文件按4MB划分块,对每个块计算SHA-256值。每个4MB的块的SHA-256值会汇聚在一起,形成一个列表,然后针对这个列表再进行SHA-256计算,得到的值就是某个文件的Content Hash,会列在文件的属性里面。

Namespace Guide章节介绍了Namespace的概念。一个Namespace有点像传统的操作系统的一个文件系统。一个Dropbox用户的Home目录是一个Namespace;一个APP专有的文件夹是一个Namespace;一个共享的目录是一个Namespace。和传统的文件系统类似,一个Namespace可以挂在到另一个Namespace中,成为一个子目录。共享目录就是一个被挂在到不同用户Home目录的Namespace。Namespace有自己的ID,在挂载点的属性中有显示。

Data ingress guide一文中有介绍,Dropbox在上传文件的过程中是有流控(throtting)的。如果Dropbox返回HTTP错误代码429,那么意味着流控正在起作用,需要过一会儿再尝试上传操作。产生429错误另有另外一个原因,那就是上传冲突。朝一个Namespace写文件,需要先对这额Namespace上锁。如果无法获得目标Namespace的上传锁,那么就会导致429错误。

Content Access Guide讲述了Dropbox的文件分享机制。首先对于Dropbox里面的文件或者目录,可以生成一个URL链接,并通过这个URL链接进行分享。接收到分享链接的用户不必具有Dropbox账户即可访问链接的内容。缺点是,不管是针对文件还是目录的分享链接,都是只读的,接受者无法修改其内容。Dropbox高级账户还可以针对分享链接设置密码,以及有效期等额外属性。

如果对方有Dropbox账户,则可以直接将文件和目录共享给对方的账户。如果共享的是文件,对方依然不能修改文件的内容。如果共享的是目录,那么可以赋予对方编辑权利,让对方可以修改目录中的内容。如果对方没有Dropbox账户,但是又希望对方能够上传文件,这也有办法,就是使用File Request功能。File Request允许你创建一个URL链接到某个目录,获得该链接的人虽然没有Dorpbox账户,但是也可以通过该链接朝目录中上传文件。

通过Cursor可以判断Dropbox中存储的文件是否有改动。当你通过files/list_folder这个API的时候,它会返回一个Cursor。第三方APP可以通过这个Cursor来判断是否有后续的改动。如果有后续的改动,那么用当前Cursor向Dropbox发起请求的时候,会返回新的内容和新的Cursor。另一种判断Dropbox中存储的文件是否有改动的方式是使用Webhook。简单来说,Webhook是一个Dropbox可以访问的URL,Dropbox向该URL报告改动。

Develop guide中提到,第三方APP可以获得的最高权限是Full Dropbox,也就是可以访问一个Dropbox账户的所有内容。其次是App folder权限,拥有这个权限的APP对指定的目录拥有完全的访问权。还有一种情况,你的APP如果只想访问或者保存某个文件,可以使用Chooser或者SaverChooserSaver需要用户介入,他们需要选择你想访问或者保存的文件。Dropbox还支持ExtensionsDropbox Business apps,此处就不做介绍了。

支持Dropbox的第三方APP一开始是处于Development Status,最多支持500个用户。但是达到50个用户的时候必须在两周内申请Production Status,否则就无法再扩展用户数了。

Dropbox可以保存文件的修订历史,但是这项服务是有具体限制的,看File version history的介绍,免费账户只保管30天的历史。

(完)