**一、什么是API?
**
對(duì)于普通吃瓜而言,API是到底是個(gè)啥真心聽不懂。下面我們來看一下實(shí)例:周末想出去玩,自已不想太累,索性打車,到了車上你告訴司機(jī),去某某地方,司機(jī)明白了,直接將你送到指定位置,而無須你去考慮如何走的問題。這里司機(jī)提供的是打車服務(wù),服務(wù)的提供者就是司機(jī),你就是服務(wù)的調(diào)用者或者使用者。
我們?cè)賮硪訧T的視角來描述下API是個(gè)啥?API(Application Programming Interface,應(yīng)用程序編程接口)是一些預(yù)先定義的函數(shù),目的是提供一種訪問函數(shù)的能力,而又無需訪問函數(shù)內(nèi)部的源碼或者理解內(nèi)部編寫的細(xì)節(jié)。
如果你來對(duì)比一下,可以發(fā)現(xiàn)打車服務(wù)和訪問函數(shù)的能力非常類似。API實(shí)質(zhì)上就是為別人或第三方提供服務(wù)的接口。
二、為什么會(huì)產(chǎn)生API?
前面說到API是為第三方提供服務(wù)的接口,那為什么軟件需要API呢,我們可以從軟件的提供者、使用者、開發(fā)者等幾個(gè)角度來說明:
從軟件提供者的角度來講,特別是“平臺(tái)型”軟件提供者,提供API供第三方應(yīng)用程序來調(diào)用,可以形成生態(tài),才能更有競爭力。如百度AI開放平臺(tái)提供語音、圖像、人臉與人體識(shí)別、視頻等技術(shù)的API,打造全球領(lǐng)先的人工智能服務(wù)平臺(tái)。。
從軟件使用者的角度來講,特別是大型電信運(yùn)營商,在建設(shè)內(nèi)部系統(tǒng)時(shí),一般會(huì)尋求從多家軟件廠商采購,避免被軟件提供商鎖定,出現(xiàn)“結(jié)婚容易離婚難”的窘境。如運(yùn)營商的運(yùn)營支撐系統(tǒng)包含客戶關(guān)系管理系統(tǒng)、計(jì)費(fèi)系統(tǒng)、呼叫中心、合作伙伴關(guān)系管理系統(tǒng)、ERP系統(tǒng)等,通常是幾家軟件提供商共建整個(gè)運(yùn)營支撐系統(tǒng)。
從應(yīng)用開發(fā)者的角度來講,特別是“內(nèi)容聚合系統(tǒng)”之類公司,通過調(diào)用開放的API,可以直接調(diào)用API來做自己的應(yīng)用,集成各大公司的內(nèi)容,并基于此做更高層次的創(chuàng)新。如今日頭條聚合了各家公司的內(nèi)容,外加大數(shù)據(jù)分析推薦系統(tǒng),形成個(gè)性化的服務(wù)。
三、API的幾種形式
1.本地調(diào)用
我們知道在本地調(diào)用非常地簡單,例如實(shí)現(xiàn)如下3個(gè)值的相加,就可以寫一個(gè)簡單的函數(shù),供主函數(shù)main()來調(diào)用。在執(zhí)行過程中,調(diào)用是發(fā)生在同一CPU、內(nèi)存地址空間:
2. RPC
那如果是不同機(jī)器上的不同程序間的調(diào)用應(yīng)該如何來做呢?ANDREW D. BIRRELL在論文《Implementing Remote Procedure Calls》給出了一種解決方案:RPC(Remote Procedure Calls,遠(yuǎn)程過程調(diào)用)。其主要思想是調(diào)用遠(yuǎn)程機(jī)器上的程序就像在本地機(jī)器的地址空間中一樣。隱藏分布式環(huán)境重要的部分:對(duì)參數(shù)和結(jié)果的編解碼、消息傳遞以及保留過程調(diào)用的語義。其基本流程圖如下所示:
①User以本地調(diào)用函數(shù)的方式去調(diào)用User-stub;
②User-stub生成消息并調(diào)用RPC Runtime;
③RPC Runtime將消息發(fā)送給遠(yuǎn)程RPC Runtime;
④遠(yuǎn)程RPC Runtime將請(qǐng)求消息交給Server-stub;
⑤Server-stub提取參數(shù)并調(diào)用Server;
⑥Server執(zhí)行業(yè)務(wù)邏輯,并將結(jié)果返回給Server-stub;
⑦Server-stub生成響應(yīng)消息,而后調(diào)用RPC Runtime;
⑧RPC Runtime將響應(yīng)消息發(fā)送給客戶端RPC Runtime;
⑨RPC Runtime將消息交給User-stub;
⑩User-stub提取結(jié)果信息,返回給User。
3. RESTFUL API
隨著互聯(lián)網(wǎng)的發(fā)展,使得這ICT領(lǐng)域開始融合,“如何開發(fā)在互聯(lián)網(wǎng)環(huán)境中使用的軟件”成為一個(gè)課題,也就是Web 應(yīng)用應(yīng)該如何運(yùn)轉(zhuǎn)?Roy Thomas Fielding認(rèn)為“一個(gè)由Web頁組成的網(wǎng)絡(luò),用戶通過選擇鏈接在應(yīng)用中前進(jìn)(狀態(tài)遷移),導(dǎo)致下一個(gè)頁面(應(yīng)用的下一個(gè)狀態(tài)的表述)被轉(zhuǎn)移給用戶,并且呈現(xiàn)給他們,以便他們來使用”,并在論文《架構(gòu)風(fēng)格和基于網(wǎng)絡(luò)的軟件架構(gòu)設(shè)計(jì)》給出了一種解決方案:REST(Representational State Transfer,表現(xiàn)層狀態(tài)轉(zhuǎn)化)。其主要特點(diǎn)為資源、統(tǒng)一接口、URI、無狀態(tài)。這里說明下資源和統(tǒng)一接口即:
u 資源:將網(wǎng)絡(luò)中任何實(shí)體都看成資源。可以是一段文本、一張圖片、一首歌曲、一個(gè)視頻。其具體的體現(xiàn)形式:文本可以用txt、HTML、XML、Json或二進(jìn)制等格式表現(xiàn)。
u 統(tǒng)一接口:REST架構(gòu)風(fēng)格規(guī)定,數(shù)據(jù)的增刪除查改對(duì)應(yīng)于HTTP方法,統(tǒng)一了數(shù)據(jù)操作的接口,如GET用來獲取資源,POST用來新建資源,PUT用來更新資源,DELETE用來刪除資源。
總的來說,REST可以理解為:使用URL表示資源,使用HTTP的GET\\PUT\\POST等方法進(jìn)行資源的操作。
-
API
+關(guān)注
關(guān)注
2文章
1510瀏覽量
62393 -
源碼
+關(guān)注
關(guān)注
8文章
652瀏覽量
29451 -
函數(shù)
+關(guān)注
關(guān)注
3文章
4346瀏覽量
62968
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論