API安全技术与实战
上QQ阅读APP看书,第一时间看更新

1.2 API的发展历史

从API的定义中可以看出,API的产生主要是为了解决互联网技术发展过程中不同组件之间通信所遇到问题,在不同的阶段出现不同的API形态,它的发展伴随着互联网技术的发展,尤其是Web技术的发展,在不停地变化着。追溯API的发展历史前,先来了解一下Web技术的发展历史。

1.2.1 Web技术发展的4个阶段

互联网的发展,业界通常划分为Web 1.0~Web 6.0。这里,主要依据其技术形式的不同,将互联网的发展划分为4个阶段,如图1-5所示。

●图1-5 Web技术发展的4个阶段

■ Web 1.0:群雄逐鹿、先入为王的时代,技术形式以HTML静态网页为主

■ Web 2.0:用户交互逐渐丰富,大量互联网应用产生,技术形式以动态网页为主

■ Web 3.0:出现行业垂直细分,业务形态从PC互联网端向WAP端、移动端、专用终端迁移,此阶段催生了大量的交互技术,其中API技术得到了快速发展

■ Web 4.0:逐渐出现行业巨头通吃的局面,大数据、物联网开启万物互联的时代,平台型企业的崛起,云计算、容器化、微服务等技术开创了API技术的新天地

Web技术发展的43个阶段可以看出,API技术的快速发展是在Web 3.0时代开始的,那么从Web 3.0时代到今天,API技术到底发生了哪些改变?

API技术早期通常用于操作系统的库,其所在运行环境为系统本地,此阶段它的表现形式对应于上文提及的类库或操作系统型API。仅在操作系统本地环境中使用制约了API技术在很长一段时间内的发展,直到动态网页技术的广泛使用才开始出现转机。

作为IT技术人员,大多数人应该了解动态网页技术的基本原理,动态网页技术与静态网页技术最大的区别在于页面内容的动态性和可交互性。开发者使用CGI、ASP、PHP、JSP等技术完成服务器端的实现,在浏览器界面,根据用户的要求和选择而发生动态改变和响应,这其中离不开网页端与数据库的通信交互,远程应用型API也就是在这样的背景下产生的。这个阶段的API、应用场景除了JDBC驱动的数据库调用外,还产生了大型应用程序不同协议间的通信。比如Flex+Java应用之间的前后端通信,Spring开发框架提供的远程调用模式RMI、HttpInvoker、JAX RPC等,还有一些标准协议型的技术如EJB、WTC(Weblogic Tuxedo Connector)、SOAP等。这些技术,在后来的发展中只有少数得以延续,大多数被新的API技术所取代,逐渐淹埋在历史的角落。

在这个阶段API技术广泛应用,除了类库型、操作系统型、远程应用型继续在使用外,Web应用型API典型的技术应用场景有以下几种。

1.EJB应用

EJB是Enterprise Java Beans的缩写,又称企业Java Beans,是JavaEE中面向服务的体系架构所提供的解决方案。通过EJB技术,开发者将业务功能封装在服务器端,以服务的形式对外发布,客户端在无须知道技术实现细节的情况下来完成远程方法的调用,如图13-6所示。

●图1-6 EJB应用

2.RMI应用

RMI是Remote Method Invocation的缩写,俗称远程方法调用。这里主要是指于Java语言应用中通过代码实现网络远程调用另一个JVM的某个方法,其底层实现依赖于序列化和反序列化,容易出现严重的安全漏洞。其API调用形式如图1-7所示。

●图1-7 RMI应用

3.SOAP应用

SOAP是Simple Object Access Protocol的首字母缩写,即简单对象访问协议。在使用SOAP协议的应用类型中,主要是Web Service服务,其通过Web服务描述语言(Web Services Description Language,WSDL)文件描述,以服务接口的形式对外提供软件能力,如图1-8所示。

●图1-8 SOAP应用

2000年以后,整个社会的数字化环境发生了巨大的变革,面对瞬息万变的市场环境,业务团队和IT团队为了满足快速变化的业务需求不得不互相协作,以保证企业的竞争力,EJB、WTC这类笨重的技术逐渐被抛弃,与微服务、容器化技术架构兼容性好且轻量级的RESTful API技术开始占据上风,并逐步成为主流。关于这一点,可以通过近十年的百度趋势指数侧面验证,如图1-9所示。

●图1-9 百度趋势指数

在API技术的发展历史中,业界习惯把前两个阶段的API称为古典API,后两个阶段的API称为现代API,现代API是当前API技术的主要使用形式,它们使用不同的通信协议或消息格式构成了精彩的API技术世界。

1.2.2 现代API的类型划分

从上节的介绍内容可以看出,现代API以Web应用型API为主,基于现代API的服务对象不同、技术形式不同、使用者不同,可以对现代API做不同类型的划分。

1.基于服务对象的类型划分

每一个API所提供的服务能力,最终都是被企业内外部调用才能实现API的价值。根据API所承载业务功能的服务范围不同,现代API可以划分为公有型API、私有型API和混合型API。

■ 公有型API:此类API主要面向企业外部客户或企业第三方合作伙伴,向外部提供企业的API服务能力,以业务承载为主。

■ 私有型API:此类API主要面向企业内部,不面向外部提供服务能力,具有一定的私密性,以运营管理、内部服务支撑为主。

■ 混合型API:此类API的服务对象没有明显的限制,兼有企业外部客户和企业内部应用之间的调用。

对现代API按照服务对象进行不同类型的划分,有利于明确服务对象和使用范围,为API自身安全性保障要求提供不同级别的防护目标

2.基于技术形式的类型划分

每一个API都有着不同的技术实现,使用不同的开发语言,或使用不同的协议标准,基于这些技术形式和技术的普及程度,将现代API划分为RESTful API、GraphQL API、SOAP API、gRPC API、类XML-RPC及其他类型API。

■ RESTful API:此类API在技术形式上,以REST风格为主,是当前业界主流的API技术形式。

■ GraphQL API:此类API采用Facebook提出的GraphQL查询语言来构建API服务,尤其适用于树状、图状结构数据的使用场景。

■ SOAP API:即使用SOAP协议作为API接口交互方式的API应用,以Web Service为代表。

■ gRPC API:此类API采用Google的gRPC框架,通过Protobuf协议来定义接口和条件约束,完成客户端和服务器端的远程调用。

■ 类XML-RPC及其他类型API:此类API包含多种技术,因使用的普及率低故将其归类在一起,通常包含XML-RPC的API、JMS(Java Message Service)接口、WebSocket API以及IoT通信协议的接口等。

基于技术形式的API类型划分带有鲜明的技术特点,它有助于使用者了解其技术构成和该技术的交互细节,了解该技术形式所带来的特有的安全特性和安全风险,做出准确的判断和合理的处置

3.基于使用者的类型划分

不同的API提供不同的业务功能供不同的用户使用,这些使用者可能是具体的自然人用户,也可能是前端应用程序,还有可能是终端设备,基于API使用者的不同,现代API可以划分为用户参与型API、程序调用型API和IoT设备型API。

■ 用户参与型API:此类API在业务交互过程中,需要自然人用户参与,比如用户单击操作、与用户身份相关的会话保持、与用户身份相关的访问控制等。大多数互联网应用中使用的API为此种类型。

■ 程序调用型API:API调用中,存在某些场景下无自然人用户参与的情况,仅仅是后端服务或前端应用程序之间的通信处理。这些场景下的API属于此类型的API。

■ IoT设备型API:除了上述两类API之外,还有一些API仅仅提供给IoT设备调用,在交互流程上比上述两类要简单,或设备内无法完成流程,需要离线操作。

基于API的使用者对现代API做类型划分,有助于API设计者和研发人员梳理交互流程,识别不同场景下适用的安全机制,制定不同的安全控制策略来提高API服务的安全性。