写点什么

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

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

关注

评论

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

从西贝预制菜事件看企业公关失误与舆情监测的重要性

沃观Wovision

沃观Wovision 舆情监测系统 海外舆情监测 西贝

【云栖大会】AI原生、AI可观测、AI Serverless、AI中间件,4场论坛20+议题公布!

阿里巴巴云原生

阿里云 云原生 云栖大会

【云栖大会】AI原生、AI可观测、AI Serverless、AI中间件,4场论坛20+议题公布!

阿里云云效

云栖大会

HarmonyOS 5.0应用开发——V2装饰器@once的使用

高心星

鸿蒙 装饰器 HarmonyOS5.0 V2装饰器

对话质变科技CEO离哲:大模型决定上半场,数据和工程能力决定下半场

AI数据云Relyt

AI 数据分析 大模型 AI Agent Agentic AI

LED灯具行业MES选型与实施全攻略

万界星空科技

mes LED数码管 万界星空科技mes 灯具照明行业 灯具照明MES

从 “数据洞察” 到 “可持续行动”:MyEMS 开源能源管理系统的核心价值与实践意义

开源能源管理系统

开源 开源能源管理系统

MySQL单表为何别超2000万行?揭秘B+树与16KB页的生死博弈|得物技术

得物技术

MySQL 数据库 关系型数据库 MySQL 数据库

这些CAD看图纸小技巧你一定要了解!

在路上

cad cad看图

如何快速看懂「祖传项目」?Qoder 强势推出新利器

阿里巴巴云原生

阿里云 AI 云原生 Qoder

快速搞定Dify+Chrome MCP:打造能操作网页的AI助手

测试人

PHP 轻松处理千万行数据 内存不爆,服务器不卡

秃头小帅oi

MyEMS:赋能每一个组织,成为自己的能源管理专家

开源能源管理系统

开源 开源能源管理系统

基于开源IM即时通讯框架MobileIMSDK:RainbowChat-iOS端v10.0版已发布

JackJiang

网络编程 即时通讯 IM MobileIMSDK RainbowChat

如何快速实现CAD数字/字母递增标注?

在路上

cad cad看图 CAD看图王

北京航空航天大学 鲲鹏昇腾科教创新孵化中心揭牌,推动中国自主计算生态建设

极客天地

电信SD-WAN 在跨境线路方面的优势

宽炜网络

RPA哪家强?权威榜单揭晓!

Techinsight

MyEMS:开源能源管理的探索与实践

开源能源管理系统

开源 开源能源管理系统

函数计算进化之路:AI Sandbox 新基座

阿里巴巴云原生

阿里云 Serverless 云原生

PWA vs 小程序:技术对比及出海应用策略探讨

xuyinyin

物流助手系统说明

微擎应用市场

微活码系统介绍

微擎应用市场

AI教育白皮书解读 | 新工科背景下“人工智能+教育”模式探索与实践

ModelWhale

AI教育 人工智能+ 工科

洞察先机,规避风险:海外社交媒体监控是现代舆情监测的必选项

沃观Wovision

社交媒体 海外社媒营销 沃观Wovision 舆情监测系统 海外舆情监测

Bloomberg 正式加入 Karmada 用户组!

华为云原生团队

云计算 容器 云原生 Karmada

儿童无屏幕对讲机 Bunny 融资百万美元;腾讯会议推出 AI 托管:先行听会、代听多会、全程记录丨日报

RTE开发者社区

无需复杂正则:SLS 新脱敏函数让隐私保护更简单高效

阿里巴巴云原生

阿里云 AI 云原生 日志服务 sls

智能搜索是什么,如何使用?产品设计提效技巧分享

职场工具箱

人工智能 AI 产品设计 AIGC ui设计

解锁抖音商品详情API:从技术数据采集到商业变现的完整路径

tbapi

抖音商品数据采集 抖音API 抖音商品详情接口 抖音数据接口

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