學程式常常會聽到「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 有點麻煩
你要自己處理很多事情,我們一步一步來看:
第一步:要自己組合正確的網址
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: '你好' }]
})
});這裡面有很多細節:
這些東西都要照 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);程式碼變少了,也更好讀。
直接對比
SDK 裡面有什麼?
現成的程式碼
別人寫好的功能,你直接呼叫。例如 client.chat.completions.create() 這個功能,背後幫你處理了一堆事情。
文件
告訴你有哪些功能可以用、參數怎麼填。
範例程式碼
讓你照著改就能用。
錯誤處理
幫你把常見的錯誤情況都處理好了。
為什麼要用 SDK?
程式碼變少
原本要寫 20 行,現在只要 5 行。
不容易出錯
網址打錯、格式錯誤這些問題,SDK 都幫你避開了。
有人維護
API 更新的時候,SDK 團隊會跟著更新,你只要升級版本就好。
常見的 SDK
手機 App 開發
常見功能
遊戲開發
等等,那我直接用 ChatGPT 網頁不就好了?
這是很多人會有的疑問:既然可以直接開 ChatGPT 網頁聊天,為什麼還要用 API 或 SDK?
差別在於:誰在操作
實際例子
假設你開了一家網拍,想用 AI 自動回覆客戶的問題。
用 ChatGPT 網頁:
- 客戶問問題
- 你打開 ChatGPT 網頁
- 你手動把問題貼進去
- 等 AI 回答
- 你手動把答案複製回去給客戶
一天 100 個客戶問問題,你就要重複這個動作 100 次。
用 API / SDK:
- 客戶問問題
- 你的程式自動把問題送給 OpenAI
- 程式自動收到回答
- 程式自動回覆給客戶
全部自動化,你不用做任何事。
還有什麼是網頁做不到的?
所以三者的關係是
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:大部分可以,但要看授權條款。
總結
兩者的關係:
SDK 裡面已經把「怎麼呼叫 API」這件事包好了,你不用自己處理那些麻煩的細節。
下一步
- 挑一個 SDK(例如 OpenAI SDK、Firebase SDK)
- 照著官方文件的「快速入門」做一遍
- 實際跑過一次,就會懂了