API安全之《大话:API的前世今生》

写在前面:本文结合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应用有哪些安全问题呢?这将是我们在下一篇内容中讨论的重点内容。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/124788.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

九州未来入选“2023边缘计算产业图谱”三大细分领域

10月26日,边缘计算社区正式发布《2023边缘计算产业图谱》,九州未来凭借深厚的技术积累、优秀的产品服务、完善的产品解决方案体系以及开源贡献,实力入选图谱——边缘计算平台、边缘计算开源、边缘云服务提供商三大细分领域,充分彰…

uniapp保存网络图片

先执行下载uni.downloadFile接口,再执行保存图片uni.saveImageToPhotosAlbum接口。 // 保存二维码 saveQrcode() {var _this this;uni.downloadFile({url: _this.qrcodeUrl, //二维码网络图片的地址success(res) {console.log(res);uni.saveImageToPhotosAlbum({fi…

python中使用websocket调用、获取、保存大模型API

笔者最近在测试星火大模型的时候,他们是使用websocket 来建立对话,而且星火大模型开放的测试代码,质量上不咋地(20231030记录),还需要对websocket有一定的了解,才适合自己微调。 安装&#xff…

explain查询sql执行计划返回的字段的详细说明

当使用EXPLAIN命令查看SQL语句的执行计划时,会返回一张表格,其中包含了该SQL语句的执行计划。下面是每个字段的详细分析: id:执行计划的唯一标识符。如果查询中有子查询,每个子查询都会有一个唯一的ID。在执行计划中&a…

JavaScript的分支结构,循环结构,以及函数的定义使用,数组

JS分支结构 if语句 同java if if…else if…else…if //案例&#xff1a;判断输入密码长度 let pwd prompt("请输入密码");let L pwd.length;if(L<6){alert("密码小于六位");}else if(L>6 && L<16){alert("密码大于6位小于1…

聊聊统一认证中的四种安全认证协议(干货分享)

大家好&#xff0c;我是陈哈哈。单点登录SSO的出现是为了解决众多企业面临的痛点&#xff0c;场景即用户需要登录N个程序或系统&#xff0c;每个程序与系统都有不同的用户名和密码。在企业发展初期&#xff0c;可能仅仅有几个程序时&#xff0c;管理账户和密码不是一件难事。但…

一文彻底理解python浅拷贝和深拷贝

目录 一、必备知识二、基本概念三、列表&#xff0c;元组&#xff0c;集合&#xff0c;字符串&#xff0c;字典浅拷贝3.1 列表3.2 元组3.3 集合3.4 字符串3.5 字典3.6 特别注意可视化展示浅拷贝总结 四、列表&#xff0c;元组&#xff0c;集合&#xff0c;字符串&#xff0c;字…

Python爬虫实战(六)——使用代理IP批量下载高清小姐姐图片(附上完整源码)

文章目录 一、爬取目标二、实现效果三、准备工作四、代理IP4.1 代理IP是什么&#xff1f;4.2 代理IP的好处&#xff1f;4.3 获取代理IP4.4 Python获取代理IP 五、代理实战5.1 导入模块5.2 设置翻页5.3 获取图片链接5.4 下载图片5.5 调用主函数5.6 完整源码5.7 免费代理不够用怎…

【UE 模型描边】UE5中给模型描边 数字孪生 智慧城市领域 提供资源下载

目录 0 引言1 Soft Outlines1.1 虚幻商城1.2 使用步骤 2 Auto Mesh Outlines2.1 虚幻商城2.2 使用步骤 3 Survivor Vision3.1 虚幻商城3.2 使用步骤 结尾 &#x1f64b;‍♂️ 作者&#xff1a;海码007&#x1f4dc; 专栏&#xff1a;UE虚幻引擎专栏&#x1f4a5; 标题&#xf…

多线程---JUC

文章目录 什么是JUC&#xff1f;Callable接口ReentrantLockReentrantLock VS synchronized 原子类线程池信号量SemaphoreCountDownLatch 什么是JUC&#xff1f; JUC是&#xff1a;java.util.concurrent这个包名的缩写。它里面包含了与并发相关&#xff0c;即与多线程相关的很多…

【NeurIPS 2023】多模态联合视频生成大模型CoDi

Diffusion Models视频生成-博客汇总 前言:目前视频生成的大部分工作都是只能生成无声音的视频,距离真正可用的视频还有不小的差距。CoDi提出了一种并行多模态生成的大模型,可以同时生成带有音频的视频,距离真正的视频生成更近了一步。相信在不远的将来,可以AI生成的模型可…

C++ 指针

*放在哪里&#xff1f; 如果声明一个变量&#xff1a;int* b; 如果声明多个变量&#xff1a;int a,*b,*c; nullptr c11中NULL的变形&#xff0c;是一个特殊值&#xff0c;可以赋给任意类型的指针&#xff0c;代表该指针指向为空。 this指针 this指针不是一个const Test*(…

关于ABB 机器人多任务的建立

关于ABB 机器人多任务的建立.需要实时监控某一区域&#xff0c;或者某一信号&#xff0c;或者计件到达某一数量机器人自动停止报警&#xff0c;显示到示教器上&#xff0c;多任务可以实现&#xff0c;类似发那科机器人后台逻辑指令 当软件选项漏选或者少选可以选择修改选项&…

新恶意软件使用 MSIX 软件包来感染 Windows

人们发现&#xff0c;一种新的网络攻击活动正在使用 MSIX&#xff08;一种 Windows 应用程序打包格式&#xff09;来感染 Windows PC&#xff0c;并通过将隐秘的恶意软件加载程序放入受害者的 PC 中来逃避检测。 Elastic Security Labs 的研究人员发现&#xff0c;开发人员通常…

pycharm使用ssh连接远程jupyter

1. 安装jupyter pip install jupyter2. 生成jupyter_notebook_config.py文件 jupyter notebook --generate-config3. 设置命令参数 jupyter notebook --no-browser --allow-root --port 8900配置Jupyter服务器 将上面的代码复制到命令行实参中&#xff1a;

【3D 图像分割】基于 Pytorch 的 VNet 3D 图像分割7(数据预处理)

在上一节&#xff1a;【3D 图像分割】基于 Pytorch 的 VNet 3D 图像分割6&#xff08;数据预处理&#xff09; 中&#xff0c;我们已经得到了与mhd图像同seriesUID名称的mask nrrd数据文件了&#xff0c;可以说是一一对应了。 并且&#xff0c;mask的文件&#xff0c;还根据结…

Qt使用QWebEngineView一些记录

1.关闭软件警告&#xff1a; Release of profile requested but WebEnginePage still not deleted. Expect troubles! 原因&#xff0c;系统退出关闭view&#xff0c;没有释放page。 解决办法&#xff1a;手动释放page 顺便把view也释放了。 Widget::~Widget() {updateIni…

设计模式_状态模式

状态模式 介绍 设计模式定义案例问题堆积在哪里解决办法状态模式一个对象 状态可以发生改变 不同的状态又有不同的行为逻辑游戏角色 加载不同的技能 每个技能有不同的&#xff1a;攻击逻辑 攻击范围 动作等等1 状态很多 2 每个状态有自己的属性和逻辑每种状态单独写一个类 角色…

力扣第509题 斐波那契数 新手动态规划(推荐参考) c++

题目 509. 斐波那契数 简单 相关标签 递归 记忆化搜索 数学 动态规划 斐波那契数 &#xff08;通常用 F(n) 表示&#xff09;形成的序列称为 斐波那契数列 。该数列由 0 和 1 开始&#xff0c;后面的每一项数字都是前面两项数字的和。也就是&#xff1a; F(0) 0&a…

git本地搭建服务器[Vmware虚拟机访问window的git服务器]

先按照https://zhuanlan.zhihu.com/p/494988089说明下载好Gitblit然后复制到tomcat的webapps目录下,如下: 双击"startup.bat"启动tomcat: 然后访问"http://127.0.0.1:8080/gitblit/"即可看到git的界面: 说明git服务器已经能够成功运行了! Vmware虚拟机…