10 月 23 - 25 日,QCon 上海站即将召开,现在购票,享9折优惠 了解详情
写点什么

Dropbox 发布具有可伸缩性的 API

  • 2017-04-10
  • 本文字数:1541 字

    阅读完需:约 5 分钟

在我们构建新的 API 时,人们通常会在未来的不可知和对棘手问题的预优化之间感到迷茫。Dropbox 也不例外。构建 API 时,Dropbox 开发人员必须考虑到作为一家公司可能会出现的快速增长,同时也需要认识到,他们对 API 做出的任何变更,随着时间的推移总会被一部分 API 消费者认为是在倒退。那么他们最终是怎么解决这些问题的?答案是三思而后行。

Leah Culver 之前曾是 Dropbox 的一名开发人员,他去年发表了一篇博文,文中详细阐述了Dropbox 针对自身的API,从V1 版本到V2 版本的艰难升级过程。他们的第一个重大决定是,是否让现有的API 适配日益增长的消费者需求,因为他们扩展了Dropbox Pro 和核心功能。他们的决定主要围绕着与API 消费者的“共生关系”展开,Culver 将其描述为应对API 增长的秘密武器。他们面临两种需求,一个是以一种灵活的方式与其他公司应用集成,一个是不造成混乱,最终前者战胜了后者,连通性比之前的任何时刻都要来得重要。一项最新的Google调查显示,有四分之一的用户通过搜索引擎发现应用程序,根据 Statista 的报告显示,大约 2 到 3 百万个应用程序在安卓和苹果应用商店可供下载,对于这些应用程序来说,搜索可见性是非常重要的。越来越多的用户不愿意因为要使用相关功能而安装多个应用程序,而错过扩展 Dropbox API 的机会意味着与第三方应用程序集成度的下降,最终导致 Dropbox 用户的减少

然而,在创建 Dropbox API 的 V2 时,Dropbox 有关闭的趋势。Dropbox 创建了自定义的 JSON,而不是使用 REST 范式、GraphQL 或者套接字服务,这样很大程度上偏离了 REST 或 HTTP 的准则。不使用通用的 HTTP 状态码,Dropbox 转而针对所有的错误使用 409 错误码,并在消息体里附带了自定义的错误消息。Dropbox 的 API 处理层是一个 HTTP POST 方法。不需要使用请求消息的 URL 或消息头,Dropbox 接收一个 JSON 消息体作为输入,然后返回一个 JSON 消息体,不管执行的 API 操作是检索还是修改状态。

在伸缩性方面,Dropbox 的方式有几处优点和缺点。一方面,Dropbox 不受 REST 的死板、僵化天性的限制,这类限制不适用于所有的数据使用案例,所以常常让人完全误解。Steve Klabnik,RUST/RUBY 贡献者,同时也是 Rust for Rubyists 的作者,他声称,99.99% 的RESTful API 没有完全符合Roy Fielding 的REST 思想。这一论点打破了过往认为RESTful 规范可以让Dropbox 的API 很容易适配未来的应用场景的论调,因为他们不符合任何一套模型。然而,对应于他们所获得的灵活性,他们也失去了结构性和大多数开发人员的易理解性。

HTTP 状态码是一个通用标准,负责与 Dropbox API 集成的开发人员会很容易理解和使用,响应报文里面的自定义状态码不仅仅需要额外的字符串处理程序,而且也难以从编程角度理解不同的错误状态。在提供强大的 API 开发可能性的同时,混合使用 GET 和 POST 原语,分不清来自客户端的调用哪些是改变对象状态的操作,哪些是存粹的查询操作,这种集成方案具有潜在的风险。大部分自定义 API 架构要求掌握大量有关 Dropbox API 的领域知识,而不仅仅是把它当成一个简单的 API 看待。Dropbox 的开发人员 F. Metsys 写了一篇博文,在文章中他描述了Dropbox 的方式:“我们伺机选择了HTTP 的优点,而不会将自己绑定在它上面。”这意味着Dropbox 的API 可以提供其他API 无法提供的特性和数据可见性,或者也可能意味着一种令人困惑且紧凑的集成过程。只有时间可以告诉我们,Dropbox API 的ad hoc 结构对于整体的增长和伸缩是有利还是有害。

原文地址: Evolving APIs for Scale with Dropbox


感谢薛命灯对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们。

2017-04-10 19:002113
用户头像

发布了 50 篇内容, 共 30.8 次阅读, 收获喜欢 40 次。

关注

评论

发布
暂无评论
发现更多内容

能助我拿3家大厂offer的神级Java面试宝典,你值得拥有

Java架构之路

Java 程序员 架构 面试 编程语言

学习方法记录

风翱

学习方法 3月日更

Wireshark数据包分析学习笔记Day21

穿过生命散发芬芳

Wireshark 数据包分析 3月日更

如何革命社交媒体、实现去中心化?丝绸之路创始人在狱中提出了构想

CECBC

社交网络

Java泛型最全指南

xcbeyond

Java 泛型 3月日更

镜像仓库学习笔记

lenka

3月日更

NoCode 实战 | 零代码应用开发,轻松搞定任务跟踪管理难题(上)

亚马逊云科技 (Amazon Web Services)

用 Redis 实现消息队列是一个好主意么?

escray

redis 学习 极客时间 3月日更 Redis 核心技术与实战

ProxmoxVE系列:Ubuntu服务器版系统安装

Bob

虚拟机 系统 proxmoxve PVE

智能时代与华为路标:手机影像的文艺复兴史

脑极体

数据去哪了?:从一次生产事故聊聊并发编程原子性问题

海拉鲁

Java 并发编程 多线程

C++ 中的 task based 并发

赖猫

c++ 后端 多线程 并发 服务器开发

第十二周作业

Geek_mewu4t

本科毕业,六年Java开发经验,阿里技术三面+HR面,拿下38*16薪资P7offer

Java架构之路

Java 程序员 架构 面试 编程语言

区块链技术在医疗保健领域的应用展望

CECBC

医疗

员工离职的注意事项

石云升

离职 28天写作 职场经验 3月日更

ETHAT云矿机系统开发案例丨ETHAT云矿机开发源码

系统开发咨询1357O98O718

深圳正探索利用区块链技术理念打造“数字政府“

CECBC

大数据

分布式锁的实现方案

360技术

寻找被遗忘的勇气(二十四)

Changing Lin

3月日更

Redis - 缓存穿透、缓存击穿、缓存雪崩

insight

redis 3月日更

看东鹏饮料如何从150亿条数据中洞察先机 | 精选案例

亚马逊云科技 (Amazon Web Services)

如何定义错误码

编号94530

Java 错误码 错误处理

[译]用@WebMvcTest测试MVC Web Contorller

麦芽面包

spring unittest

多线程-基础

九洲城豪横团团长

ProxmoxVE系列:上传系统镜像&&创建虚拟机

Bob

虚拟机 proxmoxve PVE

数据结构队列

我是程序员小贱

3月日更

亚马逊云科技和德甲为 2021 赛季新推出三项赛况统计数据,强化实时比赛分析

亚马逊云科技 (Amazon Web Services)

ProxmoxVE 系列:如何巧妙的用Xshell连接Ubuntu server服务主机

Bob

虚拟机 系统 proxmoxve PVE

C++ socket通讯详解及注意事项

赖猫

c++ 后台开发 后端 服务器开发

在全面拥抱人工智能前,这 6 步您的公司做到了吗?| 云途专栏

亚马逊云科技 (Amazon Web Services)

Dropbox发布具有可伸缩性的API_语言 & 开发_Margot Krouwer_InfoQ精选文章