這兩個詞我們在使用別人的東西開發時很容易遇到,有的產品會說提供SDK,有的產品會說提供API,那這兩個東西我們拿在手上有什麼差別呢?

要分析這個差別,要先從這兩個縮寫的全文看起。

API是Application Programming Interface 的縮寫,也就是你的程式 (Application)撰寫(Programming)時所使用的溝通介面(Interface)。根據本教阿淺薄的英文能力,關鍵在最後一個字,也就是介面上。

介面這個字我們在硬體上比較常看到,比方說USB、藍芽也是用介面這個詞。他定義了一個標準,讓大家可以用同一個標準去製造或使用一些功能。而在軟體上,python學堂中提過的RESTful就屬於一種介面,他定義了HTTP上要怎麼呼叫一個服務(或資源),進而讓大家有一個可遵守的規範來設計介面。實際上,我們現在會得到的API很多都是RESTful API(例如諸多的商用AMR)。

而SDK為Software Development Kit 的縮寫,當然最重要的我們會放在kit上,也就是套件。SDK的最主要目的是幫助使用者開發時可以更簡單的呼叫到功能。

打個比方,我們可能存在一些API,像是google的語音處理等等服務,而要在我們的程式呼叫它們,就得寫http query、把我們的語音檔包成可以上傳的格式、錄音等等。這時候我們如果每次呼叫都要打這麼一大串,程式碼就會長得頗難看,於是我們製作了playrobot函式庫,把整個過程變成STT一個物件解決,此時的playrobot函式庫就類似於SDK的一部分功能了。

上面的例子只是SDK的一小部分,也就是包裝API讓他更易用。SDK由於需要直接寫進程式,因此會和開發者要用的語言息息相關--這也是為什麼我們會聽說廠商可能提供C的SDK、python的SDK,但卻不會聽說有人提供C的API或python的API。另外,SDK由於是輔助開發,因此像DocString這種內容也會大量提供在裡面。甚至有的SDK連開發用的環境,包含編譯器等等服務都算在其中。

總結上面內容,我們大概可以做出以下結論:

  • API為SDK的一個子集(亦即SDK包含API)
  • API不干涉開發者想使用的語言,SDK則必須符合SDK提供之語言
  • SDK包含了整個開發過程需要的東西,比如函式庫、說明資料、甚至是開發環境。

現在,API比較常用在雲端類的服務上,一部分是因為RESTful的便利性,另一方面是很多服務的運算量都不小,在雲端上跑會比在自機執行輕鬆多了--也因此,有些人會把RESTful和API劃上等號。

教阿最早接觸到API是在國中時期,那時候因為一些因素需要hook掉鍵盤操作,所以意外的接觸到winAPI這個超級坑的東西。當時撰寫時只覺得,API這東西有夠煩,呼叫10幾條才做到一點點小事情(雖然是一般程式碼辦不到的小事)。

對,API其實一直都在我們的電腦中,只是我們可能不會碰到或者根本沒在意它。