參考資料:前端
https://www.jianshu.com/p/cac186cb168b編程
http://www.javashuo.com/article/p-fsinuzmm-ky.html後端
今天看到一個開源的Office軟件,叫LibreOffice。心想着大概和微軟的Office用起來差很少吧,進到下載界面看到多個能夠下載的選項:軟件包,SDK,SourceCode。瀏覽器
軟件包天然不用說,別人打包好的dmg文件,直接安裝就可使用了,相關的庫也都一併安裝到電腦中。SouceCode就是源代碼了,須要打包或者Build以後才能變成咱們見到的軟件,過程當中還須要有寫GUI之類的操做,Python這種語言無需編譯,而想C語言這些每每須要先編譯而後再打包。服務器
問題來了,什麼是SDK呢?爲何軟件發佈者將SDK單獨列出來?SDK和API的區別如何?查找資料後解答以下:框架
若是對方須要你提供一個API,是指一個工程提供給另一個工程的接口(通常是基於http協議)。編程語言
若是對方須要你提供一個SDK,是指基於對方工程的編程語言,提供一個代碼包。在這個代碼包中,你能夠調用操做系統的接口,能夠調用其餘系統的接口,或者什麼都不調用,都與對方無關。函數
也就是說,API是須要別人協助的,API提供者會給你提供服務,你只須要寫一段代碼調用這個API,把相關請求發給服務提供者,服務提供者會把處理好的結果發給你,這就實現了API的調用。而SDK則是至關於軟件的提供者把他們提供服務的代碼交給你了。你拿到SDK實現自給自足,就能夠繞過服務的提供者直接把本身以前想作的事利用SDK很快的在當地實現而和軟件提供者毫無瓜葛。工具
補充資料:開發工具
隨着軟件規模的日益龐大,經常須要把複雜的系統劃分紅小的組成部分,編程接口的設計十分重要,程序設計的實踐中,編程接口的設計首先要使軟件系統的職責獲得合理劃分,良好的接口設計能夠下降系統各部分的相互依賴,提升組成單元的內聚性,下降組成單元間的耦合程度,從而提升系統的維護性和擴展性。API是接口的一種,在程序交互中具備重要的做用,而SDK與API有着密不可分的關係。
API
(1)API的概念
API即「應用程序編程接口」,是一些預先定義的函數,目的是做爲「介面」溝通兩個不一樣的東西,提供應用程序與開發人員基於某軟件或硬件得以訪問一組例程的能力,而又無需訪問源碼,或理解內部工做機制的細節。
其實就是別人已經寫好的能夠實現特定功能的函數,而你只須要根據他提供好的接口,也就是調用他的方法,傳入他規定的參數,而後這個函數就會幫你實現這些功能。
從接口interface來講,在計算機領域是指兩個不一樣事物之間交互的地方,大能夠到兩個完整的不一樣系統,小能夠到兩段程序。因此這個I就這麼理解。在這個基礎上,人和程序交互的地方,叫作UI,user interface,全部人輸入的包括鼠標鍵盤觸摸屏聲音輸入都算。那麼程序和程序交互的就叫作API,全部非人對非人交互都經過API進行交互,所謂交互,其實就是傳遞數據,觸發功能。
(2)API應用案例
示例場景:假如你是一家小企業,公司網站上有一個表格是用來給客戶註冊預定的。你想要憑藉這些預定細節信息,讓客戶可以自動在谷歌日程上建立活動。
API使用:這就意味着,你的網站服務器須要直接與谷歌服務器進行對話,在掌握既定細節信息的狀況下,申請建立活動。以後,你的服務器就會接收到谷歌的響應並進行處理,而後將相關信息發送回瀏覽器,好比說向用戶發送一個確認信息。
(3)API產品——如今也有公司將API包裝成產品
案例:Weather Underground出售其天氣數據API的訪問權限給其餘人。
(4)API的分類
API又分爲(Windows、Linux、Unix等系統的)系統級API,及非操做系統級的自定義API。做爲一種有效的代碼封裝模式,微軟Windows的API開發模式已經爲許多商業應用開發的公司所借鑑,並開發出某些商業應用系統的API函數予以發佈,方便第三方進行功能擴展。如Google、蘋果電腦公司,以及諾基亞等手機開發的API等等。
API又分爲開放式API和私有API。顧名思義,開放式API便是向全部人公開的接口,容許任何人調用它並獲取到它背後的數據,有時公司會將 API 做爲其公共開放系統,也就是說,公司制定本身的系統接口標準,當須要執行系統整合、自定義和程序應用等操做時,公司全部成員均可以經過該接口標準調用源代碼,該接口標準被稱之爲開放式API。私有API即接口未對外開放。
SDK
(1)SDK的概念
SDK即「軟體開發工具包」,通常是一些被軟件工程師用於爲特定的軟件包、軟件框架、硬件平臺、操做系統等創建應用軟件的開發工具的集合。通俗點是指由第三方服務商提供的實現軟件產品某項功能的工具包。
一般SDK是由專業性質的公司提供專業服務的集合,好比提供安卓開發工具、或者基於硬件開發的服務等。也有針對某項軟件功能的SDK,如推送技術、圖像識別技術、移動支付技術、語音識別分析技術等,在互聯網開放的大趨勢下,一些功能性的SDK已經被看成一個產品來運營。
開發者不須要再對產品的每一個功能進行開發,選擇合適穩定的SDK服務並花費不多的經歷就能夠在產品中集成某項功能。
(2)SDK和API的區別
SDK至關於開發集成工具環境,API就是數據接口。在SDK環境下調用API數據。
實際上SDK包含了API的定義,API定義一種能力,一種接口的規範,而SDK能夠包含這種能力、包含這種規範。可是SDK又不完徹底全只包含API以及API的實現,它是一個軟件工具包,它還有不少其餘輔助性的功能。
SDK 包含了使用 API 的必需資料,因此人們也常把僅使用 API 來編寫 Windows 應用程序的開發方式叫作「SDK編程」。
通俗語言解釋
API
前端調用後端數據的一個通道,就是咱們俗說的接口,經過這個通道,能夠訪問到後端的數據,可是又無需調用源代碼。
SDK
工程師爲輔助開發某類軟件的相關文檔、範例和工具的集合,使用SDK能夠提升開發效率,更簡單的接入某個功能。
舉例說明:一個產品想實現某個功能,能夠找到相關的SDK,工程師直接接入SDK,就不用再從新開發了。