學程式常常會聽到「API」和「SDK」,這篇文章用最直白的方式講清楚這兩個東西。
先從 API 開始,懂了 API 之後,SDK 就很好理解了。
先搞懂 API
什麼是 API?
API 就是一個網址,你對它發送請求,它會回傳資料給你。
實際例子
假設你想知道台北現在幾度,中央氣象署有提供一個網址:
https://opendata.cwa.gov.tw/api/v1/rest/datastore/O-A0003-001你對這個網址發送請求,它就會回傳天氣資料:
{
"location": "台北",
"temperature": 28,
"humidity": 75
}這個網址就是 API。
再一個例子
你想讓 ChatGPT 幫你回答問題,OpenAI 有提供一個網址:
https://api.openai.com/v1/chat/completions你把問題送到這個網址,它會回傳 AI 的回答。
API 就這麼簡單
| 你做的事 | API 做的事 |
|---|---|
| 發送請求到指定網址 | 收到請求後,回傳資料給你 |
就是這樣,沒有更複雜的東西了。
但是直接用 API 有點麻煩
你要自己處理很多事情,我們一步一步來看:
第一步:要自己組合正確的網址
const url = 'https://api.openai.com/v1/chat/completions';這個網址要去 OpenAI 的文件裡查,打錯一個字就不會動。不同功能的網址也不一樣,例如:
- 聊天功能:
/v1/chat/completions - 產生圖片:
/v1/images/generations - 語音轉文字:
/v1/audio/transcriptions
你要自己記得每個功能對應哪個網址。
第二步:要自己設定請求的格式
const response = await fetch(url, {
method: 'POST',
headers: {
'Authorization': 'Bearer sk-xxxxxxxx',
'Content-Type': 'application/json'
},
body: JSON.stringify({
model: 'gpt-4',
messages: [{ role: 'user', content: '你好' }]
})
});這裡面有很多細節:
| 項目 | 說明 | 寫錯會怎樣 |
|---|---|---|
method: 'POST' | 告訴 API 你要送資料過去 | 用錯方法,API 會拒絕 |
Authorization | 你的金鑰,證明你有權限使用 | 沒帶或寫錯,API 會回傳 401 錯誤 |
Content-Type | 告訴 API 你送的資料格式是 JSON | 沒寫的話,API 可能看不懂你的資料 |
body | 你實際要送的內容 | 格式錯誤,API 會回傳 400 錯誤 |
這些東西都要照 OpenAI 文件規定的格式寫,少一個或寫錯一個就不會動。
第三步:要自己把回傳的資料解析出來
API 回傳的資料長這樣(簡化版):
{
"id": "chatcmpl-abc123",
"object": "chat.completion",
"created": 1677858242,
"model": "gpt-4",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "你好!有什麼我可以幫你的嗎?"
},
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 10,
"completion_tokens": 15,
"total_tokens": 25
}
}你要的答案藏在 choices[0].message.content 裡面,所以要這樣寫才能拿到:
const data = await response.json();
const answer = data.choices[0].message.content;
// answer = "你好!有什麼我可以幫你的嗎?"這個結構也是要去查文件才知道,而且不同 API 回傳的結構都不一樣。
第四步:要自己處理各種錯誤
API 可能會回傳各種錯誤:
if (response.status === 400) {
console.log('你送的資料格式有問題');
}
if (response.status === 401) {
console.log('金鑰錯誤或過期');
}
if (response.status === 429) {
console.log('請求太頻繁,被限制了');
}
if (response.status === 500) {
console.log('OpenAI 那邊出問題了');
}每種錯誤要怎麼處理,都要自己寫。
總結:直接用 API 的麻煩
| 你要自己做的事 | 有多麻煩 |
|---|---|
| 記住每個功能的網址 | 要查文件,容易打錯 |
| 設定正確的請求格式 | 一堆參數,少一個就不會動 |
| 從回傳資料裡挖出你要的東西 | 結構複雜,要一層一層找 |
| 處理各種錯誤情況 | 錯誤種類很多,每種都要處理 |
每次要用 API,都要寫這麼多程式碼。如果你要用 10 個不同的 API 功能,這些程式碼就要重複寫 10 次。
這就是為什麼需要 SDK——讓你不用處理這些麻煩事。
再來認識 SDK
什麼是 SDK?
SDK 就是一包程式碼,你下載安裝後,裡面的功能可以直接用。
別人已經把「怎麼發請求」、「怎麼解析資料」、「怎麼處理錯誤」都寫好了,你只要呼叫就好。
用 SDK 的話
同樣是呼叫 OpenAI,用 SDK 只要這樣寫:
const OpenAI = require('openai');
const client = new OpenAI({ apiKey: '你的金鑰' });
const response = await client.chat.completions.create({
model: 'gpt-4',
messages: [{ role: 'user', content: '你好' }]
});
console.log(response.choices[0].message.content);程式碼變少了,也更好讀。
直接對比
| 做法 | 程式碼量 | 要自己處理的事 |
|---|---|---|
| 直接用 API | 多 | 網址組合、請求格式、資料解析、錯誤處理 |
| 用 SDK | 少 | 幾乎不用,SDK 都包好了 |
SDK 裡面有什麼?
現成的程式碼
別人寫好的功能,你直接呼叫。例如 client.chat.completions.create() 這個功能,背後幫你處理了一堆事情。
文件
告訴你有哪些功能可以用、參數怎麼填。
範例程式碼
讓你照著改就能用。
錯誤處理
幫你把常見的錯誤情況都處理好了。
為什麼要用 SDK?
程式碼變少
原本要寫 20 行,現在只要 5 行。
不容易出錯
網址打錯、格式錯誤這些問題,SDK 都幫你避開了。
有人維護
API 更新的時候,SDK 團隊會跟著更新,你只要升級版本就好。
常見的 SDK
手機 App 開發
| SDK | 用途 |
|---|---|
| iOS SDK | 開發 iPhone App |
| Android SDK | 開發 Android App |
常見功能
| 功能 | 常用 SDK |
|---|---|
| 地圖功能 | Google Maps SDK |
| 社群登入 | Facebook SDK、LINE SDK |
| 付款功能 | Stripe SDK、綠界 SDK |
| AI 功能 | OpenAI SDK |
| 推播通知 | Firebase SDK |
遊戲開發
| SDK | 用途 |
|---|---|
| Unity | 手機遊戲開發 |
| Unreal Engine | 3A 遊戲開發 |
等等,那我直接用 ChatGPT 網頁不就好了?
這是很多人會有的疑問:既然可以直接開 ChatGPT 網頁聊天,為什麼還要用 API 或 SDK?
差別在於:誰在操作
| 方式 | 誰在操作 | 怎麼用 |
|---|---|---|
| ChatGPT 網頁 | 你(人) | 手動打字、手動複製結果 |
| API / SDK | 你的程式 | 程式自動發送、自動處理結果 |
實際例子
假設你開了一家網拍,想用 AI 自動回覆客戶的問題。
用 ChatGPT 網頁:
- 客戶問問題
- 你打開 ChatGPT 網頁
- 你手動把問題貼進去
- 等 AI 回答
- 你手動把答案複製回去給客戶
一天 100 個客戶問問題,你就要重複這個動作 100 次。
用 API / SDK:
- 客戶問問題
- 你的程式自動把問題送給 OpenAI
- 程式自動收到回答
- 程式自動回覆給客戶
全部自動化,你不用做任何事。
還有什麼是網頁做不到的?
| 你想做的事 | ChatGPT 網頁 | API / SDK |
|---|---|---|
| 整合到你自己的 App 或網站 | ❌ 做不到 | ✅ 可以 |
| 一次處理 1000 筆資料 | ❌ 要手動貼 1000 次 | ✅ 程式自動跑 |
| 客製化 AI 的行為(例如:只能回答特定主題) | ❌ 有限 | ✅ 可以設定 |
| 把 AI 回答存進你的資料庫 | ❌ 要手動複製 | ✅ 程式自動存 |
| 串接其他功能(例如:AI 回答後自動寄 email) | ❌ 做不到 | ✅ 可以 |
所以三者的關係是
ChatGPT 網頁:給人用的,手動操作,最簡單但最沒彈性
↓
API:給程式用的,可以自動化,但程式碼要自己寫很多
↓
SDK:也是給程式用的,但幫你把麻煩事包好了,程式碼變少簡單說:
- 聊天網頁 → 人操作,一次一個
- API / SDK → 程式操作,可以自動化、批次處理、整合到你的產品
怎麼安裝和使用 SDK?
以 OpenAI SDK 為例:
步驟一:安裝
在終端機輸入:
npm install openai這樣就裝好了。
步驟二:在程式碼裡引入
const OpenAI = require('openai');步驟三:初始化
const client = new OpenAI({ apiKey: '你的金鑰' });步驟四:使用功能
const response = await client.chat.completions.create({
model: 'gpt-4',
messages: [{ role: 'user', content: '你好' }]
});大部分 SDK 都是這個流程:安裝 → 引入 → 初始化 → 使用。
注意事項
金鑰不要外洩
SDK 通常需要一組金鑰來驗證身份。這組金鑰不能讓別人看到。
錯誤做法:
// 直接寫在程式碼裡,上傳到 GitHub 會被看到
const client = new OpenAI({ apiKey: 'sk-1234567890' });正確做法:
// 用環境變數
const client = new OpenAI({ apiKey: process.env.OPENAI_API_KEY });注意收費
很多 SDK 背後的 API 是要收費的。用之前先查價格,避免收到意外帳單。
選有在更新的 SDK
看一下 GitHub 上最後更新時間,太久沒更新的可能有問題。
常見問題
Q:什麼時候直接用 API,什麼時候用 SDK?
A:有 SDK 就用 SDK。除非 SDK 不支援你用的程式語言,或你有很特殊的需求。
Q:SDK 會讓程式變慢嗎?
A:影響很小,不用擔心。
Q:SDK 可以用在商業專案嗎?
A:大部分可以,但要看授權條款。
總結
| 名詞 | 白話解釋 |
|---|---|
| API | 一個網址,你發請求過去,它回傳資料給你 |
| SDK | 一包程式碼,下載後可以直接用裡面的功能 |
兩者的關係:
SDK 裡面已經把「怎麼呼叫 API」這件事包好了,你不用自己處理那些麻煩的細節。
下一步
- 挑一個 SDK(例如 OpenAI SDK、Firebase SDK)
- 照著官方文件的「快速入門」做一遍
- 實際跑過一次,就會懂了