API ? SDK? 傻傻分清楚


API (Application Programming Interface)
翻譯成中文就是"應用程式介面",其實這樣翻譯不太直觀。
翻譯為介面,顧名思義就要溝通兩隻不同的東西用的,通常由一組函式所組成。
在同一個平台下的兩個不同東西(程式 or 系統),能取用對方的功能等等,
所以一個 X程式 寫了一組函式,讓同一平台的其他程式取用 X程式 的功能,
那組函式就可以說是那個 X程式or 某個函式庫,對外開放的 API。
甚至是系統呼叫,
因為作業系統的任務就是管理好電腦的各種資源,所以程式需要資源時必須跟作業系統溝通,申請使用某某功能等等,稱為系統呼叫(調用)。
系統呼叫的時候也是取用OS作業系統提供的API。
例如:我要在 自己的網頁 加入google map提供的功能,就使用"google map API"

SDK (Software Development Kit)
翻譯成中文就是"軟體開發工具組"
是用來幫一個 產品 或 平台 開發應用程式的工具組,由產品的廠商提供給開發者使用的。
通常是 某一家廠商 針對某一 平台 或 系統 或 硬體 所發佈出來用以開發應用程式的工具組,
在這個工具包裡面,可能包含了各式各樣的開發工具,模擬器等。
例如:給 Android平台 使用的 Android SDK 就是用來開發 Android系統上面的應用程式。

通常SDK(開發者工具包) 裡也會帶有很多 API ,用來調用一些系統平台程式提供的功能
例如說:視窗顯示,圖形特效等等。
以下舉一個實際例子來說明,調用系統程式功能的API 是怎麼一回事
開發Windows應用程式的SDK(開發者工具包) 裡就包含 Win32 API
說明: Win32 API 是一個函式庫,可以給 Windows應用程式 調用 Windows系統的功能


在PTT看到有人問了差異性,我的看法是
SDK是用來開發某一個平台的程式的工具包,API 是讓同一平台下的程式取用它的功能的函式庫。了解差異之後,應該就可以理解實際狀況會是:「SDK裡面有平台的API」

今天在FB上看到:
API就是皮卡丘,提供鋼鐵尾巴 跟 雷電 兩種技能給你呼叫,基本上你不用研究皮卡為什麼皮卡丘會發電,也不用研究尾巴為什麼會變鋼鐵,反正你只要說,"上吧皮卡丘,使用雷電"
XD

留言

  1. 雖然我學得很少,但是我覺得很清楚!! 謝謝分享~

    回覆刪除
  2. 最後一句寫得不錯,

    1.API 通常大家都不會弄錯,的確就是以功能為導向的"方法"或"函式"清單,
    看程式語言或平台而定( Methods, Functions... ),
    而每個 API 主要都是為了達成某特定功能所設計的。
    開發商可以為了不同平台,設計相同的 API 讓開發者使用,
    也可能會因應不同平台,製作不同的 API 讓開發者使用。

    2.當 API 數量夠多功能夠繁複並且可交互為用的時候,
    ( 例如為了達成某些功能,常需要同時引用某些 APIs 來完成 )
    開發商就會為了開發便利,而預先撰寫好一些組合好 APIs 的 API
    供開發者使用,來統一有特定需求的開發者能有一致的開發與使用體驗,
    ( 例如讓使用"網路連線"的開發者不需自己處理網路的基礎溝通信息,
    與錯誤處理方式,使 API 在應用的時候有一定程度的便利性等 )

    然後,也陸續發展出測試、除錯工具,甚至是設計不同平台開發環境所需的套件,
    尤其針對不同平台,更是設計了對應的工具來協助開發、除錯;

    SDK 名詞之所以出現,儼然是為了匯整上述這些資源而誕生的,
    我想也可以說成是 API 的包含者(直接使用)與應用者(以便加速開發),
    也因此可以說這兩個是屬於不同層級的東西...

    以 Android 來說:
    a. 我們要擁有 Android SDK 才能開發 Android 應用程式
    ( 針對不同開發系統而不同 Linux, Windows )
    b. Android SDK 裡的 APIs 統統都可以單獨使用,只不過你會
    發現他們都還有許多其他的應用,而且可能還比自己寫來得更有效率
    c. Android SDK 跟開發環境整合後,除了提供程式碼語法錯誤檢查外,
    還提供模擬器平台讓我們不需要硬體就可以模擬測試
    d. Android SDK 內有測試用的 APIs,來協助我們檢查記憶體用量、
    程式效能以及狀態顯現等功能 ( 當然它建議僅在測試除錯時才使用 )

    以 Facebook 來說:
    a. 我們要下載 Facebook SDK 才能開發應用程式
    ( 針對不同開發語言或平台而不同,PHP, JavaScript, Android, iOS )
    b. Facebook 官網提供 SDK 詳細的 APIs 解說與使用方法、範例說明等
    c. Facebook 官網提供 線上測試工具,測試某些API的指令與語法

    以 Google Map API 來說:
    網頁開發,只需使用 Google Map API 即可在網頁上開發、使用其功能
    ( 但是在 Android, iOS 上開發則另外需要 Google Map SDK 才行 )

    由此可知,我們可以清楚知道 API 與 SDK 的定義差別了!

    回覆刪除
  3. 感謝作者與匿名留言者。

    我是個1975出生的人,因為想在澎湖做一個平台。
    找啊找看啊看~~~
    接過網頁設計的案子,算設計師,圖像設計為主,網頁也做是因為成本低,也就做了,也接觸了程式與網路世界(28k時代是我萌懂時代)。
    不贅述太多。感謝先~~~
    下文,感謝原因。

    本來要懶惰呼叫臉書大神求解!
    但google大神已解。
    SKD 與 API 的中文翻譯與差別!
    感謝 http://blog.jyny.tw/2013/01/api-sdk.html
    SDK是用來開發某一個平台的程式的工具包,
    API 是讓同一平台下的程式取用它的功能的函式庫。
    對我有畫面略懂架構的人,簡單來說就是,讀取 與 寫入!
    所以,我會寫留言板,大概就可以處理,讀取 與 寫入!
    模糊的大概念,一堆SKD 與 API ,來個中文化,
    或是,中文或無語言執行程式吧!!!
    那才是真正的
    民主!!!
    也才是這世界觀的無有語言的,真正革命。
    不!!!!!!!!!
    不是革命!
    是同“更好”命!!!!!!!
    因為每個人,都可以有更多時間。
    讓自己更好,
    也分享了更好活!
    那個世界沒有比較!
    只有,怎麼生活。

    臉書:https://www.facebook.com/hasento

    回覆刪除

張貼留言