1.API(應用程序編程接口):是一些預先定義的函數,目前是提供應用程序與開發人員基於某軟件或硬件得以方位一組例程的能力,而又無需訪問源碼,或理解內部工作機制的細節。
在java中,API相當於一個別人已經實現了的某個功能的接口。
2.sdk(軟件開發工具包):一般是一些軟件工程師為特定的軟件包、軟件架構、硬件平台、操作系統等建立應用軟件時的開發工具的集合。
sdk相當於很多API和其他文件的集合體,你可以用這個完成某一件事情。
3.sdk和API的區別:API是一個具體的函數(比如加法函數),已經明確了他的作用,而sdk就像是很多方法的集合(比如計算器)。比如要做加法運算,就要調用計算器SDK的加法API,要做減法就要調用計算器SDK的減法API,無論你想完成什么計算,sdk里總有能實現的方法。
5.除此以外,SDK還有一單除了提供完善的接口,還會為你提供開發環境,如想要計算器可以使用,要給計算器電池,這是計算器運行需要的,再如java的JDK里,除了各種API,還包括JAVA運行需要的JRE。
6.SDK的封裝是在客戶端層面的一個library(也叫做“包”或者“庫”),這個library提供一些客戶端API接口,類似於已經寫好了的函數,你只需要調用它就好了。sdk暴露出來的接口都是和語言相關的,如果sdk是用java寫的,就需要用java去調用那個函數,如果sdk是用object-c寫的,就需要用object-c去調用那個函數。
API是封裝在服務端層面的library,從網絡服務的層面暴露出一些API接口,提供給使用這些服務的人去調用,因為封裝在服務的層面,傳輸數據用的是網絡協議(常用HTTP/TCP),就不需要管他使用什么語言實現的;
實例應用:比如支付寶,很多App、網站等消費者都需要使用支付這個功能/服務,但是又不想自己去開發這個東西,那么支付寶就說“你們告訴我,你們需要使用的環境是什么樣的”;有人說“我是App,Android寫的”,有人說自己是iOS,有人說“我是Web的”,還有人說我是Windows的,那么支付寶說:“沒問題,Android的我有Android的SDK,你把這個SDK嵌入到你的代碼里,我有一些Java的接口,Java接口里面有個函數叫pay,然后你傳一些值給pay就可以了;如果你是iOS的,我還有另外一個叫iOS支付寶的SDK,你把它嵌入到你的iOS的App里面,然后里面有個Objective-C寫的函數,也叫pay,同樣傳參數進來就可以了;如果你是Web的就可能有個js的SDK,嵌入到你的HTML代碼里就好...”
來源https://blog.csdn.net/chenzz2560/article/details/81198582