做個 side project 想要天氣資料、匯率、電影資訊,或者上課示範需要一個能立刻呼叫的 API,第一個該打開的頁面幾乎都是同一個:GitHub 上的 public-apis。它是全 GitHub 最多星的專案之一(46.7 萬星、5.1 萬 fork),內容卻出乎意料地簡單,就是一份人工維護的免費 API 目錄,MIT 授權,按 50 個分類整理了約 1,760 個可以免費使用的公開 API。
不過「就是一份清單」不代表不需要說明書。這份手冊講三件事:怎麼正確地讀這份清單(欄位的意思比想像中重要)、怎麼從一千七百多個選項裡挑到能用的那一個,以及挑到之後怎麼實際串起來、會踩到哪些坑。
一、這個專案是什麼(以及不是什麼)
public-apis 是一份由社群人工審核維護的 Markdown 清單,每一列登錄一個免費(或有免費額度)的公開 API,附上簡介、認證方式、是否支援 HTTPS 與 CORS。專案從 2016 年累積至今,維護節奏穩定,本文撰寫當天都還有新的 API 被合併進去。
先講清楚它「不是什麼」,可以省掉很多誤會:
- 它不是 API 服務商。清單裡每個 API 都由各自的提供者營運,額度、條款、穩定度都跟 public-apis 專案無關。
- 它不是品質保證。收錄門檻是格式與基本審核,不代表每個 API 都穩定、文件齊全或適合正式產品。
- 它不全是「完全免費」。不少項目是商業服務的免費層,超額要付費,商用前要看各家條款。
二、先學會讀清單:五個欄位的意思
每個分類下是一張五欄的表格。欄位看起來簡單,但 Auth 和 CORS 兩欄直接決定你「能不能用、怎麼用」,值得花兩分鐘搞懂:
| 欄位 | 可能的值 | 對你的意義 |
|---|---|---|
| API | 名稱+連結 | 點進去是官方文件或申請頁 |
| Description | 一句話簡介 | 判斷資料範圍的第一線索,詳細能力還是要看文件 |
| Auth | No / apiKey / OAuth / User-Agent | No 代表拿了網址就能呼叫;apiKey 要先註冊拿金鑰;OAuth 要走授權流程,通常是要存取「使用者自己的資料」;User-Agent 只要求帶識別標頭 |
| HTTPS | Yes / No | 標 No 的基本上可以直接跳過:你的網站是 HTTPS 時,瀏覽器會擋掉對 HTTP 的請求(mixed content) |
| CORS | Yes / No / Unknown | 決定「能不能從瀏覽器前端直接呼叫」。Yes 可以;No 只能從你的後端呼叫;Unknown 要自己測(實務上大多數標 Unknown) |
三、五十個分類導覽
50 個分類按字母排序,從 Animals 到 Weather。依實際開發的使用頻率,值得先認識的幾群:
| 需求 | 對應分類 | 常見用途 |
|---|---|---|
| 練習與測試 | Test Data、Development、Games & Comics | 假資料、佔位圖片、教學示範(PokeAPI 這類經典入門 API 都在這) |
| 金融數據 | Currency Exchange、Cryptocurrency、Finance | 匯率換算、幣價、股市資料 |
| 地理與天氣 | Geocoding、Weather、Environment | 地址轉座標、天氣預報、空氣品質 |
| 內容娛樂 | News、Music、Video、Books、Anime | 新聞聚合、影音資訊、書目查詢 |
| 資料驗證 | Data Validation、Phone、Email | Email 格式驗證、電話號碼查驗 |
| 政府開放資料 | Government、Open Data | 各國官方統計與開放資料(含不少可長期依賴的免費來源) |
| AI 與分析 | Machine Learning、Text Analysis | 翻譯、情緒分析、圖像辨識的免費層 |
找東西的方式很直接:開 README、按 Ctrl+F 搜關鍵字,或從最上方的 Index 點分類跳轉。清單只有英文,搜尋時用英文關鍵字(weather、currency、holiday)命中率才高。
四、挑選 API 的決策流程
流程背後的邏輯:HTTPS 是硬門檻;CORS 決定架構(前端直呼或後端代理);額度與維護狀態決定它能不能撐過原型階段。最後一步「先用 curl 打一發」看似多餘,實際上最省時間,清單裡偶爾有已經關閉或改版的服務,先確認活著再動工。
五、實戰一:免金鑰 API,一行就能呼叫
Auth 標 No 的 API 是最好的起點。以清單裡的經典項目示範,終端機一行就能看到資料:
# PokeAPI(Games 分類):查寶可夢資料,教學示範的常客
curl https://pokeapi.co/api/v2/pokemon/pikachu
# Open-Meteo(Weather 分類):免金鑰天氣預報,台北座標
curl "https://api.open-meteo.com/v1/forecast?latitude=25.03&longitude=121.56¤t_weather=true"
# REST Countries(Geocoding 分類):查國家基本資料
curl https://restcountries.com/v3.1/name/taiwan
前端 JavaScript 的版本(這幾個都支援 CORS,可直接在瀏覽器呼叫):
const res = await fetch("https://api.open-meteo.com/v1/forecast?latitude=25.03&longitude=121.56¤t_weather=true");
const data = await res.json();
console.log(data.current_weather.temperature); // 現在氣溫
六、實戰二:apiKey 型,申請與保護金鑰
Auth 標 apiKey 的流程都大同小異:到官網註冊、在後台拿到一串金鑰、呼叫時附上。附金鑰的方式看各家文件,常見兩種:
# 方式一:金鑰放在查詢參數(例:多數簡單服務)
curl "https://api.example.com/v1/data?apikey=你的金鑰"
# 方式二:金鑰放在 Header(較正規的做法)
curl -H "Authorization: Bearer 你的金鑰" https://api.example.com/v1/data
沒有後端的靜態網站想用 apiKey 型服務,做法和LINE 通知那篇相同:用 Google Apps Script 或任何無伺服器函式當中繼,金鑰存在中繼層。
七、實戰三:OAuth 型,什麼時候會遇到
Auth 標 OAuth 的 API,幾乎都是要存取「使用者自己的資料」:Spotify 的播放清單、GitHub 的私人 repo、Google 日曆。流程是讓使用者登入授權後,你的程式拿到一個代表「這位使用者同意了」的 token 再去呼叫。
實務判斷很簡單:如果你只是要公開資料(天氣、匯率、新聞),清單裡永遠找得到 No 或 apiKey 的替代品,不必碰 OAuth;只有做「幫使用者管理他自己帳號」的功能時才需要,而那已經是正式產品開發的範疇,直接依該服務的官方 OAuth 文件實作。
八、常見陷阱
| 陷阱 | 說明與對策 |
|---|---|
| 把免費額度當無限 | 免費層通常有每分鐘或每月上限,超過回 429。程式要處理 429(退避重試),正式用途先確認額度夠不夠。 |
| 服務悄悄關閉 | 清單靠人工維護,難免有死連結。動工前先 curl 測活,正式產品要有 API 掛掉時的備援或降級方案。 |
| CORS: Unknown 直接當 Yes 用 | 寫到一半才發現前端被擋。先用瀏覽器 console 跑一行 fetch 測試,不行就改走後端。 |
| 拿免費 API 做商用沒看條款 | 不少免費層限個人或非商業使用,商用要升級付費。看各 API 的 Terms,不是看 public-apis 的 MIT(那只管清單本身)。 |
| 回應格式不穩定 | 小型免費 API 改版不會通知你。程式對欄位缺失要有容錯,關鍵欄位先驗證再使用。 |
| 敏感資料經過第三方 | 要送出去驗證的 Email、電話都是個資。挑供應商時看它的隱私政策,個資相關的驗證盡量用大廠或自建。 |
九、進階:追蹤更新與貢獻
- 追蹤更新:在 GitHub 按 Watch(選 Custom → Pull requests)可以看到新收錄的 API;或定期
git pull自己 clone 的副本,用git log看新增了什麼。 - 離線使用:整份清單就是一個 README.md,clone 下來全文搜尋比網頁上更快,也可以自己寫腳本把表格解析成 JSON 建私人索引。
- 貢獻:發現死連結或想收錄新 API,依 CONTRIBUTING.md 的格式開 PR;表格格式有自動化檢查(repo 的 scripts 目錄),格式不對會被 CI 擋下。
- 類似資源:想要更工程化的目錄可以搭配各雲端商的 API marketplace;但以「免費、快速、範圍廣」而言,這份清單仍是第一站。
十、重點整理
- public-apis 是社群維護的免費 API 目錄:約 1,760 個 API、50 個分類,MIT 授權,維護活躍;它是目錄不是服務商,各 API 的品質與條款要各自查核。
- 讀清單先看三欄:HTTPS: No 直接淘汰;Auth 決定申請成本(No 最快);CORS 決定前端能不能直呼、還是要走後端。
- README 開頭的 APILayer 區塊是贊助商廣告,社群清單從 Index 之後開始。
- 挑選流程:分類篩選 → HTTPS/CORS 過濾 → 查額度與維護狀態 → curl 測活 → 才寫進程式。
- apiKey 一律放後端環境變數,前端透過自己的後端轉呼叫;429 限流與服務關停要有容錯。
- 原型階段優先挑 Auth: No 的 API,五分鐘看到資料;要動使用者個人資料才需要碰 OAuth。