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、扫描的概念 数码管扫描(输出扫描):…...
2024年赣州旅游投资集团社会招聘笔试真
2024年赣州旅游投资集团社会招聘笔试真 题 ( 满 分 1 0 0 分 时 间 1 2 0 分 钟 ) 一、单选题(每题只有一个正确答案,答错、不答或多答均不得分) 1.纪要的特点不包括()。 A.概括重点 B.指导传达 C. 客观纪实 D.有言必录 【答案】: D 2.1864年,()预言了电磁波的存在,并指出…...
连锁超市冷库节能解决方案:如何实现超市降本增效
在连锁超市冷库运营中,高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术,实现年省电费15%-60%,且不改动原有装备、安装快捷、…...

dedecms 织梦自定义表单留言增加ajax验证码功能
增加ajax功能模块,用户不点击提交按钮,只要输入框失去焦点,就会提前提示验证码是否正确。 一,模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...
渲染学进阶内容——模型
最近在写模组的时候发现渲染器里面离不开模型的定义,在渲染的第二篇文章中简单的讲解了一下关于模型部分的内容,其实不管是方块还是方块实体,都离不开模型的内容 🧱 一、CubeListBuilder 功能解析 CubeListBuilder 是 Minecraft Java 版模型系统的核心构建器,用于动态创…...
【C语言练习】080. 使用C语言实现简单的数据库操作
080. 使用C语言实现简单的数据库操作 080. 使用C语言实现简单的数据库操作使用原生APIODBC接口第三方库ORM框架文件模拟1. 安装SQLite2. 示例代码:使用SQLite创建数据库、表和插入数据3. 编译和运行4. 示例运行输出:5. 注意事项6. 总结080. 使用C语言实现简单的数据库操作 在…...
[Java恶补day16] 238.除自身以外数组的乘积
给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法,且在 O(n) 时间复杂度…...

Map相关知识
数据结构 二叉树 二叉树,顾名思义,每个节点最多有两个“叉”,也就是两个子节点,分别是左子 节点和右子节点。不过,二叉树并不要求每个节点都有两个子节点,有的节点只 有左子节点,有的节点只有…...

学校时钟系统,标准考场时钟系统,AI亮相2025高考,赛思时钟系统为教育公平筑起“精准防线”
2025年#高考 将在近日拉开帷幕,#AI 监考一度冲上热搜。当AI深度融入高考,#时间同步 不再是辅助功能,而是决定AI监考系统成败的“生命线”。 AI亮相2025高考,40种异常行为0.5秒精准识别 2025年高考即将拉开帷幕,江西、…...

【从零学习JVM|第三篇】类的生命周期(高频面试题)
前言: 在Java编程中,类的生命周期是指类从被加载到内存中开始,到被卸载出内存为止的整个过程。了解类的生命周期对于理解Java程序的运行机制以及性能优化非常重要。本文会深入探寻类的生命周期,让读者对此有深刻印象。 目录 …...
【Android】Android 开发 ADB 常用指令
查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...