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的訪問許可權給其他人。
示例場景:你是一家小企業,公司網站上有一個表格是用來給客戶註冊預約的。你想要憑藉這些預約細節資訊,讓客戶能夠自動在谷歌日程上建立活動。
API使用:這就意味著,你的網站伺服器需要直接與谷歌伺服器進行對話,在掌握既定細節資訊的情況下,申請建立活動。之後,你的伺服器就會接收到谷歌的響應並進行處理,然後將相關資訊傳送回瀏覽器,比如說向用戶傳送一個確認資訊。
此外,你的瀏覽器通常可以繞過自己的伺服器,直接向谷歌伺服器傳送API請求。
那麼谷歌日曆的API與其他遠端伺服器的API存在什麼區別呢?
從技術角度來說,不同之處在於請求和響應的形式。
為了提交整個頁面,你的瀏覽器會期待得到HTML格式的響應,這就包括顯示程式碼。而谷歌日曆的API只會返回一些資料——大多是與JSON格式相同。
如果你的網站瀏覽器發出了API請求,之後網站伺服器就成為了客戶端(當你使用瀏覽器訪問某一網站的時候,你的瀏覽器也相當於是一個客戶端)。
從使用者角度來說,API可以讓他們無需離開網站就能完成原先的操作。
現今大多數網站至少都會使用一些第三方API。
存在的問題都有了第三方解決方案,但是是以庫或服務的形式。使用現有的解決方案已經變得更加方便且可靠了。
開發團隊將自己的應用分解到多個可以透過API進行互通的伺服器上,這已經是司空見慣的做法了。這些為主應用伺服器提供輔助功能的伺服器通常被稱作是微服務架構。
總結一下,當一家公司為客戶提供API的時候,這僅僅意味著它們建立了一組專用的URL通道,用來返回純資料響應——也就是說,響應內容不會包含圖形使用者介面(例如網站)中的顯示開銷。
你能夠用自己的瀏覽器傳送這種請求嗎?通常都是可以的。由於實際的HTTP傳輸都是以文字的形式進行的,你的瀏覽器可以一直達到顯示響應的最佳狀態。
舉個例子,你可以直接透過瀏覽器訪問GitHub的API,而無需訪問令牌。如下是你在瀏覽器中訪問GitHub使用者API路徑時得到的JSON響應:
瀏覽器似乎可以很好地顯示出JSON響應結果。像這樣的JSON響應,你就可以直接用在程式碼中了。從這些文字中,你很容易可以提取出資料,之後你就可以基於這些資料做自己想要做的事情了。
A指的是“應用”(Application)
作為結束,我就再給出幾個API的例項吧。
“應用”(Application)可以指代很多事物。如下是它在API語境下的含義:
API:
1. 一個提供特定功能的軟體
2. 整個伺服器、整個應用或一款應用的很小一部分
從本質上來說,任何能從自身環境中分離出來的軟體都可以成為API中的“A”,且很可能它本身也是某種API。就這麼說吧,你在程式碼中使用的是第三方庫。一旦該庫與你的程式碼整合在了一起,那麼這個庫也就成為了整體應用的一部分。作為軟體中特殊的一部分,庫很有可能也擁有一個API,使其與剩餘程式碼進行互動。
還有一個例子:在Object Oriented Design(面向物件程式設計)中,程式碼被編成了物件。你的應用程式也許擁有數百個能夠實現互動的物件。
每一個物件都有一個API——這是一組公共方法和屬性,物件可以用它來與應用中的其他物件進行互動。
物件也許還擁有私有的內部邏輯,這就意味著它在躲避外界環境(那它也就不是一個API)。
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的訪問許可權給其他人。
示例場景:你是一家小企業,公司網站上有一個表格是用來給客戶註冊預約的。你想要憑藉這些預約細節資訊,讓客戶能夠自動在谷歌日程上建立活動。
API使用:這就意味著,你的網站伺服器需要直接與谷歌伺服器進行對話,在掌握既定細節資訊的情況下,申請建立活動。之後,你的伺服器就會接收到谷歌的響應並進行處理,然後將相關資訊傳送回瀏覽器,比如說向用戶傳送一個確認資訊。
此外,你的瀏覽器通常可以繞過自己的伺服器,直接向谷歌伺服器傳送API請求。
那麼谷歌日曆的API與其他遠端伺服器的API存在什麼區別呢?
從技術角度來說,不同之處在於請求和響應的形式。
為了提交整個頁面,你的瀏覽器會期待得到HTML格式的響應,這就包括顯示程式碼。而谷歌日曆的API只會返回一些資料——大多是與JSON格式相同。
如果你的網站瀏覽器發出了API請求,之後網站伺服器就成為了客戶端(當你使用瀏覽器訪問某一網站的時候,你的瀏覽器也相當於是一個客戶端)。
從使用者角度來說,API可以讓他們無需離開網站就能完成原先的操作。
現今大多數網站至少都會使用一些第三方API。
存在的問題都有了第三方解決方案,但是是以庫或服務的形式。使用現有的解決方案已經變得更加方便且可靠了。
開發團隊將自己的應用分解到多個可以透過API進行互通的伺服器上,這已經是司空見慣的做法了。這些為主應用伺服器提供輔助功能的伺服器通常被稱作是微服務架構。
總結一下,當一家公司為客戶提供API的時候,這僅僅意味著它們建立了一組專用的URL通道,用來返回純資料響應——也就是說,響應內容不會包含圖形使用者介面(例如網站)中的顯示開銷。
你能夠用自己的瀏覽器傳送這種請求嗎?通常都是可以的。由於實際的HTTP傳輸都是以文字的形式進行的,你的瀏覽器可以一直達到顯示響應的最佳狀態。
舉個例子,你可以直接透過瀏覽器訪問GitHub的API,而無需訪問令牌。如下是你在瀏覽器中訪問GitHub使用者API路徑時得到的JSON響應:
瀏覽器似乎可以很好地顯示出JSON響應結果。像這樣的JSON響應,你就可以直接用在程式碼中了。從這些文字中,你很容易可以提取出資料,之後你就可以基於這些資料做自己想要做的事情了。
A指的是“應用”(Application)
作為結束,我就再給出幾個API的例項吧。
“應用”(Application)可以指代很多事物。如下是它在API語境下的含義:
API:
1. 一個提供特定功能的軟體
2. 整個伺服器、整個應用或一款應用的很小一部分
從本質上來說,任何能從自身環境中分離出來的軟體都可以成為API中的“A”,且很可能它本身也是某種API。就這麼說吧,你在程式碼中使用的是第三方庫。一旦該庫與你的程式碼整合在了一起,那麼這個庫也就成為了整體應用的一部分。作為軟體中特殊的一部分,庫很有可能也擁有一個API,使其與剩餘程式碼進行互動。
還有一個例子:在Object Oriented Design(面向物件程式設計)中,程式碼被編成了物件。你的應用程式也許擁有數百個能夠實現互動的物件。
每一個物件都有一個API——這是一組公共方法和屬性,物件可以用它來與應用中的其他物件進行互動。
物件也許還擁有私有的內部邏輯,這就意味著它在躲避外界環境(那它也就不是一個API)。