API 设计的七大误区

对于现在的绝大多数人来说,网站和移动应用已经跟空气和食物一样成为生活的必需品。然而在网站和移动系统不断演化的过程中,前后端分离是系统架构演化的一个重要分水岭。

随着系统逻辑和展示层分离的过程中,API 是一个实现这种分布式应用架构的重要机制,从早期单纯的 WebService 到 RESTful,API 的设计方法、技术和理念发生了巨大的变化。然而 API 的设计实在是陷阱重重,一不小心就会落入其中,从而连累整个系统。

如果单纯地考虑功能的话,大部分服务端开发工程师都可以设计和实现出一个说得过去的 API,但一旦有多个互相关联的 API,或者当系统压力达到一定级别时,就会有不少问题出现,甚至导致系统崩溃。

我们可以来看看常见的误区在什么地方。

1、API 就是 RESTful API

观点:RESTful 是现在很流行的一种 API 设计风格,有大量的文章在推荐这种方法,因此我们就需要按照这种风格的要求来设计API,并且要实现全套的设计!

真相:完全不需要!

事实上 RESTful 只是一种设计思想,并不存在具体必须遵守的规则。在不同的应用系统中,API 承担了不同的各种职责和功能,针对不同的应用场景可以使用相应的规则,适用就好。尽管有一些类似于Richardson成熟度模型这样的理论,但也都不是必须做到的。虽然最高级别的成熟度是很有用的,但也要求整个系统以特定的方式运作,对于绝大部分的系统来说,低一些级别的成熟度一样工作良好,并且同时不需要花费太大的代价。

如果实现了比较完整的 RESTful API,那么会有一些好用的工具和代码可以利用,但如果自己实现,也未必会有很大的代价。

2、API,不过就是一段 Java 代码么

观点:API?不过就是一些 Java 代码暴露一个 HTTP 地址么,找个会做 Java 的人上就行。

真相:大部分情况下都不是这样的。

这种说法,和“只要人会说话,就能进行感人的演讲”一样可笑。

(图样图森破)


软件工具的使用只是一种简单的技能,但在工具背后的思想是需要经过经验的积累以及各种周边知识的共同理解才能做到。

API 的设计与其说是一种技能,不如说是一种艺术,交流的艺术。除了代码编写以外,更多的是架构上的设计。API 是整个服务端系统暴露到客户端的接口,是所有业务逻辑提供给外部的界面,如果对于系统的整体要求和架构不了解,很难设计一个合用的 API 系统。

3、和交互绑定的 API 设计

观点:API 是给客户端用的,在现在 App 大行其道的时候,移动端的同事说,我们需要简化网络交互,所以每个页面只需要一个 API ——什么?我要调用8个 API?不行,太慢了,只要一个,把所有的数据都放在一起给我吧,谢谢!

真相:这样的做法会导致 API 最终完全不可用。

没错,从性能的角度上看,确实这样是比较好的,但是,有没有想过,如果移动端页面设计改变了怎么办?一旦增加或者减少这个页面所需要的数据,那么这个API 立刻就变得没用了,重新设计一个?算了吧,API 升级的代价太高了,于是越来越多的重复 API 就出现了。

前后端分离的理念在于把业务逻辑和展示分离,API 作为业务逻辑的体现,以业务逻辑作为设计原则,比靠拢易变的展示层要准确和靠谱得多。从这个角度上说,引入一个中间层来适应展示的变化会更加适合。

4、我的 API 是我的,你的 API 是你的,不互通的 API 设计

观点:系统 A 提供了一组 API,系统 B,恩,另外一个系统,所以我们需要另外一组 API,但是,不好意思,我不知道 A 是怎么做的,并且我也不关心。

真相:这是一种系统分裂的征兆,是系统业务逻辑混乱的表现。

如果把应用程序接口比做用户接口的话,这样的说法就很奇怪了。作为一个公司下的不同系统,长得完全不一样,互相之间没有任何关联性,这样用户在使用的时候会很别扭。如果把系统当成一个人,这样的设计就和这个人有两张脸一样奇怪。作为系统的架构师,要为全公司设定一个一致的API规范,程序员们对接入各个系统可以有明确的预期,并且非常有助于在系统和客户端之间共享代码,简化开发和维护的成本。

5、API = 数据库

观点:API 设计?简单,数据库的操作映射一下好了。创建一个对象,修改一个对象,删除一个对象,赞!API 设计的生活是如此简单。

真相:等一下,作为API的使用者,客户端应用为什么需要知道数据库?难道不应该是业务驱动的吗?

很多 API 确实就是这样设计的,但如果只是单纯地按照数据库的结构进行设计,那么只能说是一个数据库的访问层而已,是SQL 语句的 HTTP 化…… 但 API应当反映的是业务内在逻辑,包括业务对象、流程和业务数据,在基于数据库的基础上,通过服务器端的业务层处理后才是 API 应当的结果。

6、我的自留地 API,API 不开放标准

观点:我没打算开放 API 给别人用,所以也不需要遵守什么标准。

真相:标准意味着通用,有更多的简化。

话是不错,但标准的好处在于设定交流双方的一个基础,作为服务器对外的交流接口,API 始终是设计得给人用的,不仅仅是公司内部,也有可能是外部;不仅仅是现在,也有可能是未来的人在使用。和代码规范一样,符合良好规范的 API 能够极大地改善可读性、维护性,即使不开放给外部,内部交流也会获益良多。

7、我不说,你就不知道,API 的安全性

观点这个 API 又没有公开,所以不需要加密的。

真相:在这个互联网上是没有秘密的,所以你不让人知道,不代表别人不会知道。

关于安全,这个是 API 设计中非常重要的一个需求,但很多 API 的设计师并不重视这个。最常见的借口就是这个,我不告诉别人,谁也不知道。但事实上,API 作为交流的工具,即使服务端不容易被窥视,但大量的客户端几乎是不设防的。破解一个客户端系统并不是一个多么困难的事情,因此了解这个 API 的调用也不是太复杂的事情。

此外,在网络上的传输也是不安全的,中间人截获信息的案例导致无数的系统被攻破。按照业界的推荐方法来设计 API 的安全传输功能,尽管开发的代价会略大一些,但远比自己自以为完美的设计安全得多。

写在最后

随着越来越多的人在使用互联网,用户界面(UX)设计的影响也越来越大,所有人都开始注重用户界面设计的好坏,然而 API 是业务逻辑的用户界面,是针对程序员的界面,避免这些误区陷阱可以让这些界面更加友好,在业务逻辑和展示层都能运作得更好。

本文作者:徐翎 Andrew(点融黑帮),任职点融网客户端开发总监,组建了移动和网站的开发团队,开发了点融网各款客户端软件。曾就职于微软等公司,参与过包括Hotmail 和Windows 在内的大型跨国际软件开发项目的研发。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,033评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,725评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,473评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,846评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,848评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,691评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,053评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,700评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,856评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,676评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,787评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,430评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,034评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,990评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,218评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,174评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,526评论 2 343

推荐阅读更多精彩内容