API做为每个重要信息技术趋势的核心内容。移动设计、云计算、物联网、大数据及社交网络等应用都依赖于一个基于web的界面与它们的分布式组件进行连接,为全球范围内的各个商业领域提供具有创新性和颠覆性的解决方法。而API的使用既是催化剂,也是促成成果的主要力量。
什么是API?
应用程序接口(英文:Application Programming Interface,缩写API),就是接口,也是通道,负责一个程序和其他软件的沟通,本质是预先定义的函数。
举个简单的栗子,假设物流中“货物”是数据,存放货物的“总仓库”是数据库,“店铺”是我们的网站、App。页面上显示的内容、数字,以及用户的操作请求和结果都是需要不停搬运的“货物”数据,则负责调配分配打包的中转站就是API,店铺小哥直接从中转站取货就好。
对于软件提供商来说,开放API,让别的应用程序来调用,形成生态,软件才能发挥最大的价值,才能更有生命力。
对于应用开发者来说,有了开放的API,就可以直接调用多家公司做好的功能来做自己的应用,不需要所有的事情都自己操刀,节省精力。
API就是技术服务商为客户提供服务的方法。
冬天不穿秋裤,你妈一定以为你疯了。但是作为一名程序员,如果没跟API打过交道同样是件不可思议的事情。
当然我们在互联网时代所说的狭义的API概念可能与桌面软件时代广义的API有所不同。在维基百科中是这么定义的:API就是软件系统不同组成部分衔接的约定。由于近年来软件的规模日益庞大,常常需要把复杂的系统划分成小的组成部分,编程接口的设计十分重要。程序设计的实践中,编程接口的设计首先要使软件系统的职责得到合理划分。良好的接口设计可以降低系统各部分的相互依赖,提高组成单元的内聚性,降低组成单元间的耦合程度,从而提高系统的维护性和扩展性。
API的哲学意义
生活中,每天的穿衣、吃饭、如厕、睡觉是最基本的诉求。但人类文明发展至今,我们穿的衣服、出行搭载的交通工具、吃饭的粮食、住的房子等等一切几乎很少是我们直接参与生产的,在经济学中我们称之为社会分工。分工最大的好处,就是熟能生巧,让专业的人做专业的事,而需要这些资源的人,可以拿自己生产的物资间接(货币)或直接的交换。
追溯到社会的发展,从最简单的采集狩猎时代,逐渐演变成现在这样错综复杂的结构,在未来它会继续的演化产生更细致的分工。在这个漫长演化过程中,人类的社会文明中逐渐产生了语言、文字、货币、契约等这些维系社会结构的基本要素;类比信息时代,这些要素就是不同的社会分工群体之间互相调用的“API”规范。
原子、电子之间的相互作用也好,人类社会的交易合作也好,IT系统之间通讯的API也好,其哲学意义的本质都是一种契约(规则),这个所有成员共同维护的契约让难以解决的复杂问题变得简单。
API的分类
早期计算机网络应用程序有C/S和B/S两种架构模式,这两种架构模式各有优缺点。随着Web技术越来越成熟,各种技术规范也层出不穷,后来在大型互联网公司中流行起来的开放平台促成了第三种架构:OpenAPI。
应用程序API
这里主要指的是非Web应用程序,它为第三方开发者提供了可控访问软件内部功能的接口。例如:Windows API(https://msdn.microsoft.com/zh-cn/library/windows/desktop/ff818516(v=vs.85).aspx)和Android(https://developer.android.com/guide/index.html),他们通过暴露操作系统核心API,使应用程序在获得授权的情况下使用受系统保护的计算机硬件资源(IO设备、GPS等);浏览器同样为JavaScript准备了API(https://developer.mozilla.org/zh-CN/docs/Web/API),从而使HTML、CSS、JavaScript经过渲染显示出各种程序设定的文字、图像及声音等。
应用程序API通常适用于当前设备内的应用程序交互。
基于Web的私有API和OpenAPI
和应用程序API比起来,RESTful API、OpenAPI更被Web程序员所熟知。它们是更高级的API(资源和业务属性更强)。根本上它是脱离操作系统的限制,从Web资源的角度定义了API交互的规则。
Web服务端通过RESTful API向客户端提供数据资源的访问通道,PC浏览器、iOS、安卓等平台中运行的终端APP能够按照既定的规则使用服务器中的数据,使分布在各处的用户可以借助不同的设备连接到服务中心,服务商以此提供娱乐、购物、聊天、内容咨询等。
在私有API中,还有一种微服务API,它与微服务架构风格息息相关。但微服务API一般无法在公网使用的,它使几个相对简单的子系统有机结合,形成一个整体并对外提供一个足够复杂的服务。OpenAPI是对外部IT系统提供的一种资源调用方案,一般都有严格的鉴权规则,来确保资源被安全的使用。
用一张表格比较不同API的特点:
API种类 |
跨设备 |
协议 |
长连接 |
性质 |
|
应用程序API |
否 |
API约定 |
/ |
私有 |
|
RESTful API |
是 |
HTTP(S) |
否 |
私有 |
|
Websocks API |
是 |
Websocket |
是 |
私有 |
|
RPC API |
是 |
HTTP(S) |
否 |
私有 |
|
微服务API |
是 |
HTTP(S) |
否 |
私有 |
|
OpenAPI |
是 |
HTTP(S) |
否 |
公开 |
OpenAPI会成为IT系统的标准功能
现在,你可以打开百度,搜索关键词“开放平台”。浏览检索到的结果,你会发现几乎所有耳熟能详的互联网公司都有自己的开放平台生态,他们通过OpenAPI让开发者可以方便的使用他们的服务,并以此扩大自己的影响力。
一个既成事实是:没有API,所有的IT系统都会成为数据孤岛;一个IT系统的OpenAPI被其它IT系统调用的规模,是这个IT系统价值的关键指标。我认为,IT系统之间的API经历了3个阶段:
阶段 |
对接内容 |
案例及说明 |
第一阶段 |
数据能力 |
数据同步与传输,如淘宝聚石塔 |
第二阶段 |
技术能力 |
技术能力服务化,如计算能力、复杂算法、人工智能 |
第三阶段 |
业务能力 |
业务服务化,如阿里云 |
以懒猪行的模式和经验为例:懒猪作为旅业S2B平台Top1,掌握丰富的境外目的地落地资源,为了把这些资源的价值最大化,我们充分借助各大OTA平台的OpenAPI向分销商家赋能,让懒猪的S端资源与国内的旅业生态无缝接合。同时,在未来懒猪会借助OpenAPI系统,让下单、订单处理等过程变得可以程序化,使与合作伙伴业务能力的全面对接成为可能。这对业务团队的人效提升是相当可观的,在IT时代我们应当这么做,像马克思说的:科技是第一生产力。
阿里云已将其业务能力完全API化,并提供多语言SDK。它凭借一套OpenAPI,让开发者可以通过内部编程的方式灵活的部署配置公有云产品,而且OpenAPI使得调用云端资源变得比使用自己本地的资源还方便,IT系统之间的合作不就应该是这样子嘛。建议访问https://api.aliyun.com感受一下。
最后,以“Gall’s Law”结尾
A complex system that works is invariably found to have evolved from from a simple system that worked.
A complex system designed from scratch never works and cannot be made to work.You have to start over,beginning with a working simple system.
***"A simple system may or may not work.”
互联网时代的上半场还没有结束,API会让“互联”二字演绎的更加透彻,让承载人类文明的全球信息系统更加紧密相连。
扩展阅读
[1] 理解面向HTTP API的REST和RPC (http://www.oschina.net/translate/understanding-rest-and-rpc-for-http-apis)
[2] OpenAPI规范 (https://github.com/OAI/OpenAPI-Specification)
[3] API文档规范Swagger UI (https://swagger.io/docs/specification/about/)