到底什麼是 API(應用程序編程介面)?

何為API?如果你在Google上搜索,你會得到如下結果:API(Application Programming Interface,應用程序編程介面)是一些預先定義的函數,目的是提供應用程序與開發人員基於某軟體或硬體得以訪問一組常式的能力,而又無需訪問源碼,或理解內部工作機制的細節。那麼再通俗一點來說,API究竟是什麼呢?


在我學習軟體開發之前,API聽起來似乎像是一種啤酒。

而現在,我開始頻繁使用這一術語,以至於我在酒吧里都想點一杯API來喝喝看了。

酒保發送的響應是:「查無此酒」——404:找不到該資源。

我碰見過很多人,有科技圈內的,也有圈外的。對於API這樣一個常見術語的含義,他們的理解都存在些許偏差或不確定的成分。

從技術角度來說,API指的是應用程序編程介面。大多數大型企業都會為自己的客戶建立應用程序編程介面,或供內部使用。

但是你該如何用大白話來解釋API這個術語呢?除了在開發和業務中的含義,API是不是有更寬泛的含義呢?首先,讓我們退後一步,來了解一下網際網路究竟是如何工作的。

WWW和遠程服務器

當我想到網際網路的時候,我的腦海中浮現出了一個由互聯服務器構成的大型網路。

網際網路上的每一個介面都被存儲在一個遠程服務器裡。遠程服務器也沒有大家想的那麼神秘——它不過是用來優化處理需求的遠程計算機罷了。

為了正確了解API,你可以在自己的筆記本電腦上啟動一個能面向網路提供整個網站服務的服務器(事實上,在網站正式上線之前,工程師們就是通過本地服務器來開發網站的)。

當你在瀏覽器中輸入www.facebook.com,一則請求會出現在Facebook的遠程服務器上。一旦你的瀏覽器收到了響應,它就會解析代碼、呈現出網頁。

對於瀏覽器來說(這也是所謂的客戶端),Facebook的服務器就是一個應用程序編程介面。這意味著每當你在網際網路上訪問一個頁面的時候,你都在與某個遠程服務器的API發生交互。

API並不完全等同於遠程服務器——它其實是服務器的一部分,負責接收請求並發送響應。

API是一種為客戶提供服務的方式

你也許聽說過有公司將API包裝成產品。舉個例子,Weather Underground就會出售其天氣數據API的訪問權限給其他人。

示例場景:你是一家小企業,公司網站上有一個表格是用來給客戶註冊預約的。你想要憑藉這些預約細節訊息,讓客戶能夠自動在Google日程上創建活動。

API使用:這就意味著,你的網站服務器需要直接與穀歌服務器進行對話,在掌握既定細節訊息的情況下,申請創建活動。之後,你的服務器就會接收到Google的響應並進行處理,然後將相關訊息發送回瀏覽器,比如說向用戶發送一個確認訊息。

此外,你的瀏覽器通常可以繞過自己的服務器,直接向Google服務器發送API請求。

那麼Google日曆的API與其他遠程服務器的API存在什麼區別呢?

從技術角度來說,不同之處在於請求和響應的形式。

為了提交整個頁面,你的瀏覽器會期待得到HTML格式的響應,這就包括顯示代碼。而Google日曆的API只會返回一些數據——大多是與JSON格式相同。

如果你的網站瀏覽器發出了API請求,之後網站服務器就成為了客戶端(當你使用瀏覽器訪問某一網站的時候,你的瀏覽器也相當於是一個客戶端)。

從用戶角度來說,API可以讓他們無需離開網站就能完成原先的操作。

現今大多數網站至少都會使用一些第三方API。

存在的問題都有了第三方解決方案,但是是以庫或服務的形式。使用現有的解決方案已經變得更加方便且可靠了。

開發團隊將自己的應用分解到多個可以通過API進行互通的服務器上,這已經是司空見慣的做法了。這些為主應用服務器提供輔助功能的服務器通常被稱作是微服務架構。

總結一下,當一家公司為客戶提供API的時候,這僅僅意味著它們建立了一組專用的URL通道,用來返回純數據響應——也就是說,響應內容不會包含圖形用戶介面(例如網站)中的顯示開銷。

你能夠用自己的瀏覽器發送這種請求嗎?通常都是可以的。由於實際的HTTP傳輸都是以文本的形式進行的,你的瀏覽器可以一直達到顯示響應的最佳狀態。

舉個例子,你可以直接通過瀏覽器訪問GitHub的API,而無需訪問令牌。如下是你在瀏覽器中訪問GitHub用戶API路徑時得到的JSON響應https://api.github.com/users/petrgazarov


瀏覽器似乎可以很好地顯示出JSON響應結果。像這樣的JSON響應,你就可以直接用在代碼中了。從這些文本中,你很容易可以提取出數據,之後你就可以基於這些數據做自己想要做的事情了。

A指的是「應用」(Application)
作為結束,我就再給出幾個API的實例吧。

「應用」(Application)可以指代很多事物。如下是它在API語境下的含義:

API:

  1. 一個提供特定功能的軟體
  2. 整個伺服器、整個應用或一款應用的很小一部分

從本質上來說,任何能從自身環境中分離出來的軟體都可以成為API中的「A」,且很可能它本身也是某種API。就這麼說吧,你在代碼中使用的是第三方庫。一旦該庫與你的代碼整合在了一起,那麼這個庫也就成為了整體應用的一部分。作為軟體中特殊的一部分,庫很有可能也擁有一個API,使其與剩餘代碼進行交互。

還有一個例子:在Object Oriented Design(面向對象編程)中,代碼被編成了對象。你的應用程序也許擁有數百個能夠實現交互的對象。

每一個對像都有一個API——這是一組公共方法和屬性,對象可以用它來與應用中的其他對象進行交互。

對像也許還擁有私有的內部邏輯,這就意味著它在躲避外界環境(那它也就不是一個API)。

從上述討論的內容來看,我希望你能掌握API的廣義,也能了解現今這一術語的常見含義。

怎樣擁有「富人思維」?

印度初創公司 Milkbasket,靠什麼在雜貨電商領域脫穎而出?