指南

什麼是 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 模型生成建議回覆。」

  1. AI 會把模型供應商的官方 SDK 作為套件安裝到你的項目中(JavaScript 項目則從 npm 註冊處安裝)。
  2. 你把供應商的 API 金鑰加入為專案機密。SDK 會在伺服器上從環境變數讀取它。
  3. AI 會撰寫一條伺服器路由,把工單內容與簡短指示傳給 SDK,並把建議回覆儲存到資料庫。
  4. 瀏覽器永遠看不到金鑰,它只呼叫你自己的伺服器路由。

如果供應商日後更改 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 一般是呼叫其服務最安全的方式,因為它們有人持續維護,並已處理安全細節。請從官方套件註冊處安裝、保持更新,並小心名稱相似的非官方套件。

Mythex · Pricing · 用 AI 建造任何嘢 · 網站及應用程式範本 · Mythex 比較 · AI 應用程式開發詞彙表 · 免費 AI 應用程式開發工具 · English

English አማርኛ العربية Български বাংলা Bosanski Català Čeština Dansk Deutsch Ελληνικά Español Español (España) Eesti فارسی Suomi Français Français (Canada) ગુજરાતી हिन्दी Hrvatski Magyar Հայերեն Bahasa Indonesia Íslenska Italiano 日本語 ქართული Қазақ тілі ಕನ್ನಡ 한국어 Lietuvių Latviešu Македонски മലയാളം Монгол मराठी Bahasa Melayu မြန်မာ Norsk bokmål Nederlands ਪੰਜਾਬੀ Polski Português (Brasil) Português (Portugal) Română Русский Slovenčina Slovenščina Soomaali Shqip Srpski Svenska Kiswahili தமிழ் తెలుగు ไทย Tagalog Türkçe Українська اردو Tiếng Việt 简体中文 繁體中文(台灣)