如何向沒有計算機基礎的人解釋 API 介面是什麼?


用A公司和B公司舉例

A有資料庫 有業務邏輯 但A不願意把資料庫的訪問許可權給B ,
於是A方自己開發了一套API(數據查詢,業務邏輯等)代碼,
表現形式是URL地址就是以http開頭的網頁地址,
告知了B如何使用該地址(即溝通的密鑰或token,總之是一些安全機制,確保只有B可以訪問,而不是CDEF這些阿貓阿狗的黑客也湊熱鬧)。
於是乎B就能對A方提供的API進行各種請求達到獲取數據結果或者發送業務請求的目的。

還有一些API叫做公開API,是啥意思呢 就是A公司把他的數據或業務公開給廣大的用戶,比如C,D,E,F公司 。這些公司的程序員通過簡單的在A公司註冊,獲取了使用公開API的許可權,就可以開發代碼調用這些API實現一些功能。

比如國家的水電煤繳費系統假設是由A公司控制的,A公司開放繳費介面,B,C,D,E 等各家省級代理公司可以根據商業合同拿到A公司的繳費API介面 實現他們自己區域的繳費服務, 比如用戶能在淘寶上繳水電煤,也可以在微信上繳水電煤。 其實就是淘寶和微信相當於B,C公司,實現了上游某大Boss的水電煤繳費API。
(以上例子並非真實,只是為了說明問題杜撰的,請大家不要鑽牛角尖 說水和電不是由同一個大Boss控制的)


說了這麼多大家就明白了API就好比半開放,賣藝不賣身的意思。

在不考慮商業合同和道德的前提下,API的提供者擁有最終話語權,API介面的提供者說封誰就封誰,比如微信介面,說關閉就關閉。API提供者的姿態就是API是我家提供的,我想給誰用就給誰用,我想什麼時候停止你使用就什麼時候停止你使用。


去麥當勞買巨無霸,不需要知道巨無霸是怎麼做的,反正你下單之後就會有得吃。


-------------update-------------

感謝@陳塵 的完善,

而調用API便是這個一手交錢一手交貨的過程,製作巨無霸則是API背後的東西


介面存在的價值——使用別人的功能

1.你想要使用水,你就接上「水龍頭」
2.你的網站想要使用「QQ登陸」,「微博登陸」,需要接上QQ提供的「登陸驗證介面」
3.企業中,B系統想要使用A系統的功能,需要接上A系統提供的「介面」

使用「登陸介面」,「分享介面」來獲得QQ登陸,分享功能

例子,只要「虛擬運營商系統」接入聯通的介面,就能實現「聯通核心業務支撐系統」的功能


好多人的回答都是懂的人才能懂的回答。。

我試試用比喻來解釋

比如你有個小店,提供某種服務,但是你的客戶都不懂那些專業術語也不好直接跟你開口,畢竟你也忙,而你也不想讓那幫客戶和你的員工直接見面。

於是你發明了一種暗號,顧客說「天王蓋地虎」,就是說要A套餐服務

顧客說「上山抓老鼠,帶碗面」就是說要B套餐服務,順帶叫個外賣助興

等等

這些暗號解決了你客戶和你前台小姐溝通的問題,他們想要什麼服務,直接講暗號,然後你的前台服務人員就會準備相應的服務。


然後這一整個暗號體系就稱之為API了。。。


然後現在你把這個服務想像成你的資料庫,你把這些客戶理解為網民,開發者。然後你有一套程序來當前台小姐,專門接受暗號並跟後台調用服務。


不管是政府系統、軍隊系統、機電系統、計算機系統還是什麼系統,系統對外都會提供一定的功能/服務。

比如說,政府系統提供公共服務,軍隊系統提供國防服務,機電系統提供做功服務,計算機系統提供信息服務。

而這些系統功能的使用途徑,政府為「辦事窗口」,軍隊為「主席令」,機電系統為「開關」、「按鈕」,計算機系統為」滑鼠」、「鍵盤「……等等,通稱為」界面「或者」介面「(interface)。

其實,計算機系統還有一種不需要滑鼠和鍵盤,而是通過程序員編寫代碼/命令進行遙控的使用途徑,稱為「應用編程介面(API)」,由計算機系統的擁有者開放給它的使用者。

比如知乎就對用戶開放了一些API,程序員可以通過編寫代碼操作他在知乎上的賬號,而不需要用滑鼠鍵盤在瀏覽器上手動操作。

總之,開放給人用的界面,就叫interface;開放給程序代碼使用的,就叫application programming interface啦。


楊貴妃說我想吃新鮮的荔枝(這是一個比較頂層的API調用,調用者不關心底層是怎麼實現的),於是唐玄宗就派人去嶺南採摘荔枝,然後快馬加鞭,日夜兼程地送來長安,聲勢浩蕩,煙塵滾滾(這個是底層API調用,比較耗時),,人們並不知道這是怎麼回事,妃子笑了因為她看見(它的API調用返回了)快遞到了


(感覺大家解釋的很多都不太好,要麼太專業,要麼太"不專業"……說說自己的理解)
以我目前水平接觸到的介面
分為編程語言上的那種API,以及網頁請求的那種API。
編程語言的那種不好解釋畢竟要說到編程相關。不過網頁請求的那種還是比較好說明的。

舉個最簡單的例子。百度地圖的位置查詢,百度提供位置查詢服務,我們輸入一個參數(地名),返回經緯度的數值。這樣的服務就是API。

在編程上講interface感覺用Java來說比較好。有種東西叫setOnClickListener或者滑鼠鍵盤的Listener,有這樣介面(interface)就是能夠響應到你 點擊/按鍵 的這一action。編程的話我們根據點擊的操作繼續編寫程序執行接下來的程序流程。

介面是對於點擊/按鍵這個動作而言的,提供這樣的功能能夠讓我們獲取到點擊的信息,然後就可以做進一步的事情……

(這一塊我說的可能不是很清楚……請大佬們指教)


第一句話:API(Application Programming Intererface)是應用程序 (通過編程代碼方式調用的) 介面。

第二句話:介面就是一種資源及其輸出管道。例如:天然氣管和管道介面、電源和電源插座、自來水和自來水開關。

第三句話:可編程的方式調用,指介面不是實體管道和開關,而是代碼形容的開關和管道。

第四句話:應用程序就是你用的或者程序員寫的代碼。

組合起來就是:軟體(或軟體開發人員)使用寫代碼的方式訪問其他人寫的代碼的一種管道。


介面就是插口。
為啥一個小插座可以給各種類型的電器供電呢。因為電器統一了介面。什麼電器都可以插那個插口。是不是很方便。

那麼接線板呢?這叫遞歸組合。自己只插一個。但是好多人都能插。這樣再也不會因為只有一個介面而煩惱啦。這種本身沒什麼用但是可以讓介面變得更加好用的東西叫做設計模式。比如接線板啦。USB HUB啦。公路交通網啊。血管系統啦。這些都是設計模式。

總之。介面就是統一規格的。可以插來插去的東東。這種設計把一個巨大而複雜的連動過程切割成了一個個可以獨立分割的組件。通過不同組件的相同介面。以實現普式性和動態解耦的目的。

通俗的說。就是介面就是為了方便啦。所以這個世界上其實是介面滿天飛的。比如插頭插座啦。螺絲刀和螺絲啦。燈泡和燈泡槽啦。神經的突觸連接啦。加油系統啦。男人女人啦。等等等等。

===================

這麼想的話。。。單身狗的存在其實是介面不足導致的問題。而介面不足則用遞歸組合就可以解決了。。。

那麼這個遞歸組合。。。。。。


你女朋友願意跟你在一起,而沒有選擇別的人,反過來也可以,互相有限制的選擇,這就是API。


看到問題描述中是寫到「一直看到很多關於接API以及API介面的問題,但是不明白具體的意思。看了一下百度上給的答案也不太明白」,因此我猜想題主可能是以為互聯網相關從業人員,也因此可能會在各種會議上聽到程序猿討論到「這裡要加一個API」,「我們暫時的API還不能實現這個功能」之類的狀態,因此我在這裡嘗試用5分鐘講明白什麼是API。

在百度裡面搜索,API的解釋為「API(Application Programming Interface,應用程序編程介面)是一些預先定義的函數,目的是提供應用程序與開發人員基於某軟體或硬體得以訪問一組常式的能力,而又無需訪問源碼,或理解內部工作機制的細節。」

這樣看來似乎唯一能看懂的就是「API=介面」。

介面,似乎就像是「黑客帝國」,「攻殼機動隊」裡面那種在人腦後面連一根線,然後就能夠通過那根線獲得各種能力的東西。就像是英吉利海峽隧道那樣,直接可以實現大眾從歐洲往返英國的需求。這樣說來,其實API就是一個實現XXX的通道而已

如同京東在倉庫里碼放成幾層樓高的貨物,也會在用戶下單之後被智能倉儲系統分揀到不同的城市的物流線路上,由機械手和各種高科技實現物流的配送過程,提高質量與效率。

在統籌布局,建設一張四通八達、布局合理倉儲網路的同時,京東不斷升級和優化倉儲中心的各個工作單元,提高「點」的質量和效率。每一件貨物進入京東倉庫都會經過「入庫、上架、揀貨、複核、打包」等作業流程,最後轉入物流配送環節,如果不能夠將這些環節標準化、規範化,商品在倉儲環節就很有可能受到損害。
目前投入運行的亞洲一號一期工程,建築面積約為10萬平方米,分為立體庫區、多層閣樓揀貨區、生產作業區和出貨分揀區,「亞洲一號」的倉庫管理系統、倉庫控制系統、分揀和配送系統等整個信息系統均由京東自主開發,自動化、智能化技術的採用大大提升了效率,降低了人為因素對商品品質的影響。以「出貨分揀區」為例,因為採用了自動化的輸送系統和代表目前全球最高水平的分揀系統,分揀處理能力達16000件/小時,分揀準確率高達99.99%。

所以如果進行這樣的類比,那API就是類似物流倉庫中的智能倉儲系統一樣,幫助用戶看到那些原本存放在資料庫中文件的工具了。

可能這樣只是講清楚了什麼是API,那在講一下我們生活中哪些地方背後都有API實現吧~

比如我們在百度中搜索天氣,背後是調用了氣象局的數據。通過調用API,滿足了用戶輸入「天氣+城市」就可以看到天氣的需求。

比如在企查查(企查查)裡面搜索公司名字,背後則是調用了企業信息查詢的數據。通過調用API,滿足了用戶輸入「企業名稱」就可以看到企業信息資料的需求。

不僅國內的信息可以通過API進行查詢,海外的信息也可以通過API介面進行查詢,市面上也有企信查(企信查)這樣的公司提供了查詢海外企業信息查詢的相關工具。

甚至比如遊戲中的實名註冊,也是採用了對應的API介面才可以實現這個功能。

前一段時間鬧得沸沸揚揚的「阿里屏蔽順豐快遞查詢(順豐對菜鳥關閉數據介面 因數據問題與阿里積怨已久)」事情的背後也有API介面扮演了一定的角色。

總而言之,作為一個普通用戶來說,網站,APP這些東西都是運行在用戶自己的手機和電腦中,而和我們相隔萬里的資料庫和API才是背後實現這一切功能的真正原因。

當然了,上面說的這幾個栗子只是為了幫助大家更好的理解什麼是API,實際情況下API的應用使用邏輯會更加複雜啦。

參考鏈接:

API數據介面_免費數據調用-聚合數據

企信查 - 企業信息,一查便知

企查查-專業的企業信息查詢_公司查詢_企業信用信息查詢_企業工商信息查詢_企業註冊信息查詢_工商登記信息查詢_系統網站


就理解為「遙控器上的按鍵」吧。它的本質是,我的功能給你(以一種你比較便利的方式)使用的途徑。

按這個可以加頻道,按那個可以回放——嗯,人家做好的一套東西放那,開放了一些操作按鈕給你。你只管根據你的想法去用(可能要參考說明書)就行了。


需要引用服務(Service),服務提供者(ServiceProvider),服務消費者(ServiceConsumer)的概念,這些概念和其他面向消費者的服務領域是基本一致的,比如儲蓄服務、電信業務等

消費者在購買服務後,雙方會簽訂服務契約,契約中明確規定消費者必需按照何種方式使用服務,而服務提供者必需按照這種約定的方式提供服務。

這種消費者和提供者之間約定的,使用服務的方式被稱為Interface。被直接翻譯成「介面「,也有按語義翻譯成「機制」的。它被用來描述消費者怎樣使用服務,同時也約束服務提供者怎樣提供服務。

API是Application Programing Interface的縮寫,意思就是給計算機程序用的服務訪問機制。


看了下,以上答案還是太專業,你去給大街上的賣菜大媽說,大媽很定聽不懂。
你要這樣說 :
API就像電視機的開關,換台按鈕
就像手機的按鍵,總之就是你不需要知道內部實現原理,就可以實現功能的東西


你想要娃。

找妹子做神秘活動,妹子的神秘部位就可以叫介面。

你用神秘活動通過介面調用了妹子的造娃功能。

而妹子本身如何造娃的,你特么知道了有毛線用??你是能分擔痛苦還是能替生?

有妹子的去給娃賺奶粉錢,

沒妹子的還不滾去搬磚?


純搬運工,附上原文網址:設計新人必備:5分鐘理解什麼是API! - Dianrong Design Center

-----------------------------以下純複製粘貼-------------------------------------------------------------------------------

如果作為新人的你有這樣的經歷:在會議上聽到前後端的程序員們對著你給出的設計稿討論「這邊要加一個API」、「那個頁面的API要改動」,特別是他們說了一堆你不太懂的事情還反過來問你:你覺得要用什麼方案?(WTF)又或者,那幫人最終討論的結果是某個「介面」沒法做,導致你的設計稿得改改改,然而你一臉懵逼,並搞不清楚狀況。那麼這篇文章有可能幫到你了解自己的處境(雖然說服那幫固執的開發還得靠你自己)。

那麼到底什麼是程序員口中API ???

度娘的解釋是這樣的:

  • API(Application Programming Interface,應用程序編程介面)是一些預先定義的函數,目的是提供應用程序與開發人員基於某軟體或硬體得以訪問一組常式的能力,而又無需訪問源碼,或理解內部工作機制的細節。

你懂了么?如果你不是學程序的還說看懂了,我想你一定還沒有呂朋友……好像唯一能看出來的就是:API=介面

下面是我身邊那些老司機同事們的解釋:

  • 「一個聯通前端和後端的通道,通常用欄位來做暗語,就叫API。」(by 某少女心的PM)
  • 「API是,面向網頁、手機APP等終端設備和應用,提供和網站後台進行交互的入口。」(by 某經驗豐富的後端大神)
  • 「這是個哲學問題,API應該是服務開發者和服務使用者之間制定的關於如何服務使用的約定。」(by 某段子手文藝前端男青年)

從老司機們的描述中,我們看到和API有關的總有兩個角色出現:」前端-後端「、」網頁APP-網站後台「、」開發者-服務使用者「;而API發揮的則是:」聯通xxx的通道「、」進行交互的入口「、」xxx的約定「等串聯那兩個角色的作用

似乎有一些眉目,但還是有點模糊。下面,我就從設(pu)計(tong)師(ren)的角度,用更形象的比喻來說明一下:

這是一個和物流有關的故事,首先我們設定兩個場所:一個叫倉庫,一個叫店鋪。倉庫是囤積所有貨物的地方,庫中的貨物按照一定的規矩擺放。而店鋪有很多,分散在各地;店鋪總需要從倉庫調貨,貨物運達後會被按照能吸引顧客的方式陳列在貨架上。

那麼問題來了:我們能想到,在店鋪陳列時幾乎不會與倉庫存貨的擺放一樣(不能理解的想想宜家)。如果店員小哥貿然來到倉庫自己取貨必然會遇到很多困難(假設倉庫很龐大,小哥並不是倉庫管理員)。另外,若店鋪搞促銷要對幾種貨物組合打包(買洗髮水送贈品牙刷之類的),不管是在倉庫或店鋪進行,也必然會影響到它們的正常運作。如何幫助店鋪更方便的從倉庫中調貨,又避免倉庫內混亂不堪?(請不要糾結」店鋪自己不是應該有小倉庫嘛」這種事情,請關注比喻本身…)

現在,我們在這個調配貨物的過程中加入一個中轉環節。店鋪告訴中轉站他們需要什麼,由中轉站專業調配分配打包,等待店鋪小哥前來取走。於是問題就這麼愉快地解決了。

在這個物流的故事中「貨物」就是數據,存放貨物的「總倉庫」可以看做資料庫,而「店鋪」就可以看做我們的網站、App。我們頁面上顯示的內容、數字,以及用戶的操作請求和結果都可以看做是「貨物」——數據,會不停的經歷這個運輸過程。貨物在倉庫「按規矩擺放」可以看做資料庫的存儲結構;在店鋪那頭,貨品的陳列」需要能夠吸引到客戶「,就代表了我們在設計網站、App的頁面信息時需要注重用戶體驗一般。前端頁面的數據展示與後端資料庫的存儲結構的不一,便是店鋪陳列與倉庫擺貨規則的不一。我們的頁面需要的數據,如果都直接去連搜索資料庫,就會像故事中的店員去倉庫找貨物一樣沒效率。此外,通常我們的產品是由很多流程組成的,其中充滿了判斷邏輯和計算,這就好比故事中店鋪的促銷活動時需要」貨品再組合「。如果把這些對數據的操作放在資料庫或者頁面上進行則會降低他們的運作效率(一般來說情願放在前端也不放在資料庫,資料庫的運作更加重要。而放在前端頁面來做這些事情,就是我們通常說的」寫死「)。

我想大家都能猜到,故事中的中轉站就是我們所說的API介面了。程序員們在爭吵的,其實是如何定義這個API中的內容。根據上面的故事,中轉站需要根據店鋪的要求預先調配好貨物,並且在必要的時候進行分配打包。而這個調配分配打包的過程就是程序員爭論的——API中所要包含的欄位、計算、邏輯判斷。作為設計師,你的設計的頁面、流程都極大的影響甚至是決定了前後端這個」物流」的過程。而這個「物流」的過程就是前後端的交互邏輯(看到這裡的「交互」二字,交互設計師們你們有什麼感想~)。

另外,我們稱網頁、APP為前端(APP稱為客戶端),簡單來說他們都是運行在用戶的終端上的(手機,或自己電腦的瀏覽器里)。而資料庫和API我們都稱他們為服務端、後端,簡單來說,因為他們遠隔萬里運行在世界另一邊的高級電腦里(即伺服器)~。

有沒有稍微理解了一些呢?

上面的故事只是為了幫助大家更具象的理解API的大致原理,入個門。而實際情況下,前後端的運行邏輯會更加複雜(比如故事中倉庫到店鋪是單向流通,而真實的程序中則是雙向的),更詳細的就需要大家回到實戰環境自己體會啦。


原作者: Lief

2016-08-16


想想你家的水龍頭


API是應用編程介面(application programming interface),重點在介面。打個比方,我想海淘,但是我不懂外語,與沒有外幣,但是只要把我的需求和錢告訴某一個代理,他就會把東西買給我,這個代理就是介面,我無須知道代理是怎麼買到東西的,只要把他需要的東西給他,我就能得到一個返回,即海淘商品。介面必須要容易讀懂,一般會定義一些規則,比如代理只接收人民幣。


當我們調用一個API(軟體編程介面)的時候,說明我們急需一個軟體功能,這個功能能幫助我們完成/實現某件事情/想法/希望。

好比說,現在秋天到了,天氣轉涼,突然某天我們感冒了,這時,我們迫切需要有人(醫生)幫我們治好病,治好病就是我們此時迫切需要完成/實現的事情。

於是我們到醫院(到了Github上,把Github比作醫院是不是不太好),找到了醫生(API開發者),他會治很多種病(開發各種功能),他也可以治我們的感冒,所以他開了感冒靈(一種API)或者他也可以開另外一種止咳露(另外一種API),吃了葯(API),我們的感冒好了。我們從來不去管感冒靈是什麼成分,我們只知道喝水沖服感冒靈,我們的感冒就好了。同理我們也不需要知道API怎麼實現的,我們只要按照文檔依葫蘆畫瓢調用API(喝水沖服),就能完成我們想要的功能。比如我們想拍照,就調用個拍照API,想睡覺,就掉個睡覺API,你想幹嘛,就找會做這個API的人給你個API,就好比你想治療感冒去找醫生給你開個感冒靈(API),感冒就神奇地/莫名其妙地好了,雖然你不知道為什麼好了。

參考想法:C++ Language Basics


API 就是自動售貨機啊……
把錢(認證)和你需要的東西給他
如果需要可能還要告訴他是涼的還是熱的
之後它處理好了把東西給你…
你知道他能幹什麼 按照指定的按鈕提供你要的東西……但是你可能不知道具體裡面什麼樣子。
你拆不開這個機器(帶挖掘機來當我沒說
你不知道裡面是機器做的還是人(


推薦閱讀:

鋰電池用久了為什麼會損耗?
目前認識物質世界的最大困難是什麼?

TAG:編程 | 計算機 | 科技 | 計算機科學 | 計算機基礎 |