新聞中心
前言

創(chuàng)新互聯(lián)建站是一家集網(wǎng)站建設(shè),襄陽(yáng)企業(yè)網(wǎng)站建設(shè),襄陽(yáng)品牌網(wǎng)站建設(shè),網(wǎng)站定制,襄陽(yáng)網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營(yíng)銷,網(wǎng)絡(luò)優(yōu)化,襄陽(yáng)網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競(jìng)爭(zhēng)力。可充分滿足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長(zhǎng)自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。
- 什么是 API?
- 什么是 SDK?
兩者之間有何關(guān)系?
歡迎來到本次的每周一問系列。
既然點(diǎn)進(jìn)來了,相信你或多或少都聽說過這兩個(gè)名詞了,因此,在為你解答之前,讓我們先從一個(gè)例子出發(fā)。 假如你想開發(fā)一個(gè) OCR 應(yīng)用(通俗的說就是文字識(shí)別應(yīng)用),他的功能是識(shí)別用戶上傳的一張圖片,然后將圖片中的文字識(shí)別出來返回給用戶。如下圖所示:
通常,OCR 應(yīng)用的后端服務(wù)都會(huì)部署在云上,那么我們應(yīng)該如何在移動(dòng)應(yīng)用程序與基于云的服務(wù)之間進(jìn)行通信呢?
這就是 API 和 SDK 的用武之地了。
- API
- API 的特點(diǎn)
- 通信
首先我們要明白的是 API 是和通信有關(guān)的,是用于應(yīng)用(服務(wù))與其他應(yīng)用(服務(wù))對(duì)話所定義的協(xié)議。在上述例子中,你可以簡(jiǎn)單理解為 API 是 OCR 應(yīng)用和云端服務(wù)之間溝通的橋梁。
那么 API 到底是什么?
API 全稱 Application Programming Interface,即「應(yīng)用程序接口」。
一般是指一些預(yù)先定義的函數(shù),目的是供應(yīng)用程序與開發(fā)人員基于某軟件或硬件得以訪問一組程序的能力,而又無需訪問源碼,或理解內(nèi)部工作機(jī)制的細(xì)節(jié)。
以 Java 為例,當(dāng)你想要實(shí)現(xiàn)一個(gè)數(shù)組排序的功能時(shí),你是會(huì)先手寫一個(gè)排序算法,還是直接使用Arrays.sort()函數(shù)?我想你心里是有答案的。
抽象
其次,我們要理解,API 的另一個(gè)重要特點(diǎn)——抽象。
抽象指的又是什么?
還是以這個(gè) OCR 應(yīng)用為例,當(dāng)我們?cè)谑褂迷贫颂峁┑奈淖肿R(shí)別能力時(shí)(比如百度文字識(shí)別),他的背后可能會(huì)有成千上萬的代碼,比如提供識(shí)別能力的機(jī)器學(xué)習(xí)的代碼、提供 Web 能力的后端代碼等等。
但是你作為一個(gè) APP 的開發(fā)者,你需要去看這些代碼是怎么寫的嗎?難道不知道背后的源碼就不能調(diào)用百度提供的文字識(shí)別能力了嗎?當(dāng)然不是。
通常服務(wù)商已經(jīng)給你提供了文檔,告訴你如何去調(diào)用相應(yīng)服務(wù),只要你按照他的要求來即可。
因此,在你的 APP 和 OCR 服務(wù)之間,API 抽象出所有復(fù)雜的邏輯,簡(jiǎn)化了調(diào)用過程,這使得你只需要考慮獲取所需的數(shù)據(jù)即可。
標(biāo)準(zhǔn)化
API 是標(biāo)準(zhǔn)化的,這意味著存在有關(guān)如何定義 API 的行業(yè)標(biāo)準(zhǔn),比如 SOAP、REST、GraphQL 等。
我在《你的第一本 SpringBoot 書》[1]中寫到什么是 RESTful API,有興趣的小伙伴可以點(diǎn)擊閱讀,這是我正在寫的一本 SpringBoot 入門教程,目前還沒完工,歡迎讀者們不要吝嗇自己的建議 。
API 的構(gòu)成要素
那么,API 通常由什么組成呢?
首先,我們要發(fā)送一些數(shù)據(jù)到云端,即所謂的「請(qǐng)求」。
從本地應(yīng)用發(fā)請(qǐng)求到云端,我們需要分幾步完成,以 REST 為例。
對(duì)于 REST API 調(diào)用請(qǐng)求,第一步是指定傳輸?shù)姆椒?,通常是?HTTP 方法對(duì)應(yīng)的,如下圖所示:
當(dāng)你想要上傳一張圖片時(shí),通常會(huì)使用 POST 方法,然后是傳遞一些參數(shù),包括請(qǐng)求的內(nèi)容(圖像本身)。然后加上需要請(qǐng)求的地址,即可構(gòu)成一個(gè)完整的請(qǐng)求。如下圖所示:
之后,服務(wù)器再以 JSON 等形式將數(shù)據(jù)返還給你,在你使用的云服務(wù)的文檔中也會(huì)有所標(biāo)注。
SDK
說了這么多,你應(yīng)該對(duì) API 有所了解了,那么這時(shí)候問題就來了,作為開發(fā)人員,你如何在實(shí)際的項(xiàng)目中調(diào)用 API?
你要自己構(gòu)造 HTTP 請(qǐng)求、拼接 URL、添加需要的參數(shù)、處理返回的 JSON 對(duì)象,麻煩嗎?
麻煩。
那有沒有什么好的辦法簡(jiǎn)化這些操作,使得我只需要給一張圖片然后就給我返回結(jié)果的呢?
自然是有的,這就是接下來我們要說的 SDK 了。
SDK 全稱 Software Development Kit,軟件開發(fā)工具包。
一般都是一些軟件工程師為特定的軟件包、軟件框架、硬件平臺(tái)、操作系統(tǒng)等建立應(yīng)用軟件時(shí)的開發(fā)工具的集合。
通俗來講就是第三方服務(wù)商提供的實(shí)現(xiàn)產(chǎn)品軟件某項(xiàng)功能的工具包。例如 JDK 就是一種 SDK。
還是以上面的 OCR 應(yīng)用為例,如果使用了某廠商的 SDK 服務(wù),那么我們連 HTTP 請(qǐng)求的構(gòu)建都不需要了,僅調(diào)用一個(gè)方法,可能的代碼如下圖所示。
- OCRResult res = ocrClient.ocr("pic.jpg").getResult();
通過調(diào)用這行代碼,SDK 會(huì)自動(dòng)封裝 API 請(qǐng)求,而且作為響應(yīng),你獲得的結(jié)果也不一定是 JSON 對(duì)象,也有可能是代碼,例如上述代碼段里的OCRResult,這是因?yàn)?SDK 也已經(jīng)將 JSON 對(duì)象反序列化成你需要的對(duì)象,比如一個(gè) Java Model。
SDK 相當(dāng)于開發(fā)集成工具環(huán)境,API 就是數(shù)據(jù)接口。API 可以在 SDK 提供的“環(huán)境”里請(qǐng)求。同樣的,這里的“環(huán)境”也是一個(gè)抽象的概念。如果不使用 SDK,也可以直接調(diào)用 API,只不過,這個(gè)環(huán)境就要由開發(fā)者自己實(shí)現(xiàn)了。
區(qū)別
其實(shí)從上面的內(nèi)容,我們也已了解到,API 在更多場(chǎng)合下更像是 SDK 的一個(gè)子集,他們的區(qū)別如下:
- API 通常是一個(gè)函數(shù),有特定的功能;而 SDK 是一個(gè)很多功能函數(shù)的集合體,更像是一個(gè)工具包。?API 通常扮演數(shù)據(jù)接口的形象,SDK 相當(dāng)于一個(gè)工具環(huán)境,通常是需要在 SDK 的環(huán)境下調(diào)用 APl。?SDK 相較于 API 封裝層次更高。
以上就是本篇文章的全部?jī)?nèi)容了,如果你覺得文章對(duì)你有所幫助,隨手點(diǎn)個(gè)關(guān)注轉(zhuǎn)發(fā)給你的小伙伴們,這對(duì)我真的很重要,你們的支持是我繼續(xù)更文的動(dòng)力,謝謝大家!
文章名稱:API與SDK:有什么區(qū)別?
標(biāo)題鏈接:http://m.fisionsoft.com.cn/article/dhggocs.html


咨詢
建站咨詢
