什麼是 SDK?軟體開發套件一次看懂
SDK(軟體開發套件)是公司提供給開發者的現成工具包,讓他們不必從零開始,就能使用該公司的服務或平台。它通常包含針對特定程式語言的程式庫、說明文件與範例,有時還包含測試工具等額外工具。當你的應用程式「使用 Stripe SDK」時,意思是你的程式碼呼叫的是 Stripe 預先寫好的函式,而不是自己手動寫出每一次送到 Stripe API 的請求。
用 AI 開發時,為什麼 SDK 很重要
當你要求 AI 建構工具加入付款、AI 對話、地圖或電子郵件功能時,它通常會安裝該服務提供者的 SDK,並撰寫幾行程式去呼叫它。了解 SDK 是什麼,能幫助你:
- 了解專案中加入了什麼。 SDK 是一個相依套件,也就是你的應用程式現在所依賴的外部程式碼。
- 注意它需要的設定。 幾乎每個 SDK 都需要 API 金鑰,而且許多 SDK 分為「伺服器端」與「瀏覽器端」兩種版本,各自對於哪些金鑰可以安全使用有不同的規定。
- 提出正確的要求。 「在伺服器端使用 Stripe 官方 SDK」比單純說「加入 Stripe」更清楚。
- 看懂錯誤訊息。 AI 開發的應用程式中,許多錯誤都是因為 SDK 設定錯誤、版本過舊,或被用在錯誤的位置。
日常生活的比喻
想像你要裝一組層架。
- API 就像大樓的規範:哪些牆可以鎖螺絲、能承受多少重量、水管位置在哪裡。你可以只依照這些規範自己測量、自己鑽孔。
- SDK 則像同一家公司提供的組合式層架套件:預先裁切好的零件、合適的螺絲、專為他們的牆壁設計的支架,外加一本說明書。
你依然要決定層架放在哪裡、要放什麼東西。套件只是省去你切木板、猜螺絲尺寸的麻煩,也比較不會不小心鑽破水管。
SDK、API、函式庫與框架的比較
這些名詞彼此重疊,讓很多人感到困惑:
| 名詞 | 是什麼 | 例子 |
|---|---|---|
| API | 與服務溝通的規則:接受哪些請求、回傳什麼 | Stripe 的 REST API,位於 api.stripe.com |
| SDK | 服務提供者針對某種語言、用來使用其 API 或平台的工具包,附有說明文件與工具 | Stripe 官方的 Node.js 函式庫 |
| 函式庫(Library) | 任何加入專案中可重複使用的程式碼 | 一個日期格式化套件 |
| 框架(Framework) | 整個應用程式所建構其中的較大結構 | React、Next.js、Django |
SDK 通常包含一個函式庫,而該函式庫通常會呼叫某個 API。對於網路服務而言,「SDK」和「用戶端函式庫(client library)」常被混用。
有些 SDK 與網路服務完全無關。Apple 和 Google 會發布用來開發 iOS 與 Android 應用程式的 SDK,裡面包括編譯器、模擬器和平台程式碼。概念相同:為該平台開發所需的一切,都放在同一套工具裡。
SDK 替你做了什麼
以下是同一項任務——在付款服務商建立一位客戶——用兩種方式完成。
沒有 SDK 時,你的程式必須自己建構 HTTP 請求:設定網址、把密鑰放進正確的標頭、依 API 要求的格式整理資料、送出、檢查狀態碼、解析回應,並在網路暫時中斷時處理重試。
有 SDK 時,大約只需一行:
const customer = await stripe.customers.create({ email: "lena@example.com" });
在這一行背後,SDK 會處理:
- 驗證:正確地把你的金鑰附加到每一個請求上
- 資料格式:把你的資料轉成 API 要求的格式,並把回應轉回物件
- 錯誤:把狀態碼轉成清楚的錯誤類型,讓你的程式可以捕捉
- 重試:當請求因暫時性原因失敗時,安全地再試一次(許多官方 SDK 都會這麼做)
- 型別:在 TypeScript 中,告訴編輯器有哪些欄位存在,讓錯誤在執行前就能被發現
實例:為客服應用程式加入 AI 回覆
你向 AI 建構工具提出要求:「當客戶送出客服工單時,使用 AI 模型產生建議回覆。」
- AI 會把模型服務商的官方 SDK 安裝為專案中的套件(在 JavaScript 專案中,來自 npm 註冊中心)。
- 你把服務商的 API 金鑰加入專案的機密設定。SDK 會在伺服器端從環境變數中讀取它。
- AI 會撰寫一個伺服器路由,把工單內容與簡短指示傳給 SDK,並將建議回覆存入資料庫。
- 瀏覽器永遠看不到金鑰,它只會呼叫你自己的伺服器路由。
如果服務商之後變更了 API,通常會發布新版本的 SDK。更新套件——並檢查發行說明中是否有破壞性變更——通常就足夠了。
關鍵名詞
| 名詞 | 意義 |
|---|---|
| 相依套件(Dependency) | 你的專案所依賴的外部程式碼。SDK 就是其中一種。 |
| 套件/套件管理工具 | 可下載的程式碼包,以及安裝它的工具(JavaScript 用 npm,Python 用 pip)。 |
| 用戶端函式庫(Client library) | 讓呼叫某個 API 更容易的程式碼。對網路服務而言,常就是「SDK」的意思。 |
| 伺服器端 SDK | 在你的後端執行,可以安全地使用機密金鑰。 |
| 用戶端/瀏覽器端 SDK | 在使用者的瀏覽器中執行,只能提供公開或「可發布」的金鑰。 |
| 版本 | 每個 SDK 發行版本都有編號(例如 4.2.0)。大幅跳號通常代表有破壞性變更。 |
| 破壞性變更(Breaking change) | 需要你修改程式碼才能相容的更新。 |
| 變更日誌/發行說明 | 服務商列出每個版本變更內容的文件。 |
常見的誤解
- 「SDK 和 API 是同一回事。」 API 是服務的介面;SDK 是建立在它之上的便利層。大多數網路 API 不用 SDK 也能呼叫,只是比較費工。
- 「SDK 裝好了,整合就完成了。」 你仍然需要服務商的帳號、正確的金鑰,以及能處理失敗情況的程式碼。
- 「名稱正確的套件就是官方的。」 攻擊者有時會發布長得很像的仿冒套件。請依照服務商的文件確認確切的套件名稱。
- 「瀏覽器端的 SDK 可以使用我的機密金鑰。」 絕對不行。任何放在瀏覽器程式碼中的東西,訪客都看得到。機密金鑰只能放在伺服器端程式碼中,請參閱如何保護 API 金鑰。
- 「SDK 永遠不需要更新。」 舊版本會停止接收修復,而且當服務商淘汰舊的 API 版本時,最終會無法運作。
該問你的 AI 建構工具什麼
- 「使用服務商的官方 SDK,不要用第三方的包裝程式。告訴我你安裝的確切套件名稱與版本。」
- 「只在伺服器端使用 SDK,並從環境變數讀取金鑰。」
- 「這個 SDK 的哪些部分會在瀏覽器中執行?它們使用哪些金鑰?」
- 「如果 SDK 呼叫失敗或逾時會怎樣?請向使用者顯示清楚的訊息,並記錄錯誤。」
- 「列出這個應用程式所依賴的每一個 SDK 與套件,以及各自的用途。」
- 「檢查我們的 SDK 是否過時,或是否有已知的安全性問題。」
Mythex 中的 SDK
Mythex 代理程式可以使用你的技術堆疊對應的標準套件管理工具,在專案沙盒中安裝套件,包括服務商的 SDK——只要說明套件名稱以及你想用它做什麼功能即可。請參閱使用 npm 套件。Mythex 並沒有提供預先建置好的整合目錄:你把服務商的金鑰儲存為專案機密,然後請代理程式從伺服器端呼叫該服務,做法如整合任何 API所述。
若想了解 SDK 底層的技術,請參閱什麼是 API。若想了解兩個常見的 SDK 功能,請參閱如何為應用程式加入付款與如何使用 LLM API。
常見問題
用簡單的話說,什麼是 SDK?
SDK(軟體開發套件,software development kit)是一組現成的程式碼、說明文件與工具,由公司提供,讓開發者能輕鬆使用其服務或平台。你不必手動寫出每一次對 API 的請求,只要呼叫 SDK 已經提供的簡單函式即可。
SDK 和 API 有什麼差別?
API 是與某項服務溝通的規則,包括它接受哪些請求、會回傳哪些回應。SDK 則是建立在 API 之上的工具包,通常針對某一種程式語言,替你發出這些請求,並處理驗證、重試和資料格式等細節。
SDK 是免費的嗎?
大多數網路服務的 SDK 都可以免費下載,而且是開放原始碼,但它所連接的服務可能會依使用量收費。使用 Stripe 或 OpenAI 的 SDK 本身不需付費;它所發出的付款或 AI 請求,則由服務提供者計費。
使用 SDK 安全嗎?
一般來說,服務提供者官方的 SDK 是呼叫其服務最安全的方式,因為它們有人持續維護,並處理了安全細節。請從官方套件註冊中心安裝、保持更新,並留意名稱相似的非官方套件。