石宏
API做為每個重要信息技術趨勢的核心內(nèi)容,移動設計、云計算、物聯(lián)網(wǎng)、大數(shù)據(jù)及社交網(wǎng)絡等應用都依賴于一個基于WEB的界面與它們的分布式組件進行連接,為全球范圍內(nèi)的各個商業(yè)領域提供具有創(chuàng)新性和顛覆性的解決方法。而API的使用既是催化劑,也是促成成果的主要力量。
什么是API
應用程序接口(Application Programming Interface,API),就是接口,也是通道,負責一個程序和其他軟件的溝通,本質(zhì)是預先定義的函數(shù)。
舉個簡單的栗子,假設物流中“貨物”是數(shù)據(jù),存放貨物的“總倉庫”是數(shù)據(jù)庫,“店鋪”是我們的網(wǎng)站、APP。頁面上顯示的內(nèi)容、數(shù)字以及用戶的操作請求和結果都是需要不停搬運的“貨物”數(shù)據(jù),則負責調(diào)配分配打包的中轉(zhuǎn)站就是API,店鋪小哥直接從中轉(zhuǎn)站取貨就好。
對于軟件提供商來說,開放API,讓別的應用程序來調(diào)用,形成生態(tài),軟件才能發(fā)揮最大的價值,才能更有生命力。
對于應用開發(fā)者來說,有了開放的API,就可以直接調(diào)用多家公司做好的功能來做自己的應用,不需要所有的事情都自己操刀,節(jié)省精力。
API就是技術服務商為客戶提供服務的方法。
作為一名程序員,如果沒跟API打過交道同樣是件不可思議的事情。
當然我們在互聯(lián)網(wǎng)時代所說的狹義的API概念可能與桌面軟件時代廣義的API有所不同。在維基百科中是這么定義的:API就是軟件系統(tǒng)不同組成部分銜接的約定。由于近年來軟件的規(guī)模日益龐大,常常需要把復雜的系統(tǒng)劃分成小的組成部分,編程接口的設計十分重要。程序設計的實踐中,編程接口的設計首先要使軟件系統(tǒng)的職責得到合理劃分。良好的接口設計可以降低系統(tǒng)各部分的相互依賴,提高組成單元的內(nèi)聚性,降低組成單元間的耦合程度,從而提高系統(tǒng)的維護性和擴展性。
API的哲學意義
生活中,每天的穿衣、吃飯、如廁、睡覺是最基本的訴求。但人類文明發(fā)展至今,我們穿的衣服、出行搭載的交通工具、吃飯的糧食、住的房子等等一切幾乎很少是我們直接參與生產(chǎn)的,在經(jīng)濟學中我們稱之為社會分工。分工最大的好處,就是熟能生巧,讓專業(yè)的人做專業(yè)的事,而需要這些資源的人,可以拿自己生產(chǎn)的物資間接(貨幣)或直接的交換。
追溯到社會的發(fā)展,從最簡單的采集狩獵時代,逐漸演變成現(xiàn)在這樣錯綜復雜的結構,在未來它會繼續(xù)的演化產(chǎn)生更細致的分工。在這個漫長演化過程中,人類的社會文明中逐漸產(chǎn)生了語言、文字、貨幣、契約等這些維系社會結構的基本要素;類比信息時代,這些要素就是不同的社會分工群體之間互相調(diào)用的“API”規(guī)范。
原子、電子之間的相互作用也好,人類社會的交易合作也好,IT系統(tǒng)之間通訊的API也好,其哲學意義的本質(zhì)都是一種契約(規(guī)則),這個所有成員共同維護的契約讓難以解決的復雜問題變得簡單。
API的分類
早期計算機網(wǎng)絡應用程序有C/S和B/S兩種架構模式,這兩種架構模式各有優(yōu)缺點。隨著Web技術越來越成熟,各種技術規(guī)范也層出不窮,后來在大型互聯(lián)網(wǎng)公司中流行起來的開放平臺促成了第三種架構:OpenAPI。
應用程序API
這里主要指的是非WEB應用程序,它為第三方開發(fā)者提供了可控訪問軟件內(nèi)部功能的接口。例如:Windows API(https://msdn.microsoft.com/zh-cn/library/windows/desktop/ff818516(v=vs.85).aspx)和Android(https://developer.android.com/guide/index.html),他們通過暴露操作系統(tǒng)核心API,使應用程序在獲得授權的情況下使用受系統(tǒng)保護的計算機硬件資源(IO設備、GPS等);瀏覽器同樣為JavaScript準備了API(https://developer.mozilla.org/zh-CN/docs/Web/API),這樣就使HTML、CSS、JavaScript經(jīng)過渲染顯示出各種程序設定的文字、圖像及聲音等。
應用程序API通常適用于當前設備內(nèi)的應用程序交互。
基于WEB的私有API和OpenAPI
和應用程序API比起來,RESTful API、OpenAPI更被WEB程序員所熟知。它們是更高級的API(資源和業(yè)務屬性更強)。根本上它是脫離操作系統(tǒng)的限制,從WEB資源的角度定義了API交互的規(guī)則。
WEB服務端通過RESTful API向客戶端提供數(shù)據(jù)資源的訪問通道,PC瀏覽器、iOS、安卓等平臺中運行的終端APP能夠按照既定的規(guī)則使用服務器中的數(shù)據(jù),使分布在各處的用戶可以借助不同的設備連接到服務中心,服務商以此提供娛樂、購物、聊天、內(nèi)容咨詢等。
在私有API中,還有一種微服務API,它與微服務架構風格息息相關。但微服務API一般無法在公網(wǎng)使用的,它把幾個相對簡單的子系統(tǒng)有機結合,形成一個整體并對外提供一個足夠復雜的服務。OpenAPI是對外部IT系統(tǒng)提供的一種資源調(diào)用方案,一般都有嚴格的鑒權規(guī)則,來確保資源被安全的使用。
用一張表格比較不同API的特點:
OpenAPI會成為IT系統(tǒng)的標準功能
現(xiàn)在,你可以打開百度,搜索關鍵詞“開放平臺”。瀏覽檢索到的結果,你會發(fā)現(xiàn)幾乎所有耳熟能詳?shù)幕ヂ?lián)網(wǎng)公司都有自己的開放平臺生態(tài),他們通過OpenAPI讓開發(fā)者可以方便的使用他們的服務,并以此擴大自己的影響力。
一個既成事實是:沒有API,所有的IT系統(tǒng)都會成為數(shù)據(jù)孤島;一個IT系統(tǒng)的OpenAPI被其它IT系統(tǒng)調(diào)用的規(guī)模,是這個IT系統(tǒng)價值的關鍵指標。我認為,IT系統(tǒng)之間的API經(jīng)歷了3個階段:
以懶豬行(阿里云API應用創(chuàng)新大賽參賽企業(yè))的模式和經(jīng)驗為例:懶豬作為旅業(yè)S2B平臺,掌握豐富的境外目的地落地資源,為了把這些資源的價值最大化,我們充分借助各大OTA平臺的OpenAPI向分銷商家賦能,讓懶豬的S端資源與國內(nèi)的旅業(yè)生態(tài)無縫接合。同時,在未來懶豬會借助OpenAPI系統(tǒng),讓下單、訂單處理等過程變得可以程序化,使與合作伙伴業(yè)務能力的全面對接成為可能。這對業(yè)務團隊的人效提升是相當可觀的,在IT時代我們應當這么做,像馬克思說的:科學技術是第一生產(chǎn)力。
阿里云已將其業(yè)務能力完全API化,并提供多語言SDK。它憑借一套OpenAPI,讓開發(fā)者可以通過內(nèi)部編程的方式靈活的部署配置公有云產(chǎn)品,而且OpenAPI使得調(diào)用云端資源變得比使用自己本地的資源還方便,IT系統(tǒng)之間的合作不就應該是這樣子嘛。
最后,以“Galls Law”結尾
A complex system that works is invariably found to have evolved from from a simple system that worked.
A complex system designed from scratch never works and cannot be made to work.You have to start over,beginning with a working simple system.
“A simple system may or may not work.”
互聯(lián)網(wǎng)時代的上半場還沒有結束,API會讓“互聯(lián)”二字演繹的更加透徹,讓承載人類文明的全球信息系統(tǒng)更加緊密相連。