天天看點

API 是什麼?一篇講透 API

作者:Eolink
API 是什麼?一篇講透 API

在我學習軟體開發之前,API 聽起來像是一種啤酒(IPA,印度淡色艾爾)。如今我經常使用這個術語,事實上最近我還嘗試在酒吧裡點了一個 API,結果酒保給了我一個:

404 資源未找到的回應

無論是在科技行業還是其他地方,我遇到很多人對這個相當普遍的術語有着模糊的了解。從技術上講,API 代表應用程式程式設計接口,大多數大公司都曾為客戶或内部使用建構過 API。但如何用簡單的語言來解釋 API 呢?除了開發和商業中使用的定義外,是否還有更廣泛的含義?首先,讓我們退後一步看看網絡本身是如何運作的。

1、網際網路和遠端伺服器

當我想到網絡時,我會想象一個由連接配接在一起的伺服器組成的龐大網絡。網際網路上的每個頁面都存儲在某個遠端伺服器上。遠端伺服器其實并不神秘——它隻是位于遠端計算機中的一部分,專門用于處理請求。

為了更好地了解這個概念,你可以在自己的筆記本電腦上啟動一個能夠将整個網站提供給網際網路使用的伺服器(事實上,在将網站釋出給公衆之前,工程師們就是使用本地伺服器進行開發)。

當你在浏覽器中輸入 www.baidu.com 時,一個請求被發送到 Baidu 的遠端伺服器。一旦你的浏覽器收到響應後,它會解析代碼并顯示頁面。對于浏覽器(也稱為用戶端)來說,Baidu 的伺服器就是一個 API。這意味着每次通路 Web 上的頁面時,您都與某個遠端伺服器的 API 進行互動。

API 并不等同于遠端伺服器——而是指接收請求和發送響應的那部分。

API 是什麼?一篇講透 API

2、将 API 作為服務客戶的途徑

您可能聽說過公司将 API 打包成産品,例如,Weather Underground 出售其天氣資料 API 的通路權限。示例場景:

您的小型企業網站上有一個用于給客戶預約的表單,您希望讓客戶能夠自動在 Google 月曆中建立一個包含該預約詳細資訊的事件。

API 使用:想法是讓您網站的伺服器直接與谷歌伺服器進行通信,請求建立具有給定詳細資訊的事件。然後,您的伺服器會收到谷歌發回來、處理它并向浏覽器發送相關資訊(如使用者确認消息)。或者,你可以直接通過你自己伺服器向谷歌伺服器發送 API 請求。

這個 Google 月曆 API 與其他遠端伺服器 API 的差別是什麼?

從技術角度看, 差別在于請求和響應格式。 要呈現整個網頁,浏覽器需要 HTML 格式響應, 其中包含表示代碼;而 Google 月曆 ****API 調用隻傳回資料——可能以 JSON 格式傳回。

如果你們網站服務端正在發起 API 請求,則意味着你們網站服務端就是用戶端(類似于當你使用浏覽器導航至某個網站時,浏覽器就變成了用戶端)。

從使用者角度來看,API 允許他們在不離開您的網站的情況下完成操作,大多數現代網站都使用了一些第三方 API。而且,許多問題已經有了第三方解決方案,無論是以庫還是服務的形式。通常使用現有解決方案更容易、更可靠。開發團隊将他們的應用程式分成多個通過 API 互相通信的伺服器并不罕見。為主應用程式伺服器執行輔助功能的伺服器通常被稱為微服務。

總之,當公司向客戶提供 API 時,這意味着他們建構了一組專用 URL,傳回純資料響應——也就是說響應中不會包含像圖形使用者界面(如網站)那樣具有表現性負擔的内容。你可以用浏覽器發起這些請求嗎?往往可以。由于實際 HTTP 傳輸以文本進行, 浏覽器會盡最大可能顯示響應。

例如,你甚至可以在沒有通路令牌情況下直接通過浏覽器通路 GitHub API,當您在浏覽器中通路 GitHub 使用者 API

{
  "login": "petrgazarov",
  "id": 5581195,
  "avatar_url": "https://avatars.githubusercontent.com/u/5581195?v=3",
  "gravatar_id": "",
  "url": "https://api.github.com/users/petrgazarov",
  "html_url": "https://github.com/petrgazarov",
  "followers_url": "https://api.github.com/users/petrgazarov/followers",
  "following_url": "https://api.github.com/users/petrgazarov/following{/other_user}",
  "gists_url": "https://api.github.com/users/petrgazarov/gists{/gist_id}",
  "starred_url": "https://api.github.com/users/petrgazarov/starred{/owner}{/repo}",
  "subscriptions_url": "https://api.github.com/users/petrgazarov/subscriptions",
  "organizations_url": "https://api.github.com/users/petrgazarov/orgs",
  "repos_url": "https://api.github.com/users/petrgazarov/repos",
  "events_url": "https://api.github.com/users/petrgazarov/events{/privacy}",
  "received_events_url": "https://api.github.com/users/petrgazarov/received_events",
  "type": "User",
  "site_admin": false,
  "name": "Petr Gazarov",
  "company": "PolicyGenius",
  "blog": "http://petrgazarov.com/",
  "location": "NYC",
  "email": "[email protected]",
  "hireable": null,
  "bio": null,
  "public_repos": 23,
  "public_gists": 0,
  "followers": 7,
  "following": 14,
  "created_at": "2013-10-01T00:33:23Z",
  "updated_at": "2016-08-02T05:44:01Z"
}
           

浏覽器很好地顯示了一個 JSON 響應,像這樣的 JSON 已經可以在您的代碼中使用了。從這段文字中提取資料非常容易,然後您可以随意處理這些資料。

3、A 代表“應用程式”

在結束之前,讓我們再舉幾個 API 的例子。“應用程式”可以指很多東西。以下是 API 語境中的一些示例:

  • 具有明确功能的軟體。
  • 整個伺服器、整個應用程式或僅僅是一個小部分的應用程式。

基本上任何可以從其環境中明确區分出來的軟體都可以成為 API 中的“A”,并且可能也會有某種類型的 API。 假設您在代碼中使用了第三方庫,一旦合并到您的代碼中,庫就成為了您整體應用程式的一部分。作為一個獨特的軟體,該庫可能具有允許與您其他代碼互動操作所需 API。

另一個例子:在面向對象設計(Object Oriented Design)中,代碼被組織成對象。你們可能擁有數百個已定義好可互相互動操作對象。每個對象都具備 API —— 一套公共方法和屬性供它與你們其他對象進行互動操作。此外, 對象内部邏輯也可能設定私密性質, 這意味着它對外界範圍隐藏起來(不屬于 API)。

通過我們所涵蓋内容, 希望大家能夠更深入了解 API 的廣義概念以及現今常見術語運用方式。

Eolink Apikit(https://www.eolink.com/apikit) -跨平台(Windows、Mac、Linux、Browsers...)的 API 開發測試工具,支援 REST、Websocket、gRPC、TCP、UDP、SOAP等協定,結合 API 設計、文檔管理、自動化測試、監控、研發管理和團隊協作的一站式 API 生産平台。

初創團隊免費申請通道:https://easy-open-link.feishu.cn/share/base/form/shrcnpMe5dWtOkq2GoRWQ97oLlc

API 是什麼?一篇講透 API