1. 程式人生 > >如何理解API,API 是如何工作的

如何理解API,API 是如何工作的

負責 一般來說 開開 百度 地圖 format 定義 成了 AMM

閱讀本文大概需要 5~6 分鐘

大家可能最近經常聽到 API 這個概念,那什麽是API,它又有什麽特點和好處呢?

wiki 百科鎮樓

…[APIs are] a set of subroutine definitions, protocols, and tools for building application software. In general terms, it’s a set of clearly defined methods of communication between various software components.

翻譯:API 是用於構建應用程序軟件的一組子程序定義,協議和工具。一般來說,這是一套明確定義的各種軟件組件之間的通信方法。(回來再看(。???)ノ)。

本篇文章中,我會用淺顯的比喻來解釋API,接口(interface),協議(protocol)這些基本概念。enjoy it ! 

假設你有一個銀行


技術分享圖片
你有一個倉庫來存錢,一個記賬本來記各種業務。一個簡單的管理銀行的方法是直接將權限給所有人,讓客戶自己動手完成各種業務。

這種模式下,一個客戶想要存錢的話,他需要:

  1. 拿著錢去銀行
  2. 打開倉庫把錢放進去
  3. 把這筆業務寫到記帳本上
  4. 離開銀行

顯然這存在著問題:

  1. 想開開倉庫門需要廢很大力氣,並不是所有的人都能打開,還有些人不識字不會記賬。
  2. 在這個模式下,我們假定所有人都是誠實的,顯然這並不成立。(說不定哪一個人存了100塊錢記賬的時候寫了10000塊)。

這時你遇到麻煩了。

雇一個櫃員


要是我們雇一個體格棒,辦事還麻利的人來處理開倉庫,記賬的問題呢?

小娜登場了。

現在模式為:建一個櫃臺將倉庫和記賬本和顧客分開,這樣顧客就不需要再去管倉庫和記賬本了。想存錢的話直接找小娜就行。

技術分享圖片

這種模式下,要是有人想存錢,他們必須:

  1. 拿錢去銀行
  2. 告訴小娜我是 MMM 我想要存¥¥¥。
  3. 小娜打開倉庫把錢放進去
  4. 小娜把業務(transaction )記錄好
  5. 告訴你業務辦好了
  6. 顧客離開銀行

現在不會發生打不開倉庫門或者是記錯賬的情況了,你覺得很滿意。

到此我們引出今天的主角API( Application Programming Interface),它能夠幫你實現輕松的和其他軟件組件(如服務器,操作系統等)的交互。

在上面舉的例子中,我們雇一個收納員幫顧客解決了開倉門,放錢,記賬這一系列繁瑣的過程。這大大節省了顧客的時間,同時提高了銀行的效率。同理,如果我們將操作的具體實施步驟抽象化,這將會大大降低開發人員的負擔(去記憶所有的步驟花費的力氣),從而大大提高了效率。

另外的好處是,只要他們遵循了同一個協議,組件可以交換或者是改變。銀行不需要知道時哪一個顧客或者說顧客是怎麽進來的,顧客也不需要知道銀行拿自己的錢去做什麽了。只要負責的櫃員在這裏並做好工作,整個流程將會繼續工作。

API 應用範圍很廣:從操作系統中簡單的 fork() 到我們接觸的百度地圖API,和風天氣API,又或者是邢遠分享的段子,這些 API 都大大簡化了程序員的工作。

銀行裏有什麽


技術分享圖片

你可能已經註意到了銀行分成了兩個區域:顧客在前臺排好隊來辦理業務,後臺完成各種對錢的操作。在中間層,前臺和後臺發生了交互, 雙方都不能越界 ,交互只能發生在中間的區域。

在 API 術語裏面,我們管中間的這塊區域叫做接口 Interface ;在這裏各個部分發生交互。在我們的銀行中,前臺和後臺都同意並且規定使用 Interface 來交換信息。

現在,我們假定 Bob 想要取錢。他到了櫃臺找到了小娜,小娜知道該怎樣去取錢,她取好了之後告訴了 Bob。

技術分享圖片

Bob 這時候又問:“你知道今天的股票行情嗎”

小娜:????WTF ?

在這個例子裏面,小娜知道怎樣取錢和存錢 , 但是她不知道如何去給Bob查查今天的股票行情是怎樣的。這個例子引出了另一個概念 協議(Protocol)。

在 API 術語中,協議 是規定了各部分之間如何進行交流的一系列規則的集合。各部分之間想要完成交互必須理解並且遵守同一個協議。

同時,我們註意到了交換時用的是中文。如果Bob 對小娜說「我想撳五百蚊出嚟呀唔該」,小娜不懂廣東話,所以沒法理解Bob說的是什麽,這又引出了另一個概念 格式(Format)

在程序員的世界裏,通用的格式包含 XMLJSON

最後,讓我們假設銀行想要擴展業務到股市,這時候就需要一位特殊的接待員來處理與股票相關的業務了,這時,小冰就登場啦。
技術分享圖片

在 API 術語裏面, API 端點 通常是指在同一個接口中提供特定功能子集的服務提供者。在這種情況下,小冰和小娜都是端點。(小冰和小娜是同一個櫃臺不同功能的提供者)不同的端點可以有不同的協議和不同的格式。

總結起來:接口是不同組件進行交互的地方。協議是一系列規定了他們之間怎樣進行交互的規則。格式定義了他們通過什麽進行交流(JSON或者是XML),端點可以在同一個接口裏面提供不同的功能。

櫃員還能幹什麽?


到現在我們把 API 的基礎知識過了一遍,接下來我們再來談一談 API 的其他特征。w(?Д?)w

現在又有客戶來取錢了,他想要取¥10000。
技術分享圖片

首先,我們可以指示小娜在操作前先去確認一下 Bob 是否真的有這麽多錢。(API 能確認所有的操作都是合法的。

小娜查到 Bob 賬戶裏只有一百塊了,告訴 Bob 余額不足。(在發生錯誤的時候 API 會根據錯誤報告機制發出指示,減輕開發人員的負擔。

Bob 認為肯定是哪裏出錯了,他要求銀行給他列一張表,給出他所擁有的每個賬戶上的余額。結果顯示一共有 200 個賬戶。把他們一下子全給列出來不太實際,所以小娜每次給 Bob 看十個賬戶,看完了之後再來十個。(這叫做分頁(pagination),可以節省帶寬和服務器資源,因為你不需要一次獲取數據集中的所有內容。

如果 Bob 只想要知道他某一個賬戶中的余額的話,他可以要求小娜只給她看那個的(這稱為過濾(filtering),它還有助於節省帶寬和資源,並且更易於導航。

在檢查完所有賬戶之後,鮑勃現在知道他的帳戶中確實沒有10000美元。他知道愛麗絲購買股票並獲得了大量資金,於是偽裝成愛麗絲並重新進入銀行。他告訴莎莉:“我是愛麗絲,我想從我的賬戶中提取10000美元。” 小娜識破了他的騙局。(API中內置授權和訪問控制,以確保只有授權人員才能訪問特定數據。

最後,在試圖從銀行拿到10000美元失敗後,他想報復小娜,他進入銀行並多次從賬戶中提取0.01美元。 (我們可以實施速率限制來控制服務器資源的使用,以確保用戶不會濫用服務。

API 通常都會被設計具有這些功能,它可以充當防火墻,在保護您的資源免受濫用的同時允許合法請求通過。

再讀Wiki


…[APIs are] a set of subroutine definitions, protocols, and tools for building application software. In general terms, it’s a set of clearly defined methods of communication between various software components.

API 是用於構建應用程序軟件的一組子程序定義,協議和工具。一般來說,這是一套明確定義的各種軟件組件之間的通信方法。

現在是不是頭腦裏對這個概念清晰多了呢。

如何理解API,API 是如何工作的