大厂Data+Agent 秘籍:腾讯/阿里/字节解析如何提升数据分析智能。 了解详情
写点什么

REST API 用得也痛苦

  • 2011-11-26
  • 本文字数:1175 字

    阅读完需:约 4 分钟

日前,Subbu Allamaraju 在博文中谈到当前REST API 使用过程中的一些问题,并提出了一些改进办法。

Allamaraju 认为,人们在使用 REST API 时面临的几个主要问题是:

接口不匹配:因为 API 是由其提供者创建的,所以往往体现创建者的视角——几乎所有 API 的最大共同特征都是最大化其使用和重用。这一特点往往导致 API 的粒度过细,这样每个消费者就可以调用 API 集合的任何子集,并且可按照任何次序进行调用。

在此过程中, [提供者] 必定要牺牲消费者的某些特殊需求,而且尽量坚持于那些通性征。这就导致了消费者需求和 API 供应之间的不匹配。

编写客户端代码比较慢,繁琐而且经常重复:使用细粒度 API 产生多次调用,然后将所有返回结果聚合起来。

如果没有一个处理这些 API 的 SDK,你需要花很长时间去处理 2*n 次调用以及其响应(译注:Allamaraju 在博文中举了一个示例,该示例的客户需求是查询一组产品的 ID、详细信息以及相应的用户评价,在该场景中首先需要先做一次查询,得到 n 个产品 ID,然后对每个 ID 做两次调用,分别是查询详细信息和查询用户评价,如总共的调用次数为 2*n)。

除此之外,每次 API 调用时客户端程序还需要构建请求和解析响应。

等待 API 提供者的功能增强往往耽误时间:因为 API 提供者要支撑许多消费者,并且按照自己的工作计划行事,该计划往往与消费者的计划不同,特殊的消费者需求很难与提供者的计划同步。此外,因为提供者通常要衡量 API 的重用,所以很难为某个特定的消费者单独提供一个 API……

API 调用常常很繁琐:繁琐的客户端指的是为了完成一次功能需要发出多次 HTTP 请求,从而导致严重的性能下降及网络超载。不论从性能还是从网络利用率的角度看,直观的感觉是使用粗粒度的 API 会更好。

RESTful API 的一致性没有我们相像的那么重要:理想情况下,保持 API 实现之间的一致性固然很好,但是 Allamaraju 认为,REST API 的最重要的特性是互操作性:

我宁可把时间花在互操作性上,而不是一致性上。

Allamaraju 在博文结尾如此总结:

客户端的主要挑战是对发起请求(fork)和合并响应(join)的聚合、并行处理和编排。

那么,如何解决这一问题呢?Allamaraju 提到:

……在 eBay,我的团队正在建设一个新平台,通过它可简化上述案例: - 减小调用 API 的客户端代码规模

  • 根据需要自动编排 API 调用
  • 通过包装现有的以提供者为中心的 API,创建新的面向消费者的 API
  • 降低带宽使用率及延迟

Allamaraju 不是唯一提到此类平台的人,早在今年旧金山举行的 QCon 上,来自 NetFlix 的 Daniel Jacobson 就介绍过一个正在实现中的相似解决方案。

Allamaraju 和 Jacobson 提出的解决方案极有意义,但又不禁让人想问:它和 ESB 有何区别?而 ESB 却好像被指为致使 SOA 失败的主要原因之一?难道问题不在于 ESB 而在于没有用好它?或者它一直是很好的模式,而现在又得到第二次机会?


查看英文原文: APIs Can Be a Pain

2011-11-26 07:397708
用户头像

发布了 184 篇内容, 共 85.9 次阅读, 收获喜欢 8 次。

关注

评论

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

婚恋服务公众号平台(源码+文档+讲解+演示)

深圳亥时科技

世界最炙手可热的语音 AI 公司,举办了一场全球黑客松,冠军作品你可能已经看过

声网

08 HarmonyOS NEXT 仿uv-ui Tag组件开发教程系列(二)

全栈若城

HarmonyOS NEXT

Aiarty Image Matting for Mac:智能抠图,设计更高效

小玖_苹果Mac软件

一文了解MySQL索引机制

京东科技开发者

【每日学点HarmonyOS Next知识】网页Scheme拉起应用、列表刷新、Web下载文件、根据子元素

轻口味

HarmonyOS HarmonyOS NEXT

故障测试——系统之盾

FunTester

C语言操作MySQL从入门到精通

威哥爱编程

C语言 #Mysql

Capture One 23 Pro for Mac:专业摄影后期,释放影像潜力

小玖_苹果Mac软件

京东百万级调度系统(Buffalo)架构解密

京东科技开发者

07 HarmonyOS NEXT 仿uv-ui Tag组件开发教程系列(一)

全栈若城

HarmonyOS NEXT

14款项目管理软件盘点:Jira、Worktile、MS Project等优劣分析

易成研发中心

项目管理系统 项目软件管理 项目管理‘

【每日学点HarmonyOS Next知识】getContext问题、清除Web缓存、弹层的点击事件透传、去除间隙、侧滑菜单设置

轻口味

HarmonyOS HarmonyOS NEXT

装备管理系统(源码+文档+讲解+演示)

深圳亥时科技

OHara Gateway SPI动态加载机制图解

路 飞

《Operating System Concepts》阅读笔记:p200-p202

codists

操作系统

漫话昇腾之《一体机请就位》

脑极体

AI

行业热点丨DeepSeek: AI能替代工程师吗?

Altair RapidMiner

AI 仿真 altair RapidMiner DeepSeek

【每日学点HarmonyOS Next知识】截图组件截取列表、Toggle组件、Web组件请求头、列表选择弹窗、游戏加速

轻口味

HarmonyOS HarmonyOS NEXT

OmniReader Pro for Mac:让阅读与知识管理更简单

小玖_苹果Mac软件

免费CRM软件推荐:全球16款企业必备工具

易成研发中心

客户关系管理 CRM系统 客户关系管理软件

2025年16款企业电子合同签署系统对比与评测

易成研发中心

电子合同 电子合同软件 电子合同工具

【每日学点HarmonyOS Next知识】手写电子签名、瀑布流布局获取字符串高度、WaterFlow崩溃、Web滑动问题

轻口味

HarmonyOS HarmonyOS NEXT

【每日学点HarmonyOS Next知识】web网络拦截、对话框、网页重定向、数据作用域、多线程

轻口味

HarmonyOS HarmonyOS NEXT

【每日学点HarmonyOS Next知识】网页获取高度、行为菜单底部布局、动画问题、Web跨域加载图片、不随系统深色变化

轻口味

HarmonyOS HarmonyOS NEXT

微前端父子应用及兄弟应用间组件或方法共享方案

京东科技开发者

09 HarmonyOS NEXT 仿uv-ui Tag组件开发教程系列(三)

全栈若城

HarmonyOS NEXT

INFINI Labs 产品更新 | Coco AI 开启智能知识管理新篇章

极限实验室

console Gateway easysearch CocoAI

漫话昇腾之《一体机请就位》

白洞计划

AI

REST API用得也痛苦_REST_Boris Lublinsky_InfoQ精选文章