全網最詳解讀兩者區別 api對接和sdk對接區別


全網最詳解讀兩者區別 api對接和sdk對接區別

文章插圖
文章插圖
前言什么是 API?
什么是 SDK?
兩者之間有何關系?
歡迎來到本次的每周一問系列 。
既然點進來了,相信你或多或少都聽說過這兩個名詞了,因此,在為你解答之前,讓我們先從一個例子出發 。假如你想開發一個 OCR 應用(通俗的說就是文字識別應用),他的功能是識別用戶上傳的一張圖片,然后將圖片中的文字識別出來返回給用戶 。如下圖所示:
全網最詳解讀兩者區別 api對接和sdk對接區別

文章插圖
全網最詳解讀兩者區別 api對接和sdk對接區別

文章插圖
通常,OCR 應用的后端服務都會部署在云上,那么我們應該如何在移動應用程序與基于云的服務之間進行通信呢?
這就是 API 和 SDK 的用武之地了 。
APIAPI 的特點通信首先我們要明白的是 API 是和通信有關的,是用于應用(服務)與其他應用(服務)對話所定義的協議 。在上述例子中,你可以簡單理解為 API 是 OCR 應用和云端服務之間溝通的橋梁 。
那么 API 到底是什么?
API 全稱 Application Programming Interface,即「應用程序接口」 。
一般是指一些預先定義的函數,目的是供應用程序與開發人員基于某軟件或硬件得以訪問一組程序的能力,而又無需訪問源碼,或理解內部工作機制的細節 。
以 Java 為例,當你想要實現一個數組排序的功能時,你是會先手寫一個排序算法,還是直接使用Arrays.sort()函數?我想你心里是有答案的 。
抽象其次,我們要理解,API 的另一個重要特點——抽象 。
抽象指的又是什么?
還是以這個 OCR 應用為例,當我們在使用云端提供的文字識別能力時(比如百度文字識別),他的背后可能會有成千上萬的代碼,比如提供識別能力的機器學習的代碼、提供 Web 能力的后端代碼等等 。
全網最詳解讀兩者區別 api對接和sdk對接區別

文章插圖
全網最詳解讀兩者區別 api對接和sdk對接區別

文章插圖
但是你作為一個 APP 的開發者,你需要去看這些代碼是怎么寫的嗎?難道不知道背后的源碼就不能調用百度提供的文字識別能力了嗎?當然不是 。
通常服務商已經給你提供了文檔,告訴你如何去調用相應服務,只要你按照他的要求來即可 。
全網最詳解讀兩者區別 api對接和sdk對接區別

文章插圖
全網最詳解讀兩者區別 api對接和sdk對接區別

文章插圖
因此,在你的 APP 和 OCR 服務之間,API 抽象出所有復雜的邏輯,簡化了調用過程,這使得你只需要考慮獲取所需的數據即可 。
標準化API 是標準化的,這意味著存在有關如何定義 API 的行業標準,比如 SOAP、REST、GraphQL 等 。
我在《你的第一本 SpringBoot 書》[1]中寫到什么是 RESTful API,有興趣的小伙伴可以點擊閱讀,這是我正在寫的一本 SpringBoot 入門教程,目前還沒完工,歡迎讀者們不要吝嗇自己的建議。
API 的構成要素那么,API 通常由什么組成呢?
首先,我們要發送一些數據到云端,即所謂的「請求」 。
從本地應用發請求到云端,我們需要分幾步完成,以 REST 為例 。
對于 REST API 調用請求,第一步是指定傳輸的方法,通常是和 HTTP 方法對應的,如下圖所示:
全網最詳解讀兩者區別 api對接和sdk對接區別

文章插圖
全網最詳解讀兩者區別 api對接和sdk對接區別

文章插圖
當你想要上傳一張圖片時,通常會使用 POST 方法,然后是傳遞一些參數,包括請求的內容(圖像本身) 。然后加上需要請求的地址,即可構成一個完整的請求 。如下圖所示:
全網最詳解讀兩者區別 api對接和sdk對接區別

文章插圖
全網最詳解讀兩者區別 api對接和sdk對接區別

文章插圖
之后,服務器再以 JSON 等形式將數據返還給你,在你使用的云服務的文檔中也會有所標注 。
全網最詳解讀兩者區別 api對接和sdk對接區別

文章插圖
全網最詳解讀兩者區別 api對接和sdk對接區別

文章插圖
SDK說了這么多,你應該對 API 有所了解了,那么這時候問題就來了,作為開發人員,你如何在實際的項目中調用 API?
你要自己構造 HTTP 請求、拼接 URL、添加需要的參數、處理返回的 JSON 對象,麻煩嗎?
麻煩 。
全網最詳解讀兩者區別 api對接和sdk對接區別

文章插圖
全網最詳解讀兩者區別 api對接和sdk對接區別

文章插圖
那有沒有什么好的辦法簡化這些操作,使得我只需要給一張圖片然后就給我返回結果的呢?
自然是有的,這就是接下來我們要說的 SDK 了 。
SDK 全稱 Software Development Kit,軟件開發工具包 。
一般都是一些軟件工程師為特定的軟件包、軟件框架、硬件平臺、操作系統等建立應用軟件時的開發工具的集合 。
通俗來講就是第三方服務商提供的實現產品軟件某項功能的工具包 。例如 JDK 就是一種 SDK 。
還是以上面的 OCR 應用為例,如果使用了某廠商的 SDK 服務,那么我們連 HTTP 請求的構建都不需要了,僅調用一個方法,可能的代碼如下圖所示 。
OCRResult res = ocrClient.ocr("pic.jpg").getResult();通過調用這行代碼,SDK 會自動封裝 API 請求,而且作為響應,你獲得的結果也不一定是 JSON 對象,也有可能是代碼,例如上述代碼段里的OCRResult,這是因為 SDK 也已經將 JSON 對象反序列化成你需要的對象,比如一個 Java Model 。
SDK 相當于開發集成工具環境,API 就是數據接口 。API 可以在 SDK 提供的“環境”里請求 。同樣的,這里的“環境”也是一個抽象的概念 。如果不使用 SDK,也可以直接調用 API,只不過,這個環境就要由開發者自己實現了 。
區別其實從上面的內容,我們也已了解到,API 在更多場合下更像是 SDK 的一個子集,他們的區別如下:
【全網最詳解讀兩者區別 api對接和sdk對接區別】?API 通常是一個函數,有特定的功能;而 SDK 是一個很多功能函數的集合體,更像是一個工具包 。?API 通常扮演數據接口的形象,SDK 相當于一個工具環境,通常是需要在 SDK 的環境下調用 APl 。?SDK 相較于 API 封裝層次更高 。