写在前面:本文结合API使用的业界现状,系统性地阐述API的基本概念、发展历史、表现形式等基础内容,主要包含以下内容:
1.什么是API
2.API的发展历史
3.现代API常用消息格式
4.top N 互联网企业API 使用现状
当前的世界是一个信息互联和共享的时代,互联网发展到今天,API技术已经被各个企业广泛接受和使用,并呈现逐年增长的趋势,尤其是在当前国内云大物移和新基建的背景下,没有一家企业敢说抛弃API技术,去构建独立的企业信息化系统或企业服务能力。
进入新世纪以来,数字化技术的高速发展,为人们提供高效和便捷的信息来源。这些信息来源,在后端的服务支撑上离不开API接口提供能力。换句话说,API技术已经成为互联网信息基础能力的一部分,涉及我们现实生活的方方面面。当我们出行时,需要使用地图的API进行定位;当我们查询天气时,需要调用天气预报的API获取当前天气;当我们网上购物时,页面会调用推广的API显示推广或促销商品列表。正是API技术的广泛使用,才使得不同的企业、不同的产品在业务能力上相互融入,为用户提供了丰富的信息和良好的体验。
说了这么多,那么到底什么是API呢?下面我们就一起来探讨它的含义。
一、什么是API
关于API的含义,业界一直没有明确的界定。之所以这么说,不是因为API这个词所表达的意思不明确,而是因为随着互联网技术的发展,API这个专有名词所最初所表达的含义它的外延在不断扩大,所包含的内容也越来越多。我们先来看看维基百科上对API的描述:
In computer programming, an Application Programming Interface (API) is a set of subroutine definitions, protocols, and tools for building application software. In general terms, it is a set of clearly defined methods of communication between various software components.
在这段描述,我们了解到 API又称为应用程序编程接口,是Application Programming Interface的简称,它通过定义一组函数、协议、数据结构,来明确应用程序中各个组件之间的通信与数据交互方式,通过接口的形式,将Web应用、操作系统、数据库以及计算机硬件或软件的能力提供给外部使用。其表现形式大致分为如下三种:
1.1.类库型API
此种类型的API通常是一个类库,它的使用依赖于特定的编程语言,开发者通过接口调用,访问API的内置行为,从而处理所需要的信息。例如,应用程序调用微软基础类库MFC。
1.2.操作系统型API
此类的API通常是操作系统层对外部提供的接口,开发者通过接口调用,完成对操作系统行为的操作。例如,应用程序调用Windows API或linux标准库。
1.3.远程应用型API
开发者通过标准协议方式,将不同的技术结合在一起,不用关心所涉及的编程语言或平台,来操纵远程资源。例如,在Java通过JDBC连接来操作不同类型的数据库。
1.4.web应用型API
它通常使用http协议,在企业与企业之间、企业与不同的应用程序之间,通过web开发过程中架构设计的方法,以一组服务的形式,对外提供调用接口,以满足不同类型、不同服务的消费者的需求。例如,社交应用新浪微博的用户登录。
从上述介绍我们可以看出,API这个专有名词的含义,已经从当初单一的类库或操作系统应用程序接口扩展到如今的平台型web API接口,这是商业发展和业务驱动技术在不断改进的结果。API已经从单纯的应用程序接口所定义的用于构建和集成应用程序软件的一组定义和协议,变成了业务交互所在的双方之间的技术约定,业务双方的产品或服务与其他产品和服务进行通信,不必知道对方是如何实现的。就像我们在生活中需要使用电,只要按照要求接上电源就会有电流过来,而不必知道电流的产生原理自己来发电。这样做的好处是大大地简化应用程序开发难度,节约了时间成本和资金成本。
二、API的发展历史
从API的定义中我们看出,API的产生主要为了解决互联网技术发展过程中不同组件之间通信所遇到问题的,在不同的阶段出现不同的API形态,它的发展伴随着互联网技术的发展,尤其是web技术的发展,在不停地变化着。当我们追溯API的发展历史前,我们先来了解一下web技术的发展历史。
对于互联网的发展,业界通常有web 1.0到web 6.0的划分,但web技术本身的发展没有那么清晰的界线,其先后大体经历了四个阶段,分别如下:
•web技术1.0时代:群雄逐鹿、先入为王的时代,技术形式以html静态网页为主。
•web技术2.0时代:用户交互逐渐丰富,大量互联网应用产生,技术形式以动态网页为主。
•web技术3.0时代:出现行业垂直细分,业务形态从PC互联网到WAP端、移动端、专用终端迁移,催生了大量的交互技术,其中API技术得到了快速发展。
•web技术4.0时代:逐渐出现行业巨头通吃的局面,大数据、物联网开启万物互联的时代,平台型企业的崛起,容器、微服务、公有云等技术开创了API技术的新天地。
从web技术发展的4个阶段我们可以看出,API技术的快速发展是在web技术3.0时代开始的,那么从web技术3.0时代到今天,API技术到底发生了哪些改变呢?
在API出现的早期,API通常用于操作系统的库,其所在运行环境为系统本地的,这个阶段它的表现形式对应于上文提及的类库或操作系统型API。在系统本地环境使用这种现状,限制了API技术在很长一段时间内没有快速发展,直到动态网页技术的广泛使用才开始出现转机。
作为IT技术人员,我们都应该了解动态网页技术的基本原理,动态网页技术与静态网页技术最大的区别在于页面内容的动态性和可交互性。开发者使用CGI、ASP、PHP、JSP等技术,在浏览器界面,根据用户的要求和选择而发生动态改变和响应,这其中离不开网页端与数据库的通信交互,远程应用型API也就是在这样的背景下产生的。这个阶段API的、应用场景除了JDBC驱动的数据库调用外,还产生了大型应用程序的不同协议间的通信,比如Flex+Java应用之间的前后端通信;Spring 开发框架提供的多种远程调用模式:RMI、Hessian、Burlap、HttpInvoker、JAX RPC;以及EJB、Weblogic Tuxedo Connector(WTC)、CORBA、SOAP等。这些技术,在后来的发展中只有少数得以延续,大多数被新的API技术所取代,逐渐淹埋的历史的角落。其典型的应用场景如下:
1.EJB:EJB(Enterprise Java Bean)是JavaEE中面向服务的体系架构所提供的解决方案,开发者将业务功能封装在服务器端,以服务的形式对外发布,客户端在无需知道技术实现细节的情况下来完成远程方法的调用。
2.RMI: RMI是Remote Method Invocation的缩写,主要是针对于java语言的,通过代码实现网络远程调用另一个JVM的某个方法,其底层实现依赖于序列化和反序列化,容易出现严重的安全漏洞。
3.SOAP:在SOAP协议类型里,使用最多的是WebService服务,其通过WSDL文件描述,以服务接口的形式对外提供软件能力[1]。
进入2000年以后,整个社会的数字化环境发生了巨大的变革,面对在瞬息万变的市场环境,业务团队和IT团队为了满足快速变化的业务需求不得不互相协作,以保证企业的竞争力,EJB、WTC这类笨重的技术逐渐被抛弃,与微服务、容器化技术架构兼容性好且轻量级的RESTFul API技术开始占据上风,并逐步成为主流。关于这一点,我们也可以通过近十年的百度趋势指数侧面验证。
在API技术的发展历史中,我们把前两个阶段的API称为古典API,后两个阶段称为现代API,现代API是当前API技术的主要使用形式,它们使用不同的通信协议或消息格式,构成了精彩的API技术世界。
三、现代API常用消息格式
现代API的崛起要追溯到2000年,现在API的奠基人Roy Fielding博士在他的论文《架构风格以及基于网络的软件架构设计》(Architectural Styles and the Design of Network-based Software Architectures)中第一次提到REST概念,其目的是满足现代Web架构的设计与开发的需要;而之后,Leonard Richardson 提出「REST成熟度模型」,该模型把 REST 服务按照成熟度划分成 4 个层次【2】:
Level 0: Web 服务使用 HTTP 作为传输方式,实际上是远程方法调用(RPC)的雏形,SOAP 和 XML-RPC 都属于此类,其表现形式为一个URI,一个HTTP方法。
Level 1: Web 服务引入了资源的概念,每个资源有对应的标识符和表述。其表现形式为多个URI,一个HTTP方法。例如:
http://www.wordpress.com/theme?tpl=WDone2
http://www.wordpress.com/plugin/theme?tpl=WDone1
Level 2: Web 服务使用不同的 HTTP 方法来进行不同的操作,并且使用 HTTP 状态码来表示不同的结果。如 HTTP GET 方法来获取资源,HTTP DELETE 方法来删除资源,这是当前使用范围最为广泛的层次。其表现形式为多个URI,多个HTTP方法。例如:
GET http://www.wordpress.com/user?id=2 获取用户信息
DELETE http://www.wordpress.com/user?id=2 删除用户信息
POST http://www.wordpress.com/user 创建用户
Level 3:Web 服务使用 HATEOAS,在资源的表述中包含了链接信息,客户端可以根据链接来发现可以执行的动作。比较理想的层级,目前实际应用较少。
从「REST成熟度模型」中各个层次的含义来看,目前大多数应用基本都停留在Level1~Level2 的层次,所以在后续的内容中,我们重点讲围绕这两个层级去讨论API及其安全性。
在现行的API规范中,OpenAPI当之无愧的排在首位,官网地址为:https://swagger.io/specification/。从其其官方文档我们了解到:OpenAPI规范是在2015年由OpenAPI Initiative捐赠给Linux基金会的,其规范内容为RESTful API定义了一个与语言无关的标准接口,可通过有效映射与之关联的所有资源和操作来轻松开发和使用API,而无需访问源代码,文档或通过网络流量检查。使用者可以用最少的实现逻辑来理解远程服务并与之交互;文档生成工具可以使用OpenAPI定义来显示API;代码生成工具可以使用各种编程语言、测试工具和其他用例来生成服务器和客户端。
OpenAPI规范主要有两个版本:OAS2.0与OAS3.0 。其消息格式在HTTP协议的基础上,采用的MIME类型以json格式为主,通常有:
同时,在规范中我们也看到了,关于身份认证的安全性支持方案包括apiKey、http basic、oauth2、openIdConnect、JWT等。
四、TOP N 互联网企业API 使用现状
API技术的发展加速了API的广泛使用,而API的广泛使用又促进API技术的发展。在国外,继Facebook的开放平台获得成功之后,微软、google也推出了自己的开放平台战略。而国内在2010年前后,头部的互联网公司相继开放了自己的API平台,典型的有微博、百度、腾讯、盛大等。腾讯开放平台在《2015年互联网+白皮书》中[3],列举了其地图开放平台为开发者提供JS API、SDK 、WebService接口等多种API调用方式。
2019年12月10日,百度地图生态大会公开的报告[4]显示,其位置服务请求次数已突破1200亿次。
时至今日,如果你去搜索引擎搜一下OpenAPI开放平台,会出现很多企业都在使用API开放平台。
目前,API技术已经渗透到各行各业,随着物联网和5G技术的迅速发展,各种新业务能力的API在不断地涌现,API技术正迎来蓬勃向上的春天。在如此良好的前景下,当前的API应用有哪些安全问题呢?这将是我们在下一篇内容中讨论的重点内容。