sdk和open api有什麼區別?


前面說的都是些什麼鬼……

------------------------

為了易懂,我盡量避免用介面這個詞,老實說這個詞得定義比這兩個玩意兒還要亂。

我認為,API,是你,嚴格得來說是你得代碼,和一個第三方的實體進行溝通的方式得 集合。

比如你和Windows系統溝通,需要調用Windows提供得API(CreateWindowEx, bitblt,等等)。(以C語言函數得形式)

你和.Net框架進行溝通,需要調用.Net提供得Api。(以C#,VB函數/類得形式)

你和新浪微博進行溝通,需要調用新浪微博提供得Api。(以Http請求得形式)

所以Api,比較準確得定義應該是,一個軟體系統對其他軟體系統提供得服務。

那什麼是open api, 其實open api也是api,並且沒有一個準確得定義區分什麼是api,什麼是open api,什麼是不open的api。

open api,根據我得經驗,一般是指有這樣得一個系統,一開始是封閉得。比如最開始得Twitter,或者google,或者facebook。突然有一天,他們開放了!他們公布了一組api,來獲得他們內部得一些數據,執行一些操作。

這個時候,這樣得api, 我們就稱之為open api。

那什麼是SDK呢?

最開始的定義就是, api的集合,我們就稱之為SDK。

還是拿之前得windows的例子來說,windows提供得所有Api得集合,就稱之為 Windows SDK。

然後,隨著時間得演化,聰明而又懶惰得程序員們,又給SDK賦予了新的意義。

通過Windows得Api,來開發windows程序是複雜且繁瑣得。十分不友好,所以就有了像.Net這樣得框架。他封裝了底層得Windows Api,然後改造成一組新得,更加易於使用得Api給開發者們使用。

像.Net這種,以一組Api作為輸入,以另外一組Api作為輸出得中間件,就是現在人們所說得SDK。如下圖:

再舉一個微博的例子,新浪微博提供了一組Http請求形式得Api。由於現如今構造Http請求也算是一件麻煩事,所以逐漸就有了,「新浪微博iOS SDK」。這個SDK封裝新浪微博得Http介面,提供了一組Objective C或者Swift形式介面。

那現在問題來了,什麼是 「框架」

.NET框架,Cocoa框架,WPF框架……

簡單得說……很厲害得SDK,就可以稱自己為……框架。


不是很贊同 @楊帆 的答案,下面這個說得更詳細些。

轉載一篇文章:

API ? SDK? 傻傻分清楚

SDK (Software Development Kit)翻譯成中文就是"軟體開發工具組"

是用來幫一個 產品平台 開發應用程式的工具組,由產品的廠商提供給開發者使用的。

通常是 某一家廠商 針對某一 平台 系統 硬體 所發佈出來用以開發應用程式的工具組,

在這個工具包裡面,可能包含了各式各樣的開發工具,模擬器等。

例如:給 Android平台 使用的 Android SDK 就是用來開發 Android系統上面的應用程式。

API (Application Programming Interface)

翻譯成中文就是"應用程式介面",其實這樣翻譯不好,應該說是"程式溝通介面"。

翻譯為介面,顧名思義就要溝通兩個不同的東西用的,通常由一組函式庫所組成。

在一個 同一個平台 下的 兩個不同東西(程式 or 系統),為了能取用對方的功能等等,

所以一個 X程式 寫了一組函式,讓 同一平台的其他程式 取用 X程式 的功能,

那組函式就可以說是那個 X程式 對外開放的 API。

例如:我要在 自己的網頁 上加入 google map網頁的功能,就使用 "google map API"

有時候 SDK(開發者工具包) 裡也會帶有些許 API 用來調用一些系統平台程式提供的功能

例如說:視窗顯示,圖形特效等等。

以下舉一個實際例子來說明,調用系統程式功能的API 是怎麼一回事

開發Windows應用程式的SDK(開發者工具包) 裡就包含 Win32 API

說明: Win32 API 是一個函式庫,可以給Windows應用程式 調用 Windows系統的功能

在PTT看到有人問了差異性,我的看法是

SDK是用來開發某一個平台的程式的工具包,API 是讓同一平台下的程式取用它的功能的函式庫。

以及下面的評論

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 的定義差別了!

參考來源:http://jynychen.blogspot.com/2013/01/api-sdk.html


通俗點說吧,百度的太難讓不懂的人理解。

栗子一:老師布置了七科的作業,是存在網盤裡的。告訴了你們網址賬號密碼,你們每個學科的學生自己去裡面下載各自作業。這裡面網址賬號密碼整體就算是個openapi,老師就是資源或服務的提供方,每個學科的學生就是資源或服務的使用方,使用方可以通過openapi獲取到提供方所希望提供給你的東西,使用方也可以對這些所得到東西篩選加工進而使用。

栗子二:你是一家造圓珠筆芯的工廠,圓珠筆芯主要就是由筆尖、筆管和墨水構成的,筆管和墨水簡單,但是筆尖的工藝就複雜了,你們不會。但是你們又希望能有一條一體化的生產線,因此就要向有造筆尖工藝的地方求助(我們簡稱為A),那麼通過各種溝通,A願意提供給你造筆尖的機器,但是不願意給你提供內部核心工藝,於是你們就把這個機器放到你們生產線內,按要求扔材料進機器,機器里通過一系列加工,做了筆尖出來,最後經過拼裝成了一支筆芯。這裡面的機器就算SDK,你根據SDK的規則輸入它所能識別的數據(一般是提供方提前設定好的)經過一番內部計算和與伺服器數據傳遞交流,就能輸出你們當初合作時所約定你們希望得到的數據。


Api: application programs interface,應用程序開發介面;介面可以只是描述文檔,木有代碼,或者僅有舉例的代碼(比如Java例子)

Api 可以是開放的,於是就open 了。

SDK:開發工具包,主要內容是對Api 的封裝(比如封裝成java的sdk),也會含文檔說明;網路服務的Api一般會有多種編程語言的Sdk!有些還會在SDK里提供諸如:測試要求,對接要求 等文檔!甚至有工具程序在開發包里。

(機爪黨簡要回答)


API:對外提供的服務,一般可能顆粒較小,因為需要考慮服務的復用。

SDK:一個簡單的服務消費者,一般SDK=多個API集成+客戶端會話屬性等,更加趨近消費者業務邏輯,如應用內計費SDK需要兼顧多API調用、安全控制、不可代替的二次確認界面

因此,兩者的區別主要體現在服務使用的開發過程,SDK可能簡單些,原生API可能複雜點,但是SDK本身可能存在問題,如SDK的一些基礎能力的實現(如網路)並不完美,或者SDK中的界面與你的UI風格不一致!


看完後我的理解就是(自有APP流量變現),SDK感覺是乙方提供一些第三方開發的工具,讓我作為甲方更深層次的提供開放。API就是乙方只是通過介面獲取一些內容,我有主動權和調控權


就是sdk是api的集合,然後sdk省略了通過http請求調用api的過程?


謝邀,拿小弟所在公司業務舉例。

最近某個客戶沒有選擇我們而選擇了某個競爭對手。其表達原因之一就是我們接入成本過高,為什麼成本高呢

我們目前接入是採用api的方式極其原始,無法做到快速接入,需要很高的對接溝通成本,另外就是一些數據不可觀測易造成雙方統計誤差不信任。

有了sdk首先會降低接入成本,打包的api介面一次性接入,第三方也能監控到各類數據效果,接入方也會更放心,當然逼格也會高些。


這問題問得,吐槽無力,你說吃飯跟游泳啥區別啊?

SDK當然就是Kit,工具箱嘛,IOS平台上就是XCode,一系列的工具組合在一起,比如你在編輯器里敲代碼的時候它會自動補全代碼,自動錯誤檢查,你點一下Run,它會調用編譯器來自動編譯,編譯完它會調用iPhone的模擬器來運行,這就是SDK,提供整套的開發工具供開發者使用。

OpenAPI就是網站提供的介面,比如你想開發一個圍脖的手機客戶端,你從哪裡讀取數據寫入數據呢?總不能從Web版里調用吧?那裡是一堆一堆的html代碼啊,所以OpenAPI就是網站提供的介面,供開發者接入用的。


推薦閱讀:

UI 設計師提供 iOS 字體和長度應當用什麼單位?
Facebook 發布的 iOS 開發調試工具 「Tweaks」 的使用體驗如何?
手機電池到底應該放完電再充電,還是沒事就充?

TAG:開放平台 | 軟體開發 | iOS開發 | 網站開發 |