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应用有哪些安全问题呢?这将是我们在下一篇内容中讨论的重点内容。
相关文章:
API安全之《大话:API的前世今生》
写在前面:本文结合API使用的业界现状,系统性地阐述API的基本概念、发展历史、表现形式等基础内容,主要包含以下内容: 1.什么是API 2.API的发展历史 3.现代API常用消息格式 4.top N 互联网企业API 使用现状 当前的世界是一个信…...
H5或者Vue实现二维码识别
前言 1、扫码识别库采用开源的zxing/library 2、支持js,Vue,lit等实现 原文章地址和代码仓库地址 1、在界面创建video标签用来显示摄像头内容 <!-- 视区 --><!-- lit写法 --> <video ${ref(this.videoRef)} class"xy-scan-wrap…...
stm32整理(三)ADC
1 ADC简介 1.1 ADC 简介 12 位 ADC 是逐次趋近型模数转换器。它具有多达 19 个复用通道,可测量来自 16 个外部 源、两个内部源和 VBAT 通道的信号。这些通道的 A/D 转换可在单次、连续、扫描或不连续 采样模式下进行。ADC 的结果存储在一个左对齐或右对齐的 16 位…...
Redis-持久化+主从架构
文章目录 Redis的持久化RDB模式异步持久化的实现AOF模式总结 Redis的主从架构1.端口以及文件调试测试2.主从配置3.数据同步原理(第一次同步为全局同步)4.增量同步5.主从配置优化6.问:master主机怎么判断从机slave是不是第一次同步数据? Redis…...
STM32H750之FreeRTOS学习--------(四)中断管理
四、FreeRTOS中断管理 中断的概念不再过多叙述,学习过逻辑的都知道 中断的执行过程 中断请求 外设产生中断请求(GPIO外部中断、定时器中断等)响应中断 CPU停止执行当前程序,转而去执行中断处理程序(ISR)…...
Macroscope安全漏洞检测工具简介
学习目标: 本介绍旨在帮助感兴趣者尽快了解 Macroscope,这是一款用于安全测试自动化和漏洞管理的企业工具。 全覆盖应用程序安全测试: 如下图所示,如果使用多种互补工具(SAST/DAST/SCA 等)来检测应用程序…...
【Linux】Nignx的入门使用负载均衡动静分离(前后端项目部署)---超详细
一,Nignx入门 1.1 Nignx是什么 Nginx是一个高性能的开源Web服务器和反向代理服务器。它使用事件驱动的异步框架,可同时处理大量请求,支持负载均衡、反向代理、HTTP缓存等常见Web服务场景。Nginx可以作为一个前端的Web服务器,也可…...
【入门Flink】- 04Flink部署模式和运行模式【偏概念】
部署模式 在一些应用场景中,对于集群资源分配和占用的方式,可能会有特定的需求。Flink为各种场景提供了不同的部署模式,主要有以下三种:会话模式(Session Mode)、单作业模式(Per-Job Mode&…...
react面试要点
# React面试知识点 ## React是什么?谈一谈你对react的理解 1 React是一个网页UI库 2 react的特点是 声明式 组件化 通用性 3 react优点: 简单,低耦合高内聚,由于虚拟dom概念,可以做到一次学习到处使用。 …...
在Google Kubernetes集群创建分布式Jenkins(一)
因为项目需要,在GKE的集群上需要创建一个CICD的环境,记录一下安装部署一个分布式Jenkins集群的过程。 分布式Jenkins由一个主服务器和多个Agent组成,Agent可以执行主服务器分派的任务。如下图所示: 如上图,Jenkins Ag…...
【Python全栈_公开课学习记录】
一、初识python (一).Python起源 Python创始人为吉多范罗苏姆(荷兰),Python崇尚优美、清晰、简明的编辑风格。Python语言结构清晰简单、数据库丰富、运行成熟稳定,科学计算统计分析领先。目前广泛应用于云计算、Web开发、科学运算…...
uniapp循环列表单选框实现单选
目录 图片源码参考最后 图片 源码 参考 大佬 最后 感觉文章好的话记得点个心心和关注和收藏,有错的地方麻烦指正一下,如果需要转载,请标明出处,多谢!!!...
【强化学习】14 —— A3C(Asynchronous Advantage Actor Critic)
A3C算法( Asynchronous Methods for Deep Reinforcement Learning)于2016年被谷歌DeepMind团队提出。A3C是一种非常有效的深度强化学习算法,在围棋、星际争霸等复杂任务上已经取得了很好的效果。接下来,我们先从A3C的名称入手&…...
Google单元测试sample分析(四)
GoogleTest单元测试可用实现在每个测试用例结束后监控其内存使用情况, 可以通过GoogleTest提供的事件侦听器EmptyTestEventListener 来实现,下面通过官方提供的sample例子,路径在samples文件夹下的sample10_unittest.cpp // Copyright 2009…...
网络套接字编程(二)
网络套接字编程(二) 文章目录 网络套接字编程(二)简易TCP网络程序服务端创建套接字服务端绑定IP地址和端口号服务端监听服务端运行服务端网络服务服务端启动客户端创建套接字客户端的绑定和监听问题客户端建立连接并通信客户端启动程序测试单执行流服务器的弊端 多进程版TCP网络…...
LLaMA-Adapter源码解析
LLaMA-Adapter源码解析 伪代码 def transformer_block_with_llama_adapter(x, gating_factor, soft_prompt):residual xy zero_init_attention(soft_prompt, x) # llama-adapter: prepend prefixx self_attention(x)x x gating_factor * y # llama-adapter: apply zero_init…...
JavaScript设计模式之发布-订阅模式
发布者和订阅者完全解耦(通过消息队列进行通信) 适用场景:功能模块间进行通信,如Vue的事件总线。 ES6实现方式: class eventManager {constructor() {this.eventList {};}on(eventName, callback) {if (this.eventL…...
mysql---索引
概要 索引:排序的列表,列表当中存储的是索引的值和包含这个值的数据所在的行的物理地址 作用:加快查找速度 注:索引要在创建表时尽量创建完全,后期添加影响变动大。 索引也需要占用磁盘空间,innodb表数据…...
微信小程序——简易复制文本
在微信小程序中,可以使用wx.setClipboardData()方法来实现复制文本内容的功能。以下是一个示例代码: // 点击按钮触发复制事件 copyText: function() {var that this;wx.setClipboardData({data: 要复制的文本内容,success: function(res) {wx.showToa…...
【51单片机】矩阵键盘与定时器(学习笔记)
一、矩阵键盘 1、矩阵键盘概述 在键盘中按键数量较多时,为了减少I/O口的占用,通常将按键排列成矩阵形式 采用逐行或逐列的“扫描”,就可以读出任何位置按键的状态 2、扫描的概念 数码管扫描(输出扫描):…...
【网络】每天掌握一个Linux命令 - iftop
在Linux系统中,iftop是网络管理的得力助手,能实时监控网络流量、连接情况等,帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...
突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合
强化学习(Reinforcement Learning, RL)是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程,然后使用强化学习的Actor-Critic机制(中文译作“知行互动”机制),逐步迭代求解…...
SCAU期末笔记 - 数据分析与数据挖掘题库解析
这门怎么题库答案不全啊日 来简单学一下子来 一、选择题(可多选) 将原始数据进行集成、变换、维度规约、数值规约是在以下哪个步骤的任务?(C) A. 频繁模式挖掘 B.分类和预测 C.数据预处理 D.数据流挖掘 A. 频繁模式挖掘:专注于发现数据中…...
使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装
以下是基于 vant-ui(适配 Vue2 版本 )实现截图中照片上传预览、删除功能,并封装成可复用组件的完整代码,包含样式和逻辑实现,可直接在 Vue2 项目中使用: 1. 封装的图片上传组件 ImageUploader.vue <te…...
用docker来安装部署freeswitch记录
今天刚才测试一个callcenter的项目,所以尝试安装freeswitch 1、使用轩辕镜像 - 中国开发者首选的专业 Docker 镜像加速服务平台 编辑下面/etc/docker/daemon.json文件为 {"registry-mirrors": ["https://docker.xuanyuan.me"] }同时可以进入轩…...
大数据学习(132)-HIve数据分析
🍋🍋大数据学习🍋🍋 🔥系列专栏: 👑哲学语录: 用力所能及,改变世界。 💖如果觉得博主的文章还不错的话,请点赞👍收藏⭐️留言Ǵ…...
SiFli 52把Imagie图片,Font字体资源放在指定位置,编译成指定img.bin和font.bin的问题
分区配置 (ptab.json) img 属性介绍: img 属性指定分区存放的 image 名称,指定的 image 名称必须是当前工程生成的 binary 。 如果 binary 有多个文件,则以 proj_name:binary_name 格式指定文件名, proj_name 为工程 名&…...
MFC 抛体运动模拟:常见问题解决与界面美化
在 MFC 中开发抛体运动模拟程序时,我们常遇到 轨迹残留、无效刷新、视觉单调、物理逻辑瑕疵 等问题。本文将针对这些痛点,详细解析原因并提供解决方案,同时兼顾界面美化,让模拟效果更专业、更高效。 问题一:历史轨迹与小球残影残留 现象 小球运动后,历史位置的 “残影”…...
基于IDIG-GAN的小样本电机轴承故障诊断
目录 🔍 核心问题 一、IDIG-GAN模型原理 1. 整体架构 2. 核心创新点 (1) 梯度归一化(Gradient Normalization) (2) 判别器梯度间隙正则化(Discriminator Gradient Gap Regularization) (3) 自注意力机制(Self-Attention) 3. 完整损失函数 二…...
全面解析数据库:从基础概念到前沿应用
在数字化时代,数据已成为企业和社会发展的核心资产,而数据库作为存储、管理和处理数据的关键工具,在各个领域发挥着举足轻重的作用。从电商平台的商品信息管理,到社交网络的用户数据存储,再到金融行业的交易记录处理&a…...
