什麽是API?
什麽是SDK?
兩者之間有何關系?
既然點進來了,相信你或多或少都聽(tīng)說過這兩個名詞了,因此,在爲你解答之前,讓我(wǒ)(wǒ)們先從一(yī)個例子出發。
假如你想開(kāi)發一(yī)個OCR應用(通俗的說就是文字識别應用),他的功能是識别用戶上傳的一(yī)張圖片,然後将圖片中(zhōng)的文字識别出來返回給用戶。
通常,OCR應用的後端服務都會部署在雲上,那麽我(wǒ)(wǒ)們應該如何在移動應用程序與基于雲的服務之間進行通信呢?
這就是API和SDK的用武之地了。
API
API的特點
通信
首先我(wǒ)(wǒ)們要明白(bái)的是API是和通信有關的,是用于應用(服務)與其他應用(服務)對話(huà)所定義的協議。在上述例子中(zhōng),你可以簡單理解爲API是OCR應用和雲端服務之間溝通的橋梁。
那麽API到底是什麽?
API全稱ApplicationProgrammingInterface,即「應用程序接口」。
一(yī)般是指一(yī)些預先定義的函數,目的是供應用程序與開(kāi)發人員(yuán)基于某軟件或硬件得以訪問一(yī)組程序的能力,而又(yòu)無需訪問源碼,或理解内部工(gōng)作機制的細節。
以Java爲例,當你想要實現一(yī)個數組排序的功能時,你是會先手寫一(yī)個排序算法,還是直接使用Arrays.sort函數?我(wǒ)(wǒ)想你心裏是有答案的。
抽象
其次,我(wǒ)(wǒ)們要理解,API的另一(yī)個重要特點——抽象。
抽象指的又(yòu)是什麽?
還是以這個OCR應用爲例,當我(wǒ)(wǒ)們在使用雲端提供的文字識别能力時(比如百度文字識别),他的背後可能會有成千上萬的代碼,比如提供識别能力的機器學習的代碼、提供Web能力的後端代碼等等。
但是你作爲一(yī)個APP的開(kāi)發者,你需要去(qù)看這些代碼是怎麽寫的嗎(ma)?難道不知(zhī)道背後的源碼就不能調用百度提供的文字識别能力了嗎(ma)?當然不是。
通常服務商(shāng)已經給你提供了文檔,告訴你如何去(qù)調用相應服務,隻要你按照他的要求來即可。
因此,在你的APP和OCR服務之間,API抽象出所有複雜(zá)的邏輯,簡化了調用過程,這使得你隻需要考慮獲取所需的數據即可。
标準化
API是标準化的,這意味着存在有關如何定義API的行業标準,比如SOAP、REST、GraphQL等。
API的構成要素
那麽,API通常由什麽組成呢?
首先,我(wǒ)(wǒ)們要發送一(yī)些數據到雲端,即所謂的「請求」。
從本地應用發請求到雲端,我(wǒ)(wǒ)們需要分(fēn)幾步完成,以REST爲例。
對于RESTAPI調用請求,第一(yī)步是指定傳輸的方法,通常是和HTTP方法對應的。
當你想要上傳一(yī)張圖片時,通常會使用POST方法,然後是傳遞一(yī)些參數,包括請求的内容(圖像本身)。然後加上需要請求的地址,即可構成一(yī)個完整的請求。
之後,服務器再以JSON等形式将數據返還給你,在你使用的雲服務的文檔中(zhōng)也會有所标注。
SDK
說了這麽多,你應該對API有所了解了,那麽這時候問題就來了,作爲開(kāi)發人員(yuán),你如何在實際的項目中(zhōng)調用API?
你要自己構造HTTP請求、拼接URL、添加需要的參數、處理返回的JSON對象,麻煩嗎(ma)?
麻煩。