API是什麼?程式之間的約定與「API串接」

約 11 分鐘 · 更新:2026年10月23日

API是一支程式向另一支程式說「請做這件事」「請給我這筆資料」時,事先約定好的請求方式。請求的一方就算不知道對方內部怎麼運作,只要照約定請求,就能拿到回答。天氣App的預報、商店網站上的地圖,也常常是透過API,從別家公司的服務送過來的。

這篇文章可以了解

  • API是「什麼和什麼之間的、什麼樣的約定」
  • 天氣App、地圖、「使用Google帳戶登入」背後發生的事
  • Web API的請求與回應的內容,以及JSON的讀法
  • API金鑰必須保密的理由,以及次數的限制
  • 工作上聽到的「API串接」是什麼意思,以及串接前要確認的事

先備知識:不需要。日本IT Passport等資訊考試會出現的用語,也會用平常的話說明。

生活中的例子

打開手機的天氣App,馬上就會出現所在地點的預報。不過,做這個App的公司,不一定自己在觀測天氣。它常常是向擁有氣象資料的公司的伺服器詢問:「請給我這個地點的預報。」伺服器是應要求提供資料的電腦。

同樣的事,也發生在其他地方。商店的網站上,有時嵌著Google地圖。登入畫面上,有時排著「使用Google帳戶登入」的按鈕。這些都是一支程式在請別家公司的程式做事。

這時,如果每個人的請求方式都不一樣,就麻煩了。要請求什麼、用什麼寫法請求、回答會以什麼形式回來?把這些事先決定並公開的約定,稱為API(應用程式介面)。它是Application Programming Interface的縮寫。

API是「請求方式」的約定

Interface(介面)是「接觸的地方」「接合處」的意思。也就是說,API是程式和程式接合處所用的約定。重點在於,它不是給人看著畫面操作的約定,而是給程式使用的約定。

約定裡主要寫著下面這些事。

  • 可以請求的工作名稱(例:「查詢預報」)
  • 請求時要附上的資訊(例:地點和日期)
  • 回答的形式(例:氣溫用數字,單位是℃)
  • 失敗時的回覆(例:「找不到這個地點」)

請求的一方不必知道對方怎麼計算預報,也能拿到回答。反過來,接受請求的一方只要不改變約定,就能重新打造內部的運作方式。請求的一方可以照常使用。

約定通常會整理成文件。這份文件稱為「規格書」或「API文件」。

天氣App用API這種固定的請求方式發出請求,並收到固定形式的回應。API後面的計算和資料庫,從外面看不到 天氣App 請求 回應 API(固定的請求方式) 內部的運作(從外面看不到) 預報的計算 資料庫 約定不變,內部就能重新打造
請求的一方只知道API這個「窗口」的用法。省略的部分:辨識使用者的鑰匙(後面說明的API金鑰)、途中的通訊、接受請求那一方內部的許多程式。

Web API:透過網際網路請求

像天氣或地圖這樣,向網際網路另一端的伺服器請求的API,稱為Web API。現在說到「API」,多半是指這種Web API。

大多數Web API,和瀏覽器開啟網頁時一樣,用HTTP這套規則交換資料。在HTTP中,請求的一方送出「請求(request)」,伺服器傳回「回應(response)」。HTTP本身在「HTTPS是什麼?」也有說明。

和網頁不同的地方,在於回應的內容。網頁會傳回給人閱讀的文字和圖片。Web API則傳回程式容易讀取的資料。

我們用一個虛構的天氣API,看看請求和回應的例子。對方的名稱「api.example.com」是保留給說明用的名稱,不是真實的服務。

向天氣API請求的例子(用GET要求東京的預報,並附上API金鑰),以及伺服器的回應(200 OK和JSON資料) 請求(請求方 → 伺服器) GET /forecast?city=tokyo HTTP/1.1 Host: api.example.com 對方的名稱 X-API-Key: (秘密金鑰) 是誰請求 回應(伺服器 → 請求方) HTTP/1.1 200 OK 200 = 成功 Content-Type: application/json { "city": "東京", "weather": "晴天", "high": 22 名稱與值的組合 }
這是虛構API的例子。傳送金鑰的欄位名稱和請求方式,每個服務都不一樣。省略的部分:其他許多欄位,以及HTTPS的加密。

請求第1行的「GET」,表示「想取得資料」這種請求的種類。這個種類稱為HTTP方法。接著的「/forecast?city=tokyo」是想請求的內容。這裡是在說「預報,關於東京」。

第2行的「Host」是對方伺服器的名稱。從名稱查出機器編號的運作方式,在「DNS是什麼?」中說明。第3行是表示誰在請求的金鑰(後面說明)。

回應第1行的「200」,是表示「成功了」的數字。這個3位數的數字稱為HTTP狀態碼。找不到要求的東西時是404,請求太多時是429,每種結果都有固定的編號。

設計Web API時,廣泛使用一種叫REST的想法。2000年,參與制定HTTP規格的羅伊·菲爾丁(Roy Fielding)在博士論文中為它命名。常見的做法是替每種處理對象(例如預報、訂單)各給一個位址,再用HTTP方法表示取得或刪除等操作。這樣的API稱為REST API。

JSON:程式容易讀取的資料形式

回應後半用「{ }」括起來的部分,是名為JSON的寫法。回應第2行的「application/json」,就是表示內容用這種寫法的記號。它用「:」把「名稱」和「值」連成一組,組和組之間用「,」隔開。名稱和文字的值用「" "」括起來,數字則直接寫。

把例子中的回應整理成表格,就是下面這樣。

名稱值意義
city"東京"地點(文字)
weather"晴天"天氣(文字)
high22最高氣溫(數字)

請注意,「22」沒有附上單位。是℃,還是美國使用的°F(華氏)?這不是寫在JSON裡,而是寫在API的規格書中。不讀規格書就使用,就會發生這種弄錯單位的事。

JSON的寫法,由2017年的規格RFC 8259所規定。它源自JavaScript這種程式語言的寫法,現在幾乎所有程式語言都能讀寫。

API金鑰:表示「是誰在請求」的鑰匙

很多Web API並不會無限制地接受任何人的請求。它們會替每個使用者或公司,發行一串猜不到的長字元。這稱為「API金鑰」。請求的一方每次請求時,都要附上這把金鑰。

收到金鑰的伺服器,會分辨請求來自哪個使用者。接著判斷這個使用者能不能使用該功能,並計算呼叫次數來決定費用。例如Apple的天氣API叫做WeatherKit。截至2026年10月,每月50萬次以內的呼叫,包含在開發者會員的費用中。

金鑰必須保密的理由,以及保護方法

因此,API金鑰要像密碼一樣保密。傳送時,要使用加密的HTTPS(「加密是什麼?」)。特別要小心的是,把金鑰直接寫在程式的檔案裡。一旦公開那支程式,金鑰也會跟著公開給全世界。

把金鑰放進手機App或網頁裡,也很危險。因為發出去的內容,使用者可以取出來檢查。秘密金鑰只能放在自家的伺服器上,由那台伺服器附上金鑰,再向對方請求。

實際上,外洩事件發生過很多次。保存和公開程式的代表性服務是GitHub。資安公司GitGuardian在2025年3月發表了一份報告。2024年在公開的GitHub上,找到的金鑰、密碼等機密資訊約有2,380萬件。

Google對API金鑰的處理方式,提出了下面這些注意事項。

  • 不要把金鑰放進App或網頁的程式裡,也不要放進存放程式的地方
  • 替每把金鑰限制可以使用的網站和功能
  • 刪除不再使用的金鑰
  • 定期把金鑰換成新的

不過,也有一些金鑰,本來就是設計成放在網頁裡、讓人看得到的。例如在商店網站上嵌入地圖用的金鑰,瀏覽網頁的人也看得到。這是另一種金鑰,要靠「只接受來自這家商店網站的請求」之類的限制來保護。金鑰能不能被看到,請以發行單位的說明為準。

次數的限制(速率限制)

很多Web API對一定時間內可以請求的次數設有上限。這稱為「速率限制」。目的是避免少數使用者占滿伺服器,讓其他人只能等待。它也能防止有錯誤的程式不斷重複請求,讓費用暴增。

例如GitHub的API,截至2026年10月,沒有表明身分的請求每小時最多60次。附上使用者的身分憑據再請求,每小時最多可以用到5,000次。

超過上限時,很多伺服器會傳回「429 Too Many Requests(請求太多)」的回應。這個編號是由2012年的規格RFC 6585所規定。回應裡有時還會附上「請在幾秒後再請求」的資訊。設計良好的App會照著做,隔一段時間再重新請求。

「使用Google帳戶登入」的背後

在其他網站「使用Google帳戶登入」時,你並沒有把Google的密碼交給那個網站。輸入密碼的畫面,是Google的畫面。網站收到的,是Google發行的「這個人確實是本人」的證明,裡面不含密碼。

這種做法以名為OAuth的規則為基礎。OAuth是一套不交出密碼,就能允許其他App「使用到這個範圍為止」的規則。2012年,現在的版本OAuth 2.0成為規格。

許可和證明,是用稱為「權杖(token)」的資料來傳遞。它有期限,能使用的範圍也有限,就像通行證一樣。就算外洩,造成的損害範圍和時間也比密碼小。

登入時使用的是OpenID Connect這套規則。它在OAuth 2.0上加入了傳達「是誰」的部分,Google的登入也遵循它。本人的證明,會以稱為「ID權杖」的權杖送達。

你在商店網站按下使用Google帳戶登入後,會被帶到Google的畫面,密碼只輸入給Google。Google再把本人的證明交給網站 你 商店網站 Google ① 按鈕 ② 引導 ③ 密碼 ④ 本人的證明 ⑤ 完成 只有Google看得到密碼
③的密碼不經過商店網站,直接送到Google。省略的部分:第一次使用時「是否同意提供資訊」的確認。實際的④,會先經由瀏覽器送來一張兌換券,再由網站向Google換成證明。

API不只用在Web上

API這個詞,在Web API普及之前很久就有人使用了。例如App想儲存檔案時,會向作業系統(OS)請求。作業系統是管理電腦或手機的零件,再借給App使用的基礎軟體。這種請求方式也是API,每種作業系統都不一樣(「作業系統(OS)是什麼?」)。

把常用的功能整理成零件的程式,稱為「函式庫」。例如畫圖表、計算日期之類的零件。函式庫也有API,規定要怎麼呼叫哪個零件。這是在同一台機器裡的呼叫,所以不經過網際網路。

種類請求的對象經過的路徑例子
作業系統的API作業系統同一台機器裡儲存檔案
函式庫的API零件的程式同一支程式裡計算日期
Web API別的伺服器網際網路取得天氣預報

工作上聽到的「API串接」是什麼

在公司裡,常會聽到「把這兩個系統用API串接起來」的說法。意思是讓不同的系統,透過API自動交換資料。這樣就不必由人從一邊的畫面匯出資料,再匯入另一邊。

例如會計軟體自動匯入銀行帳戶的收支明細。在日本,2017年5月通過、2018年6月施行的《銀行法》等修正,建立了這種串接的制度。銀行被要求努力建立體制,以API和記帳、會計服務的公司連接。

其他還有把網路商店的訂單自動通知物流公司等用法。這些都是把外部公司在雲端提供的服務,連接到自家系統的情況(「雲端運算是什麼?」)。

串接前要確認的事

  • 哪些資料、往哪個方向流動(如果包含個人資料,也要確認處理的規定)
  • 用誰的權限串接,是否只允許必要的範圍(最小權限原則)
  • 對方的API停止服務或約定改變時,會發生什麼事
  • 呼叫次數的上限和費用
  • API金鑰和權杖由誰、在哪裡保管

常見的誤解

誤解:API就是網路服務

實際上,API指的是「程式之間請求方式的約定」全體。作業系統和函式庫也有API。因為Web API越來越常見,用「API」來指「Web API」的情況變多,所以容易混淆。

誤解:用Google帳戶登入時,Google的密碼會交給那個網站

實際上,就像前面看到的,密碼只輸入在Google的畫面上,網站收到的是有期限的證明(權杖)。因為畫面切換只有一瞬間,很難意識到自己是在哪裡輸入。不過,也有顯示假登入畫面的網路釣魚。輸入前,請確認網址列的名稱是不是真正的Google(accounts.google.com)。

誤解:不小心公開的API金鑰,只要從檔案刪掉就沒事了

實際上,金鑰還會留在存放處的舊版本裡,以及已經複製走的人手上。基本做法是到發行單位讓金鑰失效,再重新建立。根據GitGuardian在2025年3月的報告,2022年外洩的機密約有70%,到那時仍然可以使用。從檔案表面上消失,看起來就像已經解決了。

從數字來看

項目數字時間、出處
提出REST2000年菲爾丁的博士論文
OAuth 2.0的規格2012年10月RFC 6749
「請求太多」(429)的規格2012年4月RFC 6585
JSON現行的規格2017年12月RFC 8259
HTTP語意現行的規格2022年6月RFC 9110
GitHub API的次數上限每小時60次(未表明身分)、5,000次(表明身分)2026年10月,GitHub
WeatherKit會員費用包含的呼叫次數每月50萬次2026年10月,Apple
在公開的GitHub上找到的機密資訊約2,380萬件2024年,GitGuardian(2025年3月的報告)
日本建立銀行API串接制度的修法2017年5月通過、2018年6月施行日本金融廳

規格會使用很久,但次數上限和費用常常因服務的狀況而改變。使用時,請確認提供者當時的說明。

進一步學習

接著閱讀

系列「網路與網際網路」的文章

  1. 網際網路怎麼傳送資料?封包與路由器的運作
  2. IP位址是什麼?網路地址的運作與IPv4、IPv6
  3. Wi-Fi是怎麼運作的?用電波傳送資料的方法與速度不同的原因
  4. HTTPS是什麼?鎖頭圖示能保護與不能保護的事
  5. DNS是什麼?從網域名稱查出IP位址的運作
  6. 5G是什麼?和4G有什麼不同?速度與延遲的原理
  7. TCP與UDP的差異是什麼?要確實送達,還是要速度
  8. 藍牙是什麼?無線耳機和智慧手錶連線的原理
  9. 物聯網(IoT)是什麼?物品連上網路的原理與注意事項
  10. 乙太網路是什麼?有線區域網路傳送資料的原理
  11. API是什麼?程式之間的約定與「API串接」
  12. 瀏覽器是怎麼運作的?從輸入網址到顯示網頁的過程

這個領域的題目: Web技術基礎

參考資料

入門解說一覽