API(Application Programming Interface)有點類似于肯德基汽車穿梭窗口。但在代碼中,它們接受輸入并提供可預測的輸出。
在其核心,API是一組接受輸入并給出輸出的代碼
大多數現代應用程序(如Excel)都是一堆API組成的
有時,公司會公開他們的部分API,比如Twitter或谷歌地圖
API是軟件中比較令人困惑的概念之一,因為它們可以代表很多不同的東西
API為大多數現代軟件開發提供了強大的功能,且是可以聰明地討論代碼的關鍵部分。
什么是API(理論上)?
如果你想理解API,需要進行一個重要的區分:一個是API的技術定義,然后是人們在對話中如何實際使用這個概念。它們非常不同,這就是為什么這些東西會讓人很困惑。讓我們先來解決技術定義。
API是一組接受特定輸入并給出特定輸出的邏輯。幾個例子:
如果向谷歌地圖API提供一個地址作為輸入,它的輸出是該地址的經緯度坐標
如果給Javascript Array.Sort API一個數組作為輸入,它將這些數字作為輸出進行排序
如果你給Lyft Driver API一個起始地址和結束地址作為輸入,它會找到最匹配的司機作為輸出
當工程師構建代碼模塊來做特定的事情時,他們清楚地定義了這些模塊的輸入和輸出:這就是API的真正含義。當你給一個API一堆輸入來獲得你想要的輸出時,它被稱為調用API。 輸入 API通常會確切地告訴你它需要什么樣的輸入。如果你嘗試用你的名字作為谷歌地圖API的輸入,那不會有什么效果;它被設計用來完成一個非常特定的任務(將地址轉換為坐標),因此它只處理非常特定類型的數據。有些API在輸入方面非常麻煩,并可能要求你以特定的方式格式化該地址。 輸出 就像輸入一樣,API給你特定的輸出。假設你為谷歌地圖API提供了正確的輸入(一個地址),它將始終以完全相同的格式給你回饋坐標。還有非常具體的錯誤處理:如果API不能找到你輸入的地址的坐標,它會告訴你確切的原因。 這些都是技術和理論上的東西。 那些應用只是API的集合 關于現代軟件,最值得理解的一點是,你最喜歡的那些應用只是一堆API,上面有一個漂亮的界面,稱為前端。你使用的大多數應用都是建立在這種前端/后端范例之上的。 后端 公司從為用戶在應用中需要做的所有重要事情構建API開始。對于Gmail,Google從接收、顯示、發送和轉發郵件的API開始;但這些都是通過代碼調用的。這些API以及使用它們的時間和方式的邏輯是應用的后端。就像汽車引擎蓋下正在發生的事。如果你聽說過后端工程師,那就是主要處理這些內部組件的開發者。 前端 所有這些后端API只能通過代碼來使用,這并不是你想在iPhone上查看電子郵件時遇到的情況。這就是為什么公司要為他們的應用創建前端:圖形用戶界面使應用美觀且可用,而不需要編寫代碼。下面是Gmail中的工作方式:
你的收件箱顯示一排排的電子郵件和主題行:前端將這些后端的電子郵件數據進行了很好的格式化處理
你可以點擊星形圖標來標記一封郵件:在后端,這將觸發一個“標記郵件”的API
前端的大多數交互都被轉換成后端的API調用,這就是應用軟件101。一旦我開始理解這個模型,就更容易理解開發者如何在對話中實際使用“API”的方式了。
什么是API(實際上)?
實際上,我發現人們在三種不同的場景中使用“API”,它們都代表著不同的東西。但從理論上講,它們都是一樣的,符合我們之前的定義。它們都是一樣的,但又有所不同。
公司內部API
當公司構建他們的應用時,他們把它們設計成一組交互的API。最容易理解的例子是Lyft(或者Uber)。你可能想在Lyft應用中做一些事情,它們在幕后都會觸發不同的API。
這種模式幾乎適用于你使用的所有應用:你在應用中采取的操作將觸發公司內部API,這些API實際上完成了讓你的請求得到滿足的工作。公司內部API也是分層的:雖然可能有一個廣泛的“預約乘車”API,但在這個“引擎蓋”下有一堆較小的API來完成它:查找司機、預約司機、驗證信用卡、與用戶溝通等。
公共API
Lyft的API都不是公開的:它們只是Lyft在后端為你提供服務的方式。但有時,公司會提供一些他們的API,并告訴你如何使用它們。Twitter的API就是一個很好的例子。
通常,你使用Twitter應用,它會對Twitter內部API進行一些API調用,比如顯示提要、發送回復和搜索(這就是我們剛剛談到的:前端和后端)。但你也可以在Twitter應用之外通過代碼調用這些API。例如,有一個抓取用戶時間軸的API,你可以使用它來查看用戶的時間軸(他們的推文),該API以JSON格式返回那些推文,這是一種特殊的文本格式。
這些公共API讓人們在Twitter上構建應用。有一些非常基本的東西,比如筆者做的這個學校項目,收集關于紐約大學的推文,分析他們的情緒,但也有一些相當高級的東西,比如Flock,它可以讓你搜索你的訂閱者。
代碼接口
我們剛剛看到的前兩類API都是功能性的,它們通常完成一些實用且容易理解的事情,比如提供坐標或預訂乘車。但是開發者也使用“API”來指代更底層級別的輸入和輸出,比如代碼中的函數。
Javascript的array.sort()方法就是一個很好的例子。它是一個接受數字或字母列表作為輸入的API,然后對它們進行排序,并將它們作為輸出返回給你。還有其他與數組相關的API,比如添加(array.push)和移除(array.pop)東西,過濾(array.filter),以及獲取數組的大小(array.length)。當你用Javascript的時候,你會用到這些。
因此,當人們談論API時,我們并不總是清楚人們到底在談論什么,特別是因為開發者用這個詞指代很多不同的東西。如果你感到困惑,就直接問。答案很可能屬于這三類。
編輯:黃飛
-
API
+關注
關注
2文章
1510瀏覽量
62396
原文標題:API到底指的是什么?
文章出處:【微信號:Astroys,微信公眾號:Astroys】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論