API(Application Programming Interface,應用程序編程接口)
簡單來說,就是其他人開發出來一塊程序,你想用,他會告訴你調用哪個函數,給這個函數傳什么參數,然后又會返回給你一個什么樣的結果,你不需要知道他函數里面到底是怎么做的,只要清楚這樣調用就能實現某種功能就可以了。
比如別人已經做好了一塊幾何處理程序,你想拿來算圓的面積,他會告訴你把半徑傳給他,他就把面積值傳給你,至于他里面是怎么算的不用你管。
API是這種模式再復雜很多的應用,涉及硬件軟件多方面的工作,不過總體來說就是他告訴你怎么用能產生什么結果,你就直接拿來用就行了
?
追問
就比如現在LBS網要和圍脖連動起來
那API 用在哪里? 幫我分析下 謝謝
追答
我不知道你是做的哪一邊,總之要看另一方提供給你了什么功能來使。
比如你要在網頁上展示微博內容,那微博供應方應該給你提供出相應的接口,你照他的說明操作就OK,反之亦然。
API不是用在哪里,而是你要在哪里用,就問對方有沒有在這方面能提供給你的,拿來用,如果他沒提供你就根本用不了,明白?
追問
那就是說:我做一套網站或軟件
然后比如
我里面地圖 我就調用google的API
簽到就調用 LBS網站的
微波掉用 SINA的
信息調用 大眾點評的API
那我就是負責把參數調整好,把界面做好
功能都讓他們去為我實現??
那不是簡單了很多啊
那數據呢
在我自己這? 通過他們的API不是? 數據也會陪他們拿掉嗎
追答
API就是這樣啊,你以為他能有多復雜
數據肯定會形成共享,這是與別人合作的必然,人家做事也得是有利可圖不能做白工
你需要決定取舍,圖省事就用別人現成的,想自己控制性大一些就自己另起爐灶
建議是找一些口碑好一些的
不過企業級站點的話,用這些API恐怕會涉及一些商業應用協議,需要提前了解
大家可能最近經常聽到 API 這個概念,那什么是API,它又有什么特點和好處呢?
wiki 百科鎮樓
…[APIs are] a set of subroutine definitions, protocols, and tools for building application software. In general terms, it’s a set of clearly defined methods of communication between various software components.
翻譯:API 是用于構建應用程序軟件的一組子程序定義,協議和工具。一般來說,這是一套明確定義的各種軟件組件之間的通信方法。(回來再看(。???)ノ)。
本篇文章中,我會用淺顯的比喻來解釋API,接口(interface),協議(protocol)這些基本概念。enjoy it !
假設你有一個銀行
你有一個倉庫來存錢,一個記賬本來記各種業務。一個簡單的管理銀行的方法是直接將權限給所有人,讓客戶自己動手完成各種業務。
這種模式下,一個客戶想要存錢的話,他需要:
- 拿著錢去銀行
- 打開倉庫把錢放進去
- 把這筆業務寫到記帳本上
- 離開銀行
顯然這存在著問題:
- 想開開倉庫門需要廢很大力氣,并不是所有的人都能打開,還有些人不識字不會記賬。
- 在這個模式下,我們假定所有人都是誠實的,顯然這并不成立。(說不定哪一個人存了100塊錢記賬的時候寫了10000塊)。
這時你遇到麻煩了。
雇一個柜員
要是我們雇一個體格棒,辦事還麻利的人來處理開倉庫,記賬的問題呢?
小娜登場了。
現在模式為:建一個柜臺將倉庫和記賬本和顧客分開,這樣顧客就不需要再去管倉庫和記賬本了。想存錢的話直接找小娜就行。
這種模式下,要是有人想存錢,他們必須:
- 拿錢去銀行
- 告訴小娜我是 MMM 我想要存¥¥¥。
- 小娜打開倉庫把錢放進去
- 小娜把業務(transaction )記錄好
- 告訴你業務辦好了
- 顧客離開銀行
現在不會發生打不開倉庫門或者是記錯賬的情況了,你覺得很滿意。
到此我們引出今天的主角API( Application Programming Interface),它能夠幫你實現輕松的和其他軟件組件(如服務器,操作系統等)的交互。
在上面舉的例子中,我們雇一個收納員幫顧客解決了開倉門,放錢,記賬這一系列繁瑣的過程。這大大節省了顧客的時間,同時提高了銀行的效率。同理,如果我們將操作的具體實施步驟抽象化,這將會大大降低開發人員的負擔(去記憶所有的步驟花費的力氣),從而大大提高了效率。
另外的好處是,只要他們遵循了同一個協議,組件可以交換或者是改變。銀行不需要知道時哪一個顧客或者說顧客是怎么進來的,顧客也不需要知道銀行拿自己的錢去做什么了。只要負責的柜員在這里并做好工作,整個流程將會繼續工作。
API 應用范圍很廣:從操作系統中簡單的 fork() 到我們接觸的百度地圖API,和風天氣API,又或者是邢遠分享的段子,這些 API 都大大簡化了程序員的工作。
銀行里有什么
你可能已經注意到了銀行分成了兩個區域:顧客在前臺排好隊來辦理業務,后臺完成各種對錢的操作。在中間層,前臺和后臺發生了交互,雙方都不能越界,交互只能發生在中間的區域。
在 API 術語里面,我們管中間的這塊區域叫做接口?Interface;在這里各個部分發生交互。在我們的銀行中,前臺和后臺都同意并且規定使用 Interface 來交換信息。
現在,我們假定 Bob 想要取錢。他到了柜臺找到了小娜,小娜知道該怎樣去取錢,她取好了之后告訴了 Bob。
Bob 這時候又問:“你知道今天的股票行情嗎”
小娜:????WTF ?
在這個例子里面,小娜知道怎樣取錢和存錢 , 但是她不知道如何去給Bob查查今天的股票行情是怎樣的。這個例子引出了另一個概念?協議(Protocol)。
在 API 術語中,協議 是規定了各部分之間如何進行交流的一系列規則的集合。各部分之間想要完成交互必須理解并且遵守同一個協議。
同時,我們注意到了交換時用的是中文。如果Bob 對小娜說「我想撳五百蚊出嚟呀唔該」,小娜不懂廣東話,所以沒法理解Bob說的是什么,這又引出了另一個概念?格式(Format)
在程序員的世界里,通用的格式包含?XML和JSON。
最后,讓我們假設銀行想要擴展業務到股市,這時候就需要一位特殊的接待員來處理與股票相關的業務了,這時,小冰就登場啦。?
在 API 術語里面,?API 端點通常是指在同一個接口中提供特定功能子集的服務提供者。在這種情況下,小冰和小娜都是端點。(小冰和小娜是同一個柜臺不同功能的提供者)不同的端點可以有不同的協議和不同的格式。
總結起來:接口是不同組件進行交互的地方。協議是一系列規定了他們之間怎樣進行交互的規則。格式定義了他們通過什么進行交流(JSON或者是XML),端點可以在同一個接口里面提供不同的功能。
柜員還能干什么?
到現在我們把 API 的基礎知識過了一遍,接下來我們再來談一談 API 的其他特征。w(゚Д゚)w
現在又有客戶來取錢了,他想要取¥10000。?
首先,我們可以指示小娜在操作前先去確認一下 Bob 是否真的有這么多錢。(API 能確認所有的操作都是合法的。)
小娜查到 Bob 賬戶里只有一百塊了,告訴 Bob 余額不足。(在發生錯誤的時候 API 會根據錯誤報告機制發出指示,減輕開發人員的負擔。)
Bob 認為肯定是哪里出錯了,他要求銀行給他列一張表,給出他所擁有的每個賬戶上的余額。結果顯示一共有 200 個賬戶。把他們一下子全給列出來不太實際,所以小娜每次給 Bob 看十個賬戶,看完了之后再來十個。(這叫做分頁(pagination),可以節省帶寬和服務器資源,因為你不需要一次獲取數據集中的所有內容。)
如果 Bob 只想要知道他某一個賬戶中的余額的話,他可以要求小娜只給她看那個的(這稱為過濾(filtering),它還有助于節省帶寬和資源,并且更易于導航。)
在檢查完所有賬戶之后,鮑勃現在知道他的帳戶中確實沒有10000美元。他知道愛麗絲購買股票并獲得了大量資金,于是偽裝成愛麗絲并重新進入銀行。他告訴莎莉:“我是愛麗絲,我想從我的賬戶中提取10000美元。” 小娜識破了他的騙局。(API中內置授權和訪問控制,以確保只有授權人員才能訪問特定數據。)
最后,在試圖從銀行拿到10000美元失敗后,他想報復小娜,他進入銀行并多次從賬戶中提取0.01美元。 (我們可以實施速率限制來控制服務器資源的使用,以確保用戶不會濫用服務。)
API 通常都會被設計具有這些功能,它可以充當防火墻,在保護您的資源免受濫用的同時允許合法請求通過。
再讀Wiki
…[APIs are] a set of subroutine definitions, protocols, and tools for building application software. In general terms, it’s a set of clearly defined methods of communication between various software components.
API 是用于構建應用程序軟件的一組子程序定義,協議和工具。一般來說,這是一套明確定義的各種軟件組件之間的通信方法。
現在是不是頭腦里對這個概念清晰多了呢。