应用程序接口(Application Programming Interface,缩写API)是一种允许两个不同的计算机应用程序进行交互的软件中介,它在不同系统之间扮演处理数据运输的角色,帮助公司对外部第三方开发人员、业务合作伙伴和公司内部部门开放其应用程序数据和功能[5][1]。同时充当现代应用程序的基本构建块,为开发人员把应用程序集成在一起提供解决的方法[1]。
API在现代数字生活中几乎无处不在,比如现代插件、数字接口和软件通信环境等方面。[6]API可以是开放的,允许第三方开发者使用和扩展,也可以是私有的,只允许内部使用。API的使用可以提高软件开发效率,降低开发成本,同时也可以提高软件的可靠性和安全性。[7][8]
据瑞数信息《2021Bots自动化威胁报告》显示,2020年API流量相较于2019年同比增长2.8倍[9],另外据《State of API Security Report,Q32021》报告显示,整体API流量在2021年上半年增长了141%,而针对API的攻击流量则增长了348%,其增长速度是普通API流量的3倍[10]。2023年6月,据网宿旗下网宿安全发布的《2022年Web安全观察报告》指出,网宿安全平台检测出针对API的攻击达到了58.4%,也是API受到攻击占比首次突破50%,同时API上升为黑产攻击的头号目标[11]。
历史发展阶段
截至今日,API已经在人们的日常现实生活中存在了几十年,其成形最早发生在2000年代初,从API成形之初发展到现在,共经历了五个阶段。
商业应用程序
21世纪初,API最初是由Salesforce、eBay和Amazon这三家公司进行定义的,Web API也是在这一阶段出现,是作为帮助实现新兴创业公司的产品和服务在线可用以及使合作伙伴和第三方经销商扩展平台的覆盖范围的一种新方法而存在的[12]。
社交媒体应用
2000年代中期,Flickr、Facebook和Twitter等一批新的公司意识到API的重要价值——改变人们相互分享信息的方式。例如Facebook于2006年8月推出的APL1.0版本允许开发者对Facebook用户的朋友、照片、事件等个人资料进行访问。而该版本的APl也帮助Facebook成为世界上最受欢迎的社交网络之一[12]。
云应用程序
该阶段的转折点是亚马逊于2006年推出了Amazon Simple Storage (S3),S3是一种基本的存储服务,其中的资源可以通过AP1和CL1访问,其即付即用模式为组织提供了一种经济高效的方式,使数字资产在在线经济中货币化。仅仅六个月后,亚马逊发布了Amazon ElasticCompute (EC2),它使开发人员能够使用Web APl来部署基础设施,从而为下一代应用程序提供动力。S3和EC2在今天的应用程序开发中继续扮演着重要的角色[12]。
针对移动应用的应用程序
2007年,苹果的iPhone和谷歌的Android被引入世界,其也刺激了由API驱动的移动应用程序的大规模投资。例如Twilio于2007年推出的APL-as-a-product平台允许开发者从任何云应用中拨打和接听电话Instagram随后在2010年10月推出了iPhone照片分享应用程序,仅三个月后就拥有了100万用户onstagram最初并没有提供APL,在2011年初,为了响应用户的需求,它开始了一个AP的工作这些以APL为先的公司在为今天如何交付APL制定蓝图方面发挥了至关重要的作用[12]。
连接设备的API
2010年左右,一些开发人员开始使用API将日常物品一-如相机、恒温器、扬声器、麦克风和传感器一-连接到云端。包括Fitbit、Nest、Alexa在内的下一代设备可以发送和接收数据、内容、媒体和其他数字资源,进一步改变人们与周围世界的互动方式[12]。
开放API
开放API也称为公共API,是一种可以通过HTTP协议进行访问并定义API 端点以及请求和响应格式的开源应用程序编程接口[5],该接口对公网开放且允许公众进行调用,任何人或者机构都可以使用该API,而无需与API提供者建立合作关系[13]。这些公共API几乎没有任何限制,可以是免费的,有些也是需要注册的[14]。
合作伙伴API
合作伙伴API在SaaS行业中较为常见[14],开发人员在完成加入流程并获得登录凭证的同时需要通过公共 API 开发人员门户以自助服务模式才能访问合作伙伴API,合作伙伴与战略业务合作伙伴相连接[5]。
内部API
不同内部的开发团队可以通过内部API来进行沟通并提高生产力,以便更好的进行数据、信息或服务的分享以及交换。而这些API会对公司外部的用户进行隐藏,因此公司外部用户不适用这些API[14][5]。同时这些API可以帮助企业或者组织对内部之间不同系统、应用进行协调以及调用[13]。
复合API
当程序员在一次调用中访问多个端点时就要借助复合API,其也是利用了复合API可以组合多个数据和服务API的特点,同时复合API在微服务架构中执行单个任务时可以帮助提供多个来源的信息[5],其一般被用来减少服务器上的负载并提高应用性能[14]。
SOAP API
SOAP在系统以及企业应用程序中通过提供一种可靠且值得信任的方式来帮助其发送和接收信息,API则是把SOAP对XML的使用作为其发送和接收信息的数据格式,同时包括定义信息的结构、表示数据类型的规则、每个SOAP API请求的结构、每个SOAP API响应的结构这四个维度。SOAP API是以一种更加结构式和形式化的方式进行的开发,其通常运用在银行转账、预订航班、计费服务、导航公司、城市管理等方面[15][16]。
RPC API
RPC API(远程过程调用),也称为子程序调用或函数调用,可以构建出基于客户端服务器的分布式的应用程序。其使用的是传统的本地过程调用,而不需要在几个完全相同的地址空间进行调用。PRC的控制流会在客户端和服务器之间徘徊,这也意味着客户端和服务器不会同时执行,其执行的线程会从一个跳转到另一个[15][17]。
REST API
REST API,也称表述性状态转移API[18],其通过一种简单且灵活的方式对Web服务进行访问,REST API的端点是一个UGL,其通过HTTP动词来进行CRUD资源上的创建读取删掉等操作。REST API具有较强的可扩展性和缓存能力[15][17]。
WebSocket API
WebSocket API可以在用户的浏览器和服务器之间打开双向交互式通信会话,同时可以帮助用户完成信息的发送以及接收事件驱动的响应[15][19]。
面向对象原则
面向对象原则要求应用程序接口在保证科学的同时有章可循,而该原则保证了应用程序接口的设计功能明确、思路清晰、针对性强,并且提高了接口的开发效率,而复杂详细的接口程序能够降低软件间的耦合性[20]。
可扩展性原则
可扩展性原则可以帮助应用程序接口在对应软件根据用户需求升级的同时进行相应升级,同时可以帮助解决升级过程中遇到的不可预知的风险[20]。
高健壮性和高容错性原则
高健壮性原则能够帮助应用程序接口在复杂多变的环境中迅速作出反应,保持系统的正常运行,而高容错性则要求应用程序接口对接收错误的数据进行及时处理[20]。
满足不同用户的需求原则
满足不同用户需求的原则要求应用程序接口在设计过程中应根据不同用户的需求进行设计,如机场安检系统需要设计出与离港系统、信息管理系统、行李处理系统等多个外部系统用户接口,以此来满足用户需求[20]。
遵守行业规范原则
遵守行业规范原则要求对应用程序接口的开发需要在结合自身基本情况的前提下考虑标准因素,并按照国家提出的统一接口标准进行开发[20]。
优点
改进协作:API可以通过集成的方式帮助平台及应用程序进行无缝的相互通信,同时还可以帮助公司实现工作流程自动化并改善工作场所协作[5]。
加速创新:API具有灵活性,能够帮助公司与新的业务合作伙伴建立联系,同时向现有市场提供新的服务,并逐渐向能够产生巨大回报和推动数字化转型的新市场进行转变[5]。
数据货币化:许多公司通过选择免费提供API的方式来围绕自己的品牌建立开发人员受众的同时与潜在的业务伙伴建立合作关系,而企业可以对允许访问数字资产的应用程序接口进行出售来实现货币化[5]。
系统安全:API在把请求应用程序与响应服务的基础架构分开的同时给两者提供安全层,以方便两者间的相互通信。如API网关通过控制访问权限来进一步减少安全威胁、API调用通常需要使用身份验证凭据、HTTP 头、Cookie 或查询字符串可以在数据交换期间保证安全等[5]。
最终用户安全和隐私:API可以为个人用户提供额外的保护,用户可以在网站请求通过位置API访问用户的位置时执行允许或者拒绝的操作,一些Web浏览器和移动操作系统会在API请求访问应用程序及其数据时使用其内置的权限结构[5]。
缺点
容易受到滥用:对API的滥用会导致原本只是针对API的频率较低的攻击转变为企业 Web 应用程序数据泄露的攻击媒介[18],而一些不法分子还会利用存在于通信协议、请求方式、请求参数、和响应参数等环节的漏洞来窃取用户信息以及企业的核心数据信息[21]。
易受攻击:API在承载相较于传统Web页面更多业务的基础上也会遭到更多的攻击,其遭遇的攻击类型主要包括越权访问、接口滥用、数据拖取等业务类攻击,而这些攻击占比达到70%,要远多于传统应用攻击[22][23]。
请求参数易被篡改:包括用户姓名、身份证号码、账号、员工ID等API参数易被不法分子进行篡改,并把篡改后的API参数与其他信息匹配映射关系相结合,以此来达到窃取数据信息的目的[21]。
接口数据易被恶意留存:合作方会在与企业进行数据交互的过程中恶意留存数据接口,而经过长时间的积累后,会对企业数据库造成事实上的拖库[21]
易导致使用效果不佳:API的设计和实现需要考虑到不同应用场景和用户需求,否则可能会导致API的使用效果不佳[24]。
功能和用途
开发者可以通过API来给其应用增添新功能,同时还能帮助开发者节省相应的开发时间,一些关键功能在其保障下还可以有效运行[25]。创建API可以帮助应用所属公司以更自然的方式进行扩张。API 创建者通过制定严格的条件,向外部开发者开放内部工具的有限访问权限,从而扩大其软件和品牌的影响力,实现分享工作成果的价值[25]。API 还可以帮助用户将互联网和移动应用相整合,API支持共享按钮或社交登录选项等基本的在线行为。即使在电子商务的应用中使用映射数据也需通过 API,正因如此,API 对用户已经变得至关重要[25]。开发者可以通过使用API来减少互联网上的存储碎片,并且可以优化站点、平台和移动应用之间互相连通的生态系统内的导航[25]。一些公司还可以通过调用Google地图上的API来为其提供信息和功能,而该API可以帮助公司网站增强相应的功能,同时还可以帮助Google地图通过收费或为地图打上品牌的方式来获取利益,增强其营销力度[6]。任何事务性或基于服务的企业都可以通过对API的使用来获得营销收益,用户还可以通过 API 连接Uber、Yelp、Google地图和Dropbox等一系列常用应用。此外,当用户在线 “分享” 文章时可以选择点击某个图标,该图标允许用户通过Twitter、Gmail 或 Facebook等媒体进行链接的共享。[6]。
常见第三方API
The Twitter API:Twitter API允许用户通过独特高级的方式对Twitter进行编程访问,如用户可以在网站上发布展示自已的推文[26][27]。
The Google Maps API:Google Maps API是一整套完整的,可以给用户列出在地图上或基于位置的数据执行的最常见操作,用户可以利用该API在地图上执行各种操作[26][28]。
The Facebook suite of API:用户可以通过Facebook suite of API把Facebook生态系统中提供的通过Facebook账户登录、接受应用内支付、推送有针对性的广告活动等功能应用到其app中[26]。
The YouTube API:用户可以通过YouTube API把视频上传到相应网站中,同时用户可以执行搜索Youtube、创建播放列表等操作[26]。
The Twilio API:Twilio API为用户的App提供针对语音通话和视频聊天的框架,以及从用户的app发送短信息或多媒体信息等诸多功能[26]。
企业对API的应用
企业可以通过ChatGPT的API把其语言处理能力集成到自身的应用程序、网站和系统中,而用户在访问企业的应用程序或者网站时就可以享受到与ChatGPT相关技术的服务,国内一批相关从业者通过对ChatGPT的API调用来把GPT-4集成到自家网站上,从而实现收费服务[29]。
通用登录
用户可以利用Facebook、Twitter以及Google上的个人资料登录详细信息来登录其他网站或App,该登录选项大大提高了各个网站之间的相互验证效率,减少了网站为新会员或者应用程序设置新配置文件的时间[5]。
旅行预订比较
一些旅行预订网站通过使用API来汇总数千个航班在对应日期的最经济的订票选择,用户还可以通过网络浏览器以及旅行预订网站的应用程序来查看酒店和航空公司的最新空房信息,API通过自动交换数据和请求帮助用户选择可用航班和住房需要,极大的减少了出行不必要的时间[5]。
地图应用程序
一些地图应用程序通过使用API来帮助用户了解和查看方向、限速、兴趣点、交通警告等信息,其最基本的就是帮助地图应用程序显示静态或交互式地图,同时用户在规划旅行路线或查看移动中物品的踪迹时可随时与 API 通信[5]。
异常交易事件
2018年,一起“异常交易事件”引起了币圈的关注——Syscoin交易量的指数和市场压力不断增长,SYS价格急剧上涨,其买盘和卖盘的价格均达到了非正常的水平,而这一系列的起因是币安交易所的交易API受到恶意使用。币安方面则表示,已采取措施保护API用户的安全,其中主要是回滚异常交易和删除所有现有的API密钥,并请求所有币安API用户重新创建其API密钥。同时,币安在API用户的授权方面做了相应提醒,开启IP白名单保护功能,保护API用户的授权访问密匙。[30]。
安全漏洞问题
2023年4月,腾讯安全专家Leo在为某家医院做安全检测时发现存在一个可能导致百万级敏感数据泄露的问题—医院自身的GraphQL接口可以通过自省功能与所有API接口相连接,其中有大量无需授权即可访问的API,而通过这些API可以直接获取病患的身份、就诊信息等大量敏感数据,同时Leo还发现存在大量未鉴权的数据修改API,通过这些API可以对他人的账号信息进行修改,甚至可以修改APP链接来进行病毒攻击。而应用数据信息泄露的事件并非只有这一例,比如说7亿多Linkedln用户的数据在暗网被售卖;Parler网站涉及1000万用户超过60T的数据泄漏;Clubhouse泄露130万条用户记录等[31]。
2018年9月,Facebook因某 API安全漏洞原因而导致数百万用户数据信息被泄露。同年12月,Facebook再因API安全漏洞而导致680万用户个人信息及设备缓存数据泄露。2019年12月,国外安全人员在某公开数据库中发现存在 2.67 亿条 Facebook ID、电话号码和姓名等信息,这些信息并非是用户自行上传公开的,而是被API接口进行抓取的[13]。
非法利用用户信息
2019年12月,Twitter公司发现提供电话号码搜索用户功能的API接口被大量虚假账户非法利用来获取用户相关信息,并进行钓鱼攻击、电话诈骗等违法活动。事件发生后,Twitter紧急修复可以通过电话号码搜索到用户的API接口使相关搜索无法直接查询到相关用户[13]。
参考资料 31
- 应用程序接口 (API) — GLOUD NATIVE
- 什么是 API? — Red Hat
- What is an API and Why Ecommerce Sites Use Them — bigcommerce
- 了解“API安全产品”选型的6大关键功能,使您工作更轻松! — 搜狐网
- 什么是 API? — IBM
- Access Denied — TIBCO
- API应用接口呈现爆发式增长 网宿科技发力API安全赛道 — 今日头条
- https://d.wanfangdata.com.cn/Periodical/ChlQZXJpb2RpY2FsQ0hJTmV3UzIwMjMwMzIxEhBzempzeXl5MjAyMDA0MDc3Ggh6OWdsczlkOA%3D%3D
- 重磅 | 瑞数信息发布《2021 Bots自动化威胁报告》 — 微信公众平台
- State of API Security Report, Q3 2021 — salt
- 2022年Web安全观察报告 — 网安
- What is an API? — postman
- 首页 > 科研能力 > 权威发布 > 专题报告 — 中国信通院
- Access Denied — siliconexpert
- 什么是 API? — aws
- What Is a SOAP API? — postman
- DifferenceBetweenRESTAPIandRPCAPI — geeksforgeeks
- 什么是应用程序编程接口(API) 安全? — Akamai
- The WebSocket API (WebSockets) — developer
- https://ycfw.library.hb.cn:8000/https/vpn/4/N73YGLUYMFYGMZLPM7TGC7DBF3SX85JPMNYA/Catalog/List?fileId=perio_szjsyyy202004077&transaction=%7B%22id%22%3Anull%2C%22transferOutAccountsStatus%22%3Anull%2C%22transaction%22%3A%7B%22id%22%3A%221723608655762436096%22%2C%22status%22%3A1%2C%22createDateTime%22%3Anull%2C%22payDateTime%22%3A1699775301291%2C%22authToken%22%3A%22TGT-720958-AC9I4OurM0pCs57gMAg5g7gh1FGsJ47WVGSLpxsNhbI7VSswo4-auth-iploginservice-8d8c4b879-x9lgm%22%2C%22user%22%3A%7B%22accountType%22%3A%22Group%22%2C%22key%22%3A%22g_hbstsg%22%7D%2C%22transferIn%22%3A%7B%22accountType%22%3A%22Income%22%2C%22key%22%3A%22PeriodicalFulltext%22%7D%2C%22transferOut%22%3A%7B%22GTimeLimit.g_hbstsg%22%3A3.0%7D%2C%22turnover%22%3A3.0%2C%22orderTurnover%22%3A3.0%2C%22productDetail%22%3A%22perio_szjsyyy202004077%22%2C%22productTitle%22%3Anull%2C%22userIP%22%3A%2261.183.212.126%22%2C%22organName%22%3Anull%2C%22memo%22%3Anull%2C%22orderUser%22%3A%22g_hbstsg%22%2C%22orderChannel%22%3A%22pc%22%2C%22payTag%22%3A%22%22%2C%22webTransactionRequest%22%3Anull%2C%22signature%22%3A%22PI3w6EZUgyHmEOO3KPvSTzMxyNeMCQlmbk13nHTOH/6/9S/vO7dqYYKLJbaSPdaIwqRzeQqArsbF%5CnCZoBlt%2BC1qzHw0Tu5V/znNXbmdjYGmvZld0mQkSv6rmoWbbPk8RgneR09C0EE5viKpDJNQXTBQH4%5CnMwG4lCQrT/hbfu%2B7PdA%3D%22%7D%2C%22isCache%22%3Afalse%7D
- 中国信通院:2020年应用程序接口(API)数据安全研究报告(附下载) — 中文互联网数据资讯中心
- 《2021 Bots自动化威胁报告》深度解读之 Bots攻击详解 — 微信公众平台
- 《2021 Bots自动化威胁报告》 — 数说安全
- https://d.wanfangdata.com.cn/Thesis/ChJUaGVzaXNOZXdTMjAyMzAxMTISCFkzOTU5ODEwGgh6OWdsczlkOA%3D%3D
- 应用程序编程接口(API)可以访问软件的有限部分,以便供开发者加以利用。通过允许访问特定应用程序的API,API开发者可以帮助其他人扩展应用的功能性,或者提供以前无法访问的信息。 — DJUST
- Web API 简介 — developer
- Docs — developer
- API 选择工具 — developers
- 揭秘“ChatGPT中介”:“直售账号”和“集成分销”背后的“兼职商机” — 36氪
- 从币安SYS事件谈谈API在加密货币交易的应用 — 界面新闻
- 一个由“API未授权漏洞”引发的百万级敏感数据泄露 — 腾讯网