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