」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > API 的歷史:應用程式介面的演變

API 的歷史:應用程式介面的演變

發佈於2024-11-08
瀏覽:307

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]刪除
最新教學 更多>
  • 圖片在Chrome中為何仍有邊框? `border: none;`無效解決方案
    圖片在Chrome中為何仍有邊框? `border: none;`無效解決方案
    在chrome 中刪除一個頻繁的問題時,在與Chrome and IE9中的圖像一起工作時,遇到了一個頻繁的問題。和“邊境:無;”在CSS中。要解決此問題,請考慮以下方法: Chrome bug Burcevention 樣式的重複另一種解決方案是在CSS和通過JQuery的Border = 0屬...
    程式設計 發佈於2025-04-29
  • 人臉檢測失敗原因及解決方案:Error -215
    人臉檢測失敗原因及解決方案:Error -215
    錯誤處理:解決“ error:((-215)!empty()in Function Multultiscale中的“ openCV 要解決此問題,必須確保提供給HAAR CASCADE XML文件的路徑有效。在提供的代碼片段中,級聯分類器裝有硬編碼路徑,這可能對您的系統不准確。相反,OPENCV提...
    程式設計 發佈於2025-04-29
  • 左連接為何在右表WHERE子句過濾時像內連接?
    左連接為何在右表WHERE子句過濾時像內連接?
    左JOIN CONUNDRUM:WITCHING小時在數據庫Wizard的領域中變成內在的加入很有趣,當將c.foobar條件放置在上面的Where子句中時,據說左聯接似乎會轉換為內部連接。僅當滿足A.Foo和C.Foobar標準時,才會返回結果。 為什麼要變形?關鍵在於其中的子句。當左聯接的右側...
    程式設計 發佈於2025-04-29
  • 反射動態實現Go接口用於RPC方法探索
    反射動態實現Go接口用於RPC方法探索
    在GO 使用反射來實現定義RPC式方法的界面。例如,考慮一個接口,例如:鍵入myService接口{ 登錄(用戶名,密碼字符串)(sessionId int,錯誤錯誤) helloworld(sessionid int)(hi String,錯誤錯誤) } 替代方案而不是依靠反射...
    程式設計 發佈於2025-04-29
  • 如何在Java的全屏獨家模式下處理用戶輸入?
    如何在Java的全屏獨家模式下處理用戶輸入?
    Handling User Input in Full Screen Exclusive Mode in JavaIntroductionWhen running a Java application in full screen exclusive mode, the usual event ha...
    程式設計 發佈於2025-04-29
  • 切換到MySQLi後CodeIgniter連接MySQL數據庫失敗原因
    切換到MySQLi後CodeIgniter連接MySQL數據庫失敗原因
    Unable to Connect to MySQL Database: Troubleshooting Error MessageWhen attempting to switch from the MySQL driver to the MySQLi driver in CodeIgniter,...
    程式設計 發佈於2025-04-29
  • 如何從PHP中的數組中提取隨機元素?
    如何從PHP中的數組中提取隨機元素?
    從陣列中的隨機選擇,可以輕鬆從數組中獲取隨機項目。考慮以下數組:; 從此數組中檢索一個隨機項目,利用array_rand( array_rand()函數從數組返回一個隨機鍵。通過將$項目數組索引使用此鍵,我們可以從數組中訪問一個隨機元素。這種方法為選擇隨機項目提供了一種直接且可靠的方法。
    程式設計 發佈於2025-04-29
  • 為什麼儘管有效代碼,為什麼在PHP中捕獲輸入?
    為什麼儘管有效代碼,為什麼在PHP中捕獲輸入?
    在php ;?>" method="post">The intention is to capture the input from the text box and display it when the submit button is clicked.但是,輸出...
    程式設計 發佈於2025-04-29
  • 如何使用PHP將斑點(圖像)正確插入MySQL?
    如何使用PHP將斑點(圖像)正確插入MySQL?
    essue VALUES('$this->image_id','file_get_contents($tmp_image)')";This code builds a string in PHP, but the function call fil...
    程式設計 發佈於2025-04-29
  • Java字符串非空且非null的有效檢查方法
    Java字符串非空且非null的有效檢查方法
    檢查字符串是否不是null而不是空的 if(str!= null && str.isementy())二手: if(str!= null && str.length()== 0) option 3:trim()。 isement(Isement() trim whitespace whites...
    程式設計 發佈於2025-04-29
  • 表單刷新後如何防止重複提交?
    表單刷新後如何防止重複提交?
    在Web開發中預防重複提交 在表格提交後刷新頁面時,遇到重複提交的問題是常見的。要解決這個問題,請考慮以下方法: 想像一下具有這樣的代碼段,看起來像這樣的代碼段:)){ //數據庫操作... 迴聲“操作完成”; 死(); } ? > ...
    程式設計 發佈於2025-04-29
  • 為什麼PYTZ最初顯示出意外的時區偏移?
    為什麼PYTZ最初顯示出意外的時區偏移?
    與pytz 最初從pytz獲得特定的偏移。例如,亞洲/hong_kong最初顯示一個七個小時37分鐘的偏移: 差異源利用本地化將時區分配給日期,使用了適當的時區名稱和偏移量。但是,直接使用DateTime構造器分配時區不允許進行正確的調整。 example pytz.timezone(&#...
    程式設計 發佈於2025-04-29
  • 如何將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-29
  • JavaScript計算兩個日期之間天數的方法
    JavaScript計算兩個日期之間天數的方法
    How to Calculate the Difference Between Dates in JavascriptAs you attempt to determine the difference between two dates in Javascript, consider this s...
    程式設計 發佈於2025-04-29
  • 解決Spring Security 4.1及以上版本CORS問題指南
    解決Spring Security 4.1及以上版本CORS問題指南
    彈簧安全性cors filter:故障排除常見問題 在將Spring Security集成到現有項目中時,您可能會遇到與CORS相關的錯誤,如果像“訪問Control-allo-allow-Origin”之類的標頭,則無法設置在響應中。為了解決此問題,您可以實現自定義過濾器,例如代碼段中的MyFi...
    程式設計 發佈於2025-04-29

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3