生動形象的理解API是如何工作的!

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 ! 

假設你有一個銀行


這里寫圖片描述
你有一個倉庫來存錢,一個記賬本來記各種業務。一個簡單的管理銀行的方法是直接將權限給所有人,讓客戶自己動手完成各種業務。

這種模式下,一個客戶想要存錢的話,他需要:

  1. 拿著錢去銀行
  2. 打開倉庫把錢放進去
  3. 把這筆業務寫到記帳本上
  4. 離開銀行

顯然這存在著問題:

  1. 想開開倉庫門需要廢很大力氣,并不是所有的人都能打開,還有些人不識字不會記賬。
  2. 在這個模式下,我們假定所有人都是誠實的,顯然這并不成立。(說不定哪一個人存了100塊錢記賬的時候寫了10000塊)。

這時你遇到麻煩了。

雇一個柜員


要是我們雇一個體格棒,辦事還麻利的人來處理開倉庫,記賬的問題呢?

小娜登場了。

現在模式為:建一個柜臺將倉庫和記賬本和顧客分開,這樣顧客就不需要再去管倉庫和記賬本了。想存錢的話直接找小娜就行。

這里寫圖片描述

這種模式下,要是有人想存錢,他們必須:

  1. 拿錢去銀行
  2. 告訴小娜我是 MMM 我想要存¥¥¥。
  3. 小娜打開倉庫把錢放進去
  4. 小娜把業務(transaction )記錄好
  5. 告訴你業務辦好了
  6. 顧客離開銀行

現在不會發生打不開倉庫門或者是記錯賬的情況了,你覺得很滿意。

到此我們引出今天的主角API( Application Programming Interface),它能夠幫你實現輕松的和其他軟件組件(如服務器,操作系統等)的交互。

在上面舉的例子中,我們雇一個收納員幫顧客解決了開倉門,放錢,記賬這一系列繁瑣的過程。這大大節省了顧客的時間,同時提高了銀行的效率。同理,如果我們將操作的具體實施步驟抽象化,這將會大大降低開發人員的負擔(去記憶所有的步驟花費的力氣),從而大大提高了效率。

另外的好處是,只要他們遵循了同一個協議,組件可以交換或者是改變。銀行不需要知道時哪一個顧客或者說顧客是怎么進來的,顧客也不需要知道銀行拿自己的錢去做什么了。只要負責的柜員在這里并做好工作,整個流程將會繼續工作。

API 應用范圍很廣:從操作系統中簡單的 fork() 到我們接觸的百度地圖API,和風天氣API,又或者是邢遠分享的段子,這些 API 都大大簡化了程序員的工作。

銀行里有什么


這里寫圖片描述

你可能已經注意到了銀行分成了兩個區域:顧客在前臺排好隊來辦理業務,后臺完成各種對錢的操作。在中間層,前臺和后臺發生了交互,雙方都不能越界,交互只能發生在中間的區域。

在 API 術語里面,我們管中間的這塊區域叫做接口?Interface;在這里各個部分發生交互。在我們的銀行中,前臺和后臺都同意并且規定使用 Interface 來交換信息。

現在,我們假定 Bob 想要取錢。他到了柜臺找到了小娜,小娜知道該怎樣去取錢,她取好了之后告訴了 Bob。

這里寫圖片描述

Bob 這時候又問:“你知道今天的股票行情嗎”

小娜:????WTF ?

在這個例子里面,小娜知道怎樣取錢和存錢 , 但是她不知道如何去給Bob查查今天的股票行情是怎樣的。這個例子引出了另一個概念?協議(Protocol)。

在 API 術語中,協議 是規定了各部分之間如何進行交流的一系列規則的集合。各部分之間想要完成交互必須理解并且遵守同一個協議。

同時,我們注意到了交換時用的是中文。如果Bob 對小娜說「我想撳五百蚊出嚟呀唔該」,小娜不懂廣東話,所以沒法理解Bob說的是什么,這又引出了另一個概念?格式(Format)

在程序員的世界里,通用的格式包含?XMLJSON

最后,讓我們假設銀行想要擴展業務到股市,這時候就需要一位特殊的接待員來處理與股票相關的業務了,這時,小冰就登場啦。?
這里寫圖片描述

在 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 是用于構建應用程序軟件的一組子程序定義,協議和工具。一般來說,這是一套明確定義的各種軟件組件之間的通信方法。

現在是不是頭腦里對這個概念清晰多了呢。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/457142.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/457142.shtml
英文地址,請注明出處:http://en.pswp.cn/news/457142.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

ann matlab,人工神經網絡ann及其matlab仿真.ppt

人工神經網絡ann及其matlab仿真人工神經網絡 的研究方法及應用劉 長 安2004. 12. 31 引 言 利用機器模仿人類的智能是長期以來人們認識自然、改造自然和認識自身的理想。 研究ANN目的: (1)探索和模擬人的感覺、思維和行為的規律,設計具有人類智能的計算機…

字符串與樹的結合

https://leetcode.com/problems/scramble-string/?tabDescription 雖然題目不常見,但是里面關于字符串調轉和遞歸的思路,還是很有代表性的。 https://discuss.leetcode.com/topic/14337/share-my-4ms-c-recursive-solution/2 這個解法也把里面關于遞歸的…

ubuntu 安裝過程所需軟件

ubuntu 開發過程好用的軟件 Remarkable 一個用于書寫文檔的好工具,包括方便書寫數學公式。安裝過程 點擊上面“remarkable”下載.deb文件,然后雙擊會跳轉到ubuntun的軟件安裝中心,點擊install進行安裝。 sublime text3 配置 自定義快捷鍵Pref…

Day05-循環和列表字符串、元組和字典

一、字符串 字符串就是由若干個不同的unicode字符組成的不可變序列 1 .字符串創建 #單引號字符串 str1 天要下雨,娘要嫁人,由他去吧 str2 str() #空串 str3 str([10,20,30]) ? #雙引號字符串 str2 "天要下雨,娘要嫁人&#xff…

@查看MySQL版本的方法

1.在終端下:mysql -V. [rootlocalhost bin]# mysql -V; mysql Ver 14.14 Distrib 5.6.21, for Linux (x86_64) using EditLine wrapper [rootlocalhost bin]# mysql -v; ERROR 1045 (28000): Access denied for user rootlocalhost (using password: NO) 注意,這…

echarts 柱狀圖 ,顏色和顯示設置

最近在使用echart開發圖標,api里面雖然有些設置,但是如果想讓柱狀圖每個柱的顏色都不相同,簡單的通過color設置是沒有作用的,這里,就要用到其他的方式了 下面只是列舉下我認為比較常用的,其他的比較簡單&am…

Pycharm 專業版 導入系統pip安裝的包

Pycharm 專業版 導入系統pip安裝的包 在setting 中找到project interpeter ,點擊設置圖標,點擊Add,得到如圖所示選擇 System Interpreter即可,這樣 用pip安裝的包都加再進來了

nodejs express

2019獨角獸企業重金招聘Python工程師標準>>> 創建express服務器 //app.js文件 var express require(express); var app express(); //指定更目錄顯示的內容 app.get(/, function(req, res){ res.send(Hello World); }); //指定監聽端口 var server app.listen(…

JS常見知識點

1、寫一個按照下面方式調用都能正常工作的 sum 方法 console.log(sum(2,3)); // Outputs 5 console.log(sum(2)(3)); // Outputs 5 解決方案 function sum() {var fir arguments[0];if (arguments.length 2) {return arguments[0] arguments[1]} else {return function (sec…

格雷碼 matlab,基于格雷碼的結構光重建代碼(MATLAB版本)

【實例簡介】該代碼為brown university相關技術人員編寫,旨在用于學習研究3D結構光的原理、算法實現和應用。由于原有的網站( http://mesh.brown.edu/byo3d/index.html )近期無法訪問,為了便于3D愛好者可以方便學習相關內容,特將該網站部分代…

Day06-函數

函數 一、集合(set) 特點:不允許有重復元素,如果添加重復元素,則會自動過濾,可以進行交集、并集的運算。 本質:無序且無重復元素的數據結構 1 創建集合 s1 set() #空集合 不能是{},這是字典 s2 {1…

在TextView中實時顯示數據

//下面實時更新顯示在textView中的數據handler new Handler();runnable new Runnable(){Overridepublic void run(){// TODO Auto-generated method pushupTextView.setText(Integer.toString(Number.pushup_number)); handler.postDelayed(this, 1000); }}; handle…

DuangDuangDuang!碼云項目的 Readme.md 特殊技能

為什么80%的碼農都做不了架構師?>>> 我們在 碼云 上創建新項目的時候,常常會看到默認使用 README 文件初始化該項目(如圖1 所示),然后在新建項目的根目錄下就會生成一個 README.md 文件(如圖2 …

java sunjce,無法初始化類javax.crypto.SunJCE_b

我已經開發了一個Javaservlet應用程序,并且在我的開發PC上,一切正常,包括按計劃使用SFTP通過端口8443等上的HTTPS并以適當的SSL證書通過PDF復制PDF。但是,當我嘗試在實時服務器上運行該應用程序時,會收到錯誤消息。jav…

GitHub添加SSH keys報錯Key is invalid. It must begin with 'ssh-ed25519', 'ssh-rsa', 'ssh-dss', 'ecdsa-sha

GitHub添加SSH keys報錯Key is invalid. It must begin with ‘ssh-ed25519’, ‘ssh-rsa’, ‘ssh-dss’, ecdsa-sha 在GitHub上Add SSH key的時候報錯:Key is invalid. It must begin with ‘ssh-ed25519’, ‘ssh-rsa’, ‘ssh-dss’, ecdsa-sha。。。&#xff…

System.Diagnostics.Process 執行.EXE

分類: C#WINFORM 2009-04-05 21:09 459人閱讀 評論(0) 收藏 舉報 我們經常會遇到在Winform或是WPF中點擊鏈接或按鈕打開某個指定的網址, 或者是需要打開電腦中某個指定的硬盤分區及文件夾, 甚至是"控制面板"相關的東西, 那么如何做呢? 答案是使用Sys…

php 擴展 返回字符串,基于PHP7的PHP擴展開發之四(字符串的處理)

目的:熟悉字符串在PHP擴展里面如何處理要實現的PHP代碼如下:1、當字符串不包含指定前綴字符串時,把前綴字符串和被檢測字符合并返回。2、當字符串包含指定前綴字符串時,原樣返回。 我們將使用PHP擴展的方式實現str_concat功能。fu…

對象之int介紹

#Auther Bob #--*--conding:utf-8 --*-- #創建兩個int的對象&#xff0c;age1和age2age1 10 age2 int(1)#查看對象的類print(type(age1))# <class int>print(type(age2))# <class int> #bit_length表示一個十進制數最少需要占用多個二進制位print(age1.bit_lengt…

Unchecked runtime.lastError: Could not establish connection. Receiving end does not exist.

谷歌瀏覽器報錯 版本 73.0.3683.103&#xff08;正式版本&#xff09; &#xff08;32 位&#xff09;報錯內容如下Unchecked runtime.lastError: Could not establish connection. Receiving end does not exist.jquery.js:2 Cross-Origin Read Blocking (CORB) blocked cros…

OpenStack 之vmware機器遷移到openstack集群

原理 openstack本身是支持使用vmware格式的鏡像的&#xff0c;但是是需要我們我們在/etc/nova/nova.conf的配置文件中指定該計算節點使用vmware的驅動 123456789101112# Driver to use for controlling virtualization. Options# include: libvirt.LibvirtDriver, xenapi.XenAP…