”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > API 的历史:应用程序编程接口的演变

API 的历史:应用程序编程接口的演变

发布于2024-11-08
浏览:166

The History of APIs: Evolution of Application Programming Interfaces
应用程序编程接口 (API) 是现代软件开发不可或缺的一部分,可实现不同应用程序、服务和系统之间的连接和通信。多年来,API 已从简单的内部工具转变为网络的支柱,推动着从社交媒体集成到金融交易的一切。

本文将追溯 API 从诞生到其在当今数字经济中发挥关键作用的历史。

早期: API 的基础(1960 年代-1980 年代)
子例程和库的诞生
API 的起源可以追溯到 20 世纪 60 年代计算的早期,伴随着子例程和软件库的发展。子例程是可重用的代码块,开发人员可以在程序中调用它们,从而减少冗余并提高效率。这些可重用代码块为 API 的概念奠定了基础,允许软件组件进行内部通信。

随着软件系统复杂性的增加,对与系统功能交互的有组织和标准化的方式的需求也随之增加。软件库出现了,提供了可以被程序其他部分访问的预构建功能。这些库通过早期的内部 API 访问,允许开发人员利用现有功能,而无需重写代码。

模块化编程的概念
到了 20 世纪 70 年代和 80 年代,模块化编程的思想开始流行。在模块化编程中,软件被设计为独立的单元或模块,每个单元或模块负责特定的任务。这些模块使用预定义的接口相互通信,这是 API 的早期形式。

网络系统的兴起:分布式计算 API(1980 年代-1990 年代)

随着计算机开始通过网络互连,系统在不同机器之间进行通信的需求变得至关重要。这一转变标志着 API 发展的一个关键转折点。
远程过程调用 (RPC)

20 世纪 80 年代,远程过程调用 (RPC) 被开发出来,允许软件在网络中的另一台计算机上执行过程。这个概念是朝着我们今天所知的 API 迈出的重要一步,因为它使不同的机器能够以标准化的方式进行交互,从而使分布式计算成为可能。

CORBA 和 COM
20 世纪 90 年代,CORBA(通用对象请求代理架构)和 COM(组件对象模型)的出现彻底改变了软件组件在分布式环境中进行通信的方式。 CORBA 允许用不同编程语言编写并在不同操作系统上运行的应用程序进行通信,而 COM 允许跨应用程序重用软件组件。

然而,这些早期的 API 系统非常复杂,而且实施起来往往具有挑战性,因此需要寻找更简单、更灵活的解决方案。
网络时代:API 和互联网(1990 年代-2000 年代)
20 世纪 90 年代万维网的兴起给 API 的构思和使用方式带来了巨大的转变。 Web 为通过互联网连接不同的应用程序和服务开辟了新的可能性,而 API 对于实现这种互连性至关重要。

SOAP 的出现
20 世纪 90 年代末,简单对象访问协议 (SOAP) 作为一种用于在 Web 服务中交换结构化信息的协议而出现。基于 SOAP 的 API 允许不同的应用程序通过 Web 进行通信,通常使用 XML 来构造数据。虽然 SOAP 提供了一种实现跨平台交互的方法,但它通常被视为重量级且过于复杂。

早期公共 API
2000 年代初期,公共 API 兴起,公司开始公开其内部功能以供外部使用。第一个值得注意的例子是 Salesforce,它于 2000 年推出了一个 API,允许开发人员访问其 CRM 平台,标志着 API 成为核心业务战略时代的开始。
API 革命:REST 和云(2000 年代至今)
2000 年代,随着 REST(表述性状态传输)的引入,API 设计发生了一场革命,简化了应用程序通过网络进行通信的方式。

RESTful API
2000年,Roy Fielding在他的博士论文中引入了REST的概念。 RESTful API 利用现有的 Web 标准(主要是 HTTP),并且设计得比其前身(例如 SOAP)更简单、更轻量。 REST 允许开发人员构建可由任何能够发送 HTTP 请求的客户端轻松使用的 API,从而更轻松地通过 Web 集成系统。
REST 迅速流行起来,成为基于 Web 的应用程序的主要 API 设计模型。它的无状态性和简单性导致 Twitter、Facebook 和 Google 等公司广泛采用,这些公司开始提供公共 API,允许开发人员在其平台上构建应用程序。

云计算的兴起
云计算的兴起进一步加速了对API的需求。 Amazon Web Services (AWS)、Google Cloud 和 Microsoft Azure 等云平台公开了 API,允许开发人员以编程方式与云服务进行交互。 API 成为集成云服务(从存储到计算能力)的事实上的方法。

现代时代的 API:微服务及超越
2010 年代,微服务架构的兴起改变了应用程序的构建方式。系统不再是单一的应用程序,而是被分解为更小的、松散耦合的服务,并通过 API 进行通信。这种架构允许更可扩展和灵活的应用程序,其中可以独立开发、部署和扩展不同的服务。

GraphQL
2015 年,Facebook 推出了 GraphQL,一种新的 API 查询语言。与每个端点返回固定结构的 REST 不同,GraphQL 允许客户端准确请求他们所需的数据,从而减少数据的过度获取和不足获取。这种灵活性使其对复杂的应用程序特别有吸引力,例如涉及多种客户端类型(例如网络、移动)的应用程序。

API 生态系统
API 现在是许多数字生态系统的核心。 Stripe、Twilio 和 Slack 等平台围绕提供 API 构建了整个业务模型,开发人员可以使用这些 API 来构建支付系统、通信平台和集成。

API网关和管理
随着 API 对业务运营变得越来越重要,有效管理它们的需求也随之增长。 API 网关和管理工具的出现是为了处理速率限制、身份验证、监控和安全等问题。公司使用 Kong、Apigee 和 AWS API Gateway 等工具来管理大型系统中 API 的复杂交互。

API 的未来
随着我们走向未来,API 的作用将随着以下趋势继续扩大:

  1. 无服务器架构: API 在无服务器计算的兴起中发挥着关键作用,开发人员依靠云服务来自动管理基础设施、扩展和维护。
  2. 人工智能和机器学习 API: 随着人工智能和机器学习变得越来越重要,Google 的 TensorFlow 和 OpenAI 的 GPT 等 API 正在使开发人员能够使用这些技术。
  3. API 优先开发: 越来越多的组织正在采用 API 优先的软件开发方法,其中 API 被视为应用程序的核心,确保其设计良好、可扩展且易于使用易于消耗。

结论
API 的历史是一段创新之旅,从早期的内部软件库到我们今天使用的基于 Web、云集成和微服务驱动的现代 API。 API 已成为互联网的支柱,推动创新,实现新的业务模式,并为从社交媒体应用程序到金融交易的一切提供动力。
随着技术的发展,API 将继续影响我们构建、集成和扩展软件系统的方式,使它们成为未来数字化转型的重要方面。

版本声明 本文转载于:https://dev.to/keploy/the-history-of-apis-evolution-of-application-programming-interfaces-55p2?1如有侵犯,请联系[email protected]删除
最新教程 更多>
  • 为什么PYTZ最初显示出意外的时区偏移?
    为什么PYTZ最初显示出意外的时区偏移?
    与pytz 最初从pytz获得特定的偏移。例如,亚洲/hong_kong最初显示一个七个小时37分钟的偏移: 差异源利用本地化将时区分配给日期,使用了适当的时区名称和偏移量。但是,直接使用DateTime构造器分配时区不允许进行正确的调整。 example pytz.timezone(...
    编程 发布于2025-04-07
  • 如何使用Java.net.urlConnection和Multipart/form-data编码使用其他参数上传文件?
    如何使用Java.net.urlConnection和Multipart/form-data编码使用其他参数上传文件?
    使用http request 上传文件上传到http server,同时也提交其他参数,java.net.net.urlconnection and Multipart/form-data Encoding是普遍的。 Here's a breakdown of the process:Mu...
    编程 发布于2025-04-07
  • 您如何在Laravel Blade模板中定义变量?
    您如何在Laravel Blade模板中定义变量?
    在Laravel Blade模板中使用Elegance 在blade模板中如何分配变量对于存储以后使用的数据至关重要。在使用“ {{}}”分配变量的同时,它可能并不总是最优雅的解决方案。幸运的是,Blade通过@php Directive提供了更优雅的方法: $ old_section =“...
    编程 发布于2025-04-07
  • 如何使用Python有效地以相反顺序读取大型文件?
    如何使用Python有效地以相反顺序读取大型文件?
    在python 反向行读取器生成器 == ord('\ n'): 缓冲区=缓冲区[:-1] 剩余_size- = buf_size lines = buffer.split('\ n'....
    编程 发布于2025-04-07
  • 为什么PHP的DateTime :: Modify('+1个月')会产生意外的结果?
    为什么PHP的DateTime :: Modify('+1个月')会产生意外的结果?
    使用php dateTime修改月份:发现预期的行为在使用PHP的DateTime类时,添加或减去几个月可能并不总是会产生预期的结果。正如文档所警告的那样,“当心”这些操作的“不像看起来那样直观。 考虑文档中给出的示例:这是内部发生的事情: 现在在3月3日添加另一个月,因为2月在2001年只有2...
    编程 发布于2025-04-07
  • 如何为PostgreSQL中的每个唯一标识符有效地检索最后一行?
    如何为PostgreSQL中的每个唯一标识符有效地检索最后一行?
    postgresql:为每个唯一标识符提取最后一行,在Postgresql中,您可能需要遇到与在数据库中的每个不同标识相关的信息中提取信息的情况。考虑以下数据:[ 1 2014-02-01 kjkj 在数据集中的每个唯一ID中检索最后一行的信息,您可以在操作员上使用Postgres的有效效率: ...
    编程 发布于2025-04-07
  • 如何使用不同数量列的联合数据库表?
    如何使用不同数量列的联合数据库表?
    合并列数不同的表 当尝试合并列数不同的数据库表时,可能会遇到挑战。一种直接的方法是在列数较少的表中,为缺失的列追加空值。 例如,考虑两个表,表 A 和表 B,其中表 A 的列数多于表 B。为了合并这些表,同时处理表 B 中缺失的列,请按照以下步骤操作: 确定表 B 中缺失的列,并将它们添加到表的末...
    编程 发布于2025-04-07
  • 如何使用Depimal.parse()中的指数表示法中的数字?
    如何使用Depimal.parse()中的指数表示法中的数字?
    在尝试使用Decimal.parse(“ 1.2345e-02”中的指数符号表示法表示的字符串时,您可能会遇到错误。这是因为默认解析方法无法识别指数符号。 成功解析这样的字符串,您需要明确指定它代表浮点数。您可以使用numbersTyles.Float样式进行此操作,如下所示:[&& && && ...
    编程 发布于2025-04-07
  • PHP阵列键值异常:了解07和08的好奇情况
    PHP阵列键值异常:了解07和08的好奇情况
    PHP数组键值问题,使用07&08 在给定数月的数组中,键值07和08呈现令人困惑的行为时,就会出现一个不寻常的问题。运行print_r($月)返回意外结果:键“ 07”丢失,而键“ 08”分配给了9月的值。此问题源于PHP对领先零的解释。当一个数字带有0(例如07或08)的前缀时,PHP将其...
    编程 发布于2025-04-07
  • 如何将MySQL数据库添加到Visual Studio 2012中的数据源对话框中?
    如何将MySQL数据库添加到Visual Studio 2012中的数据源对话框中?
    在Visual Studio 2012 尽管已安装了MySQL Connector v.6.5.4,但无法将MySQL数据库添加到实体框架的“ DataSource对话框”中。为了解决这一问题,至关重要的是要了解MySQL连接器v.6.5.5及以后的6.6.x版本将提供MySQL的官方Visual...
    编程 发布于2025-04-07
  • 如何从PHP中的数组中提取随机元素?
    如何从PHP中的数组中提取随机元素?
    从阵列中的随机选择,可以轻松从数组中获取随机项目。考虑以下数组:; 从此数组中检索一个随机项目,利用array_rand( array_rand()函数从数组返回一个随机键。通过将$项目数组索引使用此键,我们可以从数组中访问一个随机元素。这种方法为选择随机项目提供了一种直接且可靠的方法。
    编程 发布于2025-04-07
  • 如何修复\“常规错误:2006 MySQL Server在插入数据时已经消失\”?
    如何修复\“常规错误:2006 MySQL Server在插入数据时已经消失\”?
    How to Resolve "General error: 2006 MySQL server has gone away" While Inserting RecordsIntroduction:Inserting data into a MySQL database can...
    编程 发布于2025-04-07
  • 如何处理PHP文件系统功能中的UTF-8文件名?
    如何处理PHP文件系统功能中的UTF-8文件名?
    在PHP的Filesystem functions中处理UTF-8 FileNames 在使用PHP的MKDIR函数中含有UTF-8字符的文件很多flusf-8字符时,您可能会在Windows Explorer中遇到comploreer grounder grounder grounder gro...
    编程 发布于2025-04-07
  • 为什么使用Firefox后退按钮时JavaScript执行停止?
    为什么使用Firefox后退按钮时JavaScript执行停止?
    导航历史记录问题:JavaScript使用Firefox Back Back 此行为是由浏览器缓存JavaScript资源引起的。要解决此问题并确保在后续页面访问中执行脚本,Firefox用户应设置一个空功能。 警报'); }; alert('inline Alert')...
    编程 发布于2025-04-07
  • 如何在Java中正确显示“ DD/MM/YYYY HH:MM:SS.SS”格式的当前日期和时间?
    如何在Java中正确显示“ DD/MM/YYYY HH:MM:SS.SS”格式的当前日期和时间?
    如何在“ dd/mm/yyyy hh:mm:mm:ss.ss”格式“ gormat 解决方案: args)抛出异常{ 日历cal = calendar.getInstance(); SimpleDateFormat SDF =新的SimpleDateFormat(“...
    编程 发布于2025-04-07

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3