SDK和API都是類似於公共服務的東西,都代表的是一種封裝,只是封裝的形式不一樣。
SDK的封裝是在客戶端層面的一個library(也叫做“包”或者“庫”),這個library提供一些客戶端API接口,類似於已經寫好了的函數,你只需要調用它就好了。SDK暴露出來的接口都是和語言相關的,如果SDK是用Java寫的,就需要用Java去調用那個函數;如果是SDK是用Objective-C寫的,就需要用Objective-C去調用那個函數。
API是封裝在服務端層面的library,從網絡服務的層面暴露出一些API接口,提供給使用這些服務的人去調用。因為封裝在服務的層面,傳輸數據用的是網絡協議(常用HTTP/TCP),就不需要管他是用什么語言實現的;
舉個SDK的例子
SDK和API都是服務的消費者;提供SDK和API的都是服務的提供者,會根據消費者的意願來定義SDK和API。
比如支付寶,很多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代碼里就好...”
SDK的缺點:
缺點一:
SDK的不便性在於,他和App一樣,是需要升級的,比如修復某些bug,就需要讓所有用了舊SDK的商戶在更新自己產品的時候采用新的SDK。
但是SDK的升級是做不到強制性的,所以SDK提供方的人就很痛苦,因為需要向下兼容很多個版本,有的時候會直接通知死都不升級的消費者商家說:“老版本的我不支持了,要用的趕緊升級!”強勢的SDK提供方,比如Facebook,會提前一年和你說某個SDK一年后不支持了。但實際上,就算給了一年的時間,很多消費者廠商還是很難完全更新他們使用的SDK,因為有時候采用了舊版本SDK的App的用戶數目太大,總有一些量的用戶並不願意升級。
缺點二:
因為SDK是完全封裝好的,提供的是一個二進制的包,使用SDK的消費者廠商完全不知道他的實現細節。
有時候使用一些小廠開發的SDK非常有風險,如果其中有一些“手腳”,消費者是不知道的。上次有個做廣告變現的小廠開發了一款可以幫助變現的SDK,變現方式是用了他的SDK之后,彈一個廣告給用戶,如果有用戶點廣告后會得到廣告提成。但是這個小廠接廣告的模式是直接下載apk,根據規定是不能直接繞開Google Play去下載apk,Google因為這個原因,把所有集成了這個SDK的App全都下架了。
所以,如果SDK的提供方做了一些違反政策的事情,就會把完全不知情的你牽連,所以很多人不願意集成小廠的SDK,只願意集成Facebook,Google之類大廠的SDK。
缺點三:
理論上,SDK提供方可以做到,知曉消費者廠商的用戶規模。
因為消費者廠商的用戶也算是提供方的用戶,所以如果SDK提供方在實現中加入一些數據上報的動作,技術上來說是完全ok的。而用戶規模、用戶數據等都是非常隱私的東西,消費者廠商肯定是不想被別人知曉的。
為什么要用API?
接上面所說,那么為什么還有人願意用小廠的SDK呢?
因為有時候,某些服務只有某些小廠才提供,Google類的大廠並不可能提供所有的服務。
這個時候,API來了!可以直接用網絡API,而不是在自己代碼里集成SDK。意思是,pay的函數自己寫,這樣由消費者自己控制實現的原理。
舉個例子,支付寶除了SDK,也會提供像API的網絡接口。如果你不想集成SDK的時候,也可以自己花時間去實現支付的邏輯,API提供方可以告訴你,需要先調用這個API,得到某個信息之后,再調用另外一個API,拿到另外一個信息,再調用下一個API,拿到下一個信息...這中間可能有好幾個步驟,最后完成pay。
相比之下,如果用SDK的話,可能只需要寫一句話就好;
如果使用API的話,每句話都需要自己寫,可能需要幾百行代碼,但是實現邏輯都可以自己控制,中間停住也行,再插入一個廣告也行....界面怎么跳轉、有沒有動畫都可以自己決定,只要最后調用提供方的API就可以了,所以很多廠商覺得這樣的形式也挺好的,只是要求會比較高一點。
另外還有一個不用SDK,而用API的可能原因:有時候,由於某些服務提供方自己並沒有封裝SDK,而API相對來說比較通用,比較方便提供。
舉個例子,如果消費者是windows的平台環境,那么SDK提供方就需要提供windows的SDK,但是如果提供方公司並沒有開發windows的程序猿,就只能讓服務消費者使用API。
什么時候一定要用SDK?
Q:是不是SDK能做到的事情,API都能做到?
A:不會。有些SDK里面會提供界面,比如Facebook提供變現的SDK中,會固定他的原生廣告形式,比如大圖、文字的字號大小都是固定的,頁面會以他規定的方式展現出來。像這樣的時候,必須要集成他的SDK,因為界面和規范已經寫好在了SDK里面....
如果是API的話,你可以拿到圖片和文字之后,可以把圖片弄很大,文字弄很小之類自由控制廣告的展現形式,這樣的自由是Facebook不願意的,所以Facebook不會願意提供API,而是需要你集成SDK。
簡單點來說
SDK對指定功能的實現是完全隱藏的,只需要調用接口函數,傳進去特定的值即可實現提供商制定好的功能
API可能會包括許多個接口函數,這些函數需要按照提供的規則進行順序調用,所以在調用不同函數的期間可以插入自己定制化的代碼。
原文鏈接:https://www.jianshu.com/p/d7acd2342772
來源:簡書