写点什么

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:002184
用户头像

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

关注

评论

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

【苍狮技术团队】打造高效日志系统:Graylog + Docker 快速部署 + Spring Boot 日志集成全攻略

苍狮技术团队

日志管理 Graylog

AI赋能专卖人员画像与队伍评价,助力烟草行业人才队伍建设

中烟创新

1688商品列表API接口指南

tbapi

1688API接口 1688商品列表接口 1688商品数据采集

Post-Training on PAI (5): PAI-EasyDistill, PAI 自研大模型蒸馏框架

阿里云大数据AI技术

人工智能 大数据 开源 大模型 大模型蒸馏

直播预告 | KWDB 分布式架构探究

KaiwuDB

数据库 直播预告 KaiwuDB kwdb

1688商品详情API接口指南

tbapi

1688商品详情接口 1688数据采集 1688商品详情API

使用 Strands Agents 开发并部署生产级架构通用型个人助手

亚马逊云科技 (Amazon Web Services)

区块链预付卡APP的开发成本

北京木奇移动技术有限公司

区块链开发 软件外包公司 web3开发

大数据-50 Redis Java Lua实现乐观锁、WATCH机制与SETNX分布式锁

武子康

Java 数据库 redis 大数据 缓存

户外巨型LED屏幕租赁价格预算

Dylan

商业 活动 户外LED显示屏 虚拟演唱会 LED屏幕

2025可信云大会成功召开,天翼云揽获多项权威认证!

天翼云开发者社区

可信云 天翼云

AI Agent 的制胜之道:上下文工程深度解析

十三Tech

智慧安全,数治风险:灯塔低代码平台赋能烟草行业安全管理体系

中烟创新

AI背单词APP的功能设计

北京木奇移动技术有限公司

AI教育 软件外包公司 AI背单词

首家!AI算力最高评级!

百度Geek说

书本介绍:技术札纪——有限硬件与无限计算的权衡艺术

poemyang

云计算 分布式 高并发 Java虚拟机

录屏神器camtasia主要功能介绍,camtasia2024软件激活码密钥,Camtasia中文版免费下载

阿拉灯神丁

录屏软件 视频编辑工具 Camtasia Studio2024 视频剪辑软件

从娃哈哈看传统企业转型:宗馥莉 700 亿营收的产品战略有哪些「可复用模型」?

IPD产品研发管理

产品 产品经理 商业

AI口语陪练APP的功能设计

北京木奇移动技术有限公司

AI教育 软件外包公司 AI英语学习

AI淘汰歌手又近一步,昆仑万维正式上线Mureka V7

新消费日报

从频繁告警到平稳发布:服务冷启动 CPU 风暴优化实践

vivo互联网技术

性能优化 后端 服务器 Arthas

区块链预付卡APP的上线流程

北京木奇移动技术有限公司

区块链开发 软件外包公司 web3开发

要不要接着造电车,车企站在十字路口

脑洞汽车

汽车 新能源

行业热点丨SimLab解决方案如何高效应对3D IC多物理场与ECAD建模挑战?

Altair RapidMiner

芯片设计 仿真 CAE Simlab 多物理场仿真

中烟创新连续两年荣获“软件和信息服务业诚信企业”

中烟创新

机器人技术:AI之后的新增长极|小奇说

奇点云

自动驾驶 AI 机器人

见过“秒”级盘点吗?只需3~5秒,RFID盘点通道机让繁琐变得轻松高效!

斯科信息

RFID分拣 斯科信息 RFID技术

2025 AI主战场,连锁门店“变形记”

脑极体

AI

基于YOLOv8的桥梁八类缺陷、病害高精度检测项目|完整源码数据集+PyQt5界面+完整训练流程+开箱即用!

申公豹

yolov8

突破连接边界:EMQX 实现 MQTT 和 NATS 协议双向互通

EMQ映云科技

emqx nats

Solo:基于 zkHE 的身份验证协议,构建 Web3 可信匿名身份层

股市老人

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