成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

API難解釋?這次用啤酒和積木來破局

譯文
開發(fā) 前端
API是我們一直在用的東西。盡管API無處不在,但許多人、甚至技術(shù)人員對(duì)于它們是什么及工作方式有著很模糊的理解。說真的,請(qǐng)你的同事馬上解釋一下API。如果對(duì)方立馬說“API指應(yīng)用編程接口。它是讓軟件應(yīng)用程序彼此通信的接口......”我會(huì)請(qǐng)這個(gè)人喝啤酒。大多數(shù)人真的無法闡明API。

[[242112]]

【51CTO.com快譯】早在我開始學(xué)習(xí)前端Web開發(fā),頭一回遇到“API”時(shí),這個(gè)術(shù)語聽起來像是某種精釀啤酒。后來我有了切身體會(huì):如果你去酒吧要一杯API,酒保會(huì)拋出“404:資源未找到”的錯(cuò)誤。是我自己讓人笑話了。

API是我們一直在用的東西。盡管API無處不在,但許多人、甚至技術(shù)人員對(duì)于它們是什么及工作方式有著很模糊的理解。說真的,請(qǐng)你的同事馬上解釋一下API。如果對(duì)方立馬說“API指應(yīng)用編程接口。它是讓軟件應(yīng)用程序彼此通信的接口......”我會(huì)請(qǐng)這個(gè)人喝啤酒。大多數(shù)人真的無法闡明API。

讓我們改變這種情況。

“A”表示應(yīng)用。

該術(shù)語的第一個(gè)部分高度依賴上下文。視具體的使用場(chǎng)景而定,“應(yīng)用”實(shí)際上可以指很多東西:整個(gè)服務(wù)器、整個(gè)應(yīng)用程序本身及其所需的數(shù)據(jù)或只是應(yīng)用程序的一小部分。

不妨看看這些上下文:服務(wù)器、整個(gè)應(yīng)用程序和應(yīng)用程序的一小部分。我們先設(shè)想Web是聯(lián)網(wǎng)服務(wù)器組成的龐大全球網(wǎng)絡(luò)。互聯(lián)網(wǎng)上的每一頁都存儲(chǔ)在這其中一臺(tái)遠(yuǎn)程服務(wù)器上的某個(gè)地方,即位于遠(yuǎn)處的計(jì)算機(jī),經(jīng)過優(yōu)化以處理向你的瀏覽器提供這個(gè)特定網(wǎng)站的請(qǐng)求。

因此,如果你在瀏覽器欄中輸入www.github.com,Chrome、Firefox或Safari等瀏覽器向GitHub的服務(wù)器發(fā)送請(qǐng)求,服務(wù)器會(huì)禮貌地發(fā)回在本地計(jì)算機(jī)上顯示頁面及內(nèi)容所需要的全部代碼。瀏覽器收到此響應(yīng)后,它會(huì)解釋代碼并顯示頁面。

服務(wù)器作為API:在你的瀏覽器(又叫客戶端)看來,GitHub的服務(wù)器就是API。這意味著每次你訪問Web上的頁面時(shí),都與某臺(tái)遠(yuǎn)程服務(wù)器的API進(jìn)行交互。此處的API與遠(yuǎn)程服務(wù)器不一樣。相反,它是接收請(qǐng)求并發(fā)送響應(yīng)的服務(wù)器的一部分。

整個(gè)應(yīng)用程序作為API:初始調(diào)用時(shí),GitHub服務(wù)器發(fā)送整個(gè)Web應(yīng)用程序:表示結(jié)構(gòu)(網(wǎng)站布局及外觀)以及網(wǎng)站的所有內(nèi)容。表示這部分基本上固定不變,作為HTML代碼發(fā)送,由瀏覽器顯示。內(nèi)容(網(wǎng)站中包含的動(dòng)態(tài)信息)作為數(shù)據(jù)發(fā)送,常常采用JSON格式,然后在頁面上的適當(dāng)位置加以顯示。

所以如果我們看一下典型的GitHub頁面,表示部分(比如頂部的導(dǎo)航欄、左邊的用戶照片和簡(jiǎn)介、中間固定的存儲(chǔ)倉庫)幾乎保持一樣。但那些綠色小方形表示每日GitHub活動(dòng)量的方框呢?這會(huì)根據(jù)用戶的貢獻(xiàn)而變化。我們將項(xiàng)目工作推送到GitHub,然后檢查以確保它已添加到簡(jiǎn)介頁面上時(shí),API告訴瀏覽器將今天的方形標(biāo)成綠色、它到底應(yīng)該用什么色度。但是,其他的一切保持不變。

不同類型的API讓我們的瀏覽器可以調(diào)用特定類型的信息,只更新相關(guān)的數(shù)據(jù),無需重新加載沒有變的其他所有內(nèi)容。

應(yīng)用程序的一部分作為API:構(gòu)建Web應(yīng)用程序時(shí),用之前就由組件來構(gòu)建快得多、容易得多(并且常常更可靠)。設(shè)想一下,很可能有一個(gè)庫、預(yù)制平臺(tái)或XaaS來提供。

但是這些組件如何相互通信,以便作為一個(gè)統(tǒng)一的應(yīng)用程序來執(zhí)行?

“P”表示協(xié)議,“I”表示接口

API的應(yīng)用端可能大不一樣,但無論我們談?wù)撌裁礃拥纳舷挛?,API的最終任務(wù)仍然一樣:溝通和協(xié)調(diào)。

API中的“P”即協(xié)議指確定彼此約定的方法,以便其他軟件與特定的API聯(lián)系,請(qǐng)求/接收來自它的相關(guān)信息。

接口指API的中間方面,充當(dāng)讓兩個(gè)應(yīng)用程序能夠相互聯(lián)系的實(shí)際功能。

因此從根本上說,API好比是兩個(gè)軟件之間的一種協(xié)議或契約,這個(gè)“粘合層”讓它們能夠?qū)?、協(xié)同運(yùn)行。實(shí)際上,API說“如果你給我這個(gè)指令,我會(huì)執(zhí)行此操作/返回此信息。”

打個(gè)比喻,API好比微釀啤酒廠的啤酒水龍頭。每個(gè)水龍頭對(duì)應(yīng)某一類啤酒,所以當(dāng)你按下標(biāo)有“Porter”的水龍頭把手時(shí),就知道你的杯里會(huì)灌滿濃郁的麥香味啤酒,按下“Pilsner”會(huì)出來清爽的黃色啤酒。同樣道理,請(qǐng)求API輸出的客戶端知道按下哪個(gè)數(shù)據(jù)“水龍頭”以便獲得所需的輸出。比如說,Porter預(yù)計(jì)從porter水龍頭出來,而不是別的水龍頭。同時(shí),用戶甚至不必知道或關(guān)心水龍頭內(nèi)部的情況??梢灾匦屡帕嘘?duì)伍或優(yōu)化產(chǎn)品(你提供的啤酒或應(yīng)用程序),而不影響用戶,因?yàn)榻涌谌匀灰粯印?/p>

API不僅僅推送數(shù)據(jù),還接受數(shù)據(jù)。這里啤酒比喻不恰當(dāng),因?yàn)槠【剖菃蜗蛄鲃?dòng)。因此,我們用另外的比喻來說明數(shù)據(jù)如何進(jìn)入API。設(shè)想一下小孩子玩的形狀分類器玩具。圓形、星形和三角形的拼塊通過適當(dāng)形狀的開口插入;星形拼塊只能通過星形孔插入。在API中,數(shù)據(jù)以一種定義的形式(比如圓形或三角形)來提供,只能通過相應(yīng)的開口穿過接口。API要求是某種格式,拒絕不適合的數(shù)據(jù)。別試圖將三角形數(shù)據(jù)放入到方孔。因此,客戶端被迫按照API構(gòu)建器的規(guī)范(即協(xié)議)來組織輸入,該規(guī)范為事務(wù)設(shè)定了預(yù)期要求。

無論我們用什么比喻來解釋API,API都好比是兩個(gè)軟件之間的協(xié)議或契約,說“如果你給我這個(gè)指令,并采用這種格式,我就會(huì)執(zhí)行這個(gè)指定的動(dòng)作或返回此信息。”

API作為產(chǎn)品

除了作為瀏覽器、服務(wù)器、軟件和數(shù)據(jù)庫之間交換信息的載體外,API還可以打包成產(chǎn)品來銷售。比如說,Weather Underground售賣訪問其天氣數(shù)據(jù)API的服務(wù)。這是一組專用的URL,返回純數(shù)據(jù)響應(yīng)(這里是最新的天氣預(yù)報(bào)),以便用來在你自己的應(yīng)用程序中豐富數(shù)據(jù)。你不是得到Weather Underground在其自己的應(yīng)用程序或網(wǎng)站上所用的表示結(jié)構(gòu),你構(gòu)建自己的圖形用戶界面。

話雖如此,你絕對(duì)可以用瀏覽器向API發(fā)出請(qǐng)求,查看返回的數(shù)據(jù),無論用不用GUI。由于請(qǐng)求數(shù)據(jù)的實(shí)際HTTP傳輸以文本形式發(fā)生,你的瀏覽器通常能夠顯示響應(yīng)。比如說,你可以直接用瀏覽器訪問GitHub的API,甚至無需訪問令牌。以下是你在瀏覽器中訪問GitHub用戶的API路由時(shí)獲得的JSON響應(yīng),不妨看看我的: 

  1. {  
  2.   "login""mgienow",  
  3.   "id": 19556217,  
  4.   "node_id""MDQ6VXNlcjE5NTU2MjE3",  
  5.   "avatar_url""https://avatars2.githubusercontent.com/u/19556217?v=4",  
  6.   "gravatar_id""",  
  7.   "url""https://api.github.com/users/mgienow",  
  8.   "html_url""https://github.com/mgienow",  
  9.   "followers_url""https://api.github.com/users/mgienow/followers",  
  10.   "following_url""https://api.github.com/users/mgienow/following{/other_user}"
  11.   "gists_url""https://api.github.com/users/mgienow/gists{/gist_id}",  
  12.   "starred_url""https://api.github.com/users/mgienow/starred{/owner}{/repo}",  
  13.   "subscriptions_url""https://api.github.com/users/mgienow/subscriptions",  
  14.   "organizations_url""https://api.github.com/users/mgienow/orgs",  
  15.   "repos_url""https://api.github.com/users/mgienow/repos",  
  16.   "events_url""https://api.github.com/users/mgienow/events{/privacy}",  
  17.   "received_events_url""https://api.github.com/users/mgienow/received_events",  
  18.   "type""User",  
  19.   "site_admin"false,  
  20.   "name""Michelle Gienow",  
  21.   "company"null,  
  22.   "blog""",  
  23.   "location""Baltimore, MD",  
  24.   "email"null,  
  25.   "hireable"true,  
  26.   "bio""Front-end web developer & recovering journalist - I write web dev/JS/Node/Python @TheNewStack",  
  27.   "public_gists": 1,  
  28.   "followers": 11,  
  29.   "following": 2,  
  30.   "created_at""2016-05-24T16:33:09Z",  
  31.   "updated_at""2018-01-27T03:26:14Z"  

所以你訪問我的GitHub頁面時(shí),它調(diào)用GitHub API,以獲取顯示頁面的表示代碼(HTML/CSS),并調(diào)用另一個(gè)GitHub API以獲取對(duì)我來說獨(dú)特的數(shù)據(jù)。還有針對(duì)其他API的另外幾個(gè)調(diào)用,以獲取頁面其他區(qū)域中的內(nèi)容。瀏覽器收到所有這些調(diào)用后,知道將數(shù)據(jù)插入到頁面,生成最終的、統(tǒng)一的表示。

組合起來

基本上來說,任何一款可與其運(yùn)行時(shí)環(huán)境明確分開來的軟件都能成為API中的“A”。它本身也可能有某種API。比如說,假設(shè)你在代碼中使用第三方庫。一旦該庫合并到你的代碼中,就成為整個(gè)應(yīng)用程序的永久部分。然而作為一個(gè)獨(dú)特的軟件,該庫使用API(無需擔(dān)心,API預(yù)先打包),以便與你的其余代碼進(jìn)行交互。

所以API可以是服務(wù)器、應(yīng)用程序,甚至買賣的產(chǎn)品。這就是為什么API很難解釋,即使對(duì)于每天接觸API的人來說也是如此。

也許定義API本質(zhì)的最恰當(dāng)?shù)姆椒ㄊ鞘褂脴犯叻e木。積木提供了一種簡(jiǎn)單且結(jié)構(gòu)化的方式,讓所有積木都以同樣的方式拼接起來。同時(shí),積木可能的組合無窮無盡。與之相仿,軟件可以使用API來連接我們尋找的信息以及查看信息的接口,創(chuàng)建獨(dú)特的服務(wù)組合,而這些服務(wù)共同形成一個(gè)應(yīng)用程序。

樂高積木確實(shí)有助于開發(fā)人員了解API的價(jià)值。使用API,開發(fā)人員沒必要每次編寫新程序時(shí)從頭開始。他們不再需要構(gòu)建一個(gè)試圖做所有任務(wù)的核心應(yīng)用程序。相反,他們可以使用已經(jīng)創(chuàng)建的更好地完成任務(wù)的組件,將某些責(zé)任分包出去。所以API是軟件開發(fā)界的樂高積木:這種標(biāo)準(zhǔn)化的工具便于軟件與其他軟件聯(lián)系,因而加快構(gòu)建和部署,還能為每個(gè)人縮短加載時(shí)間。

原文標(biāo)題:Tutorial: APIs Explained, Using Beer and Legos,作者:Michelle Gienow

【51CTO譯稿,合作站點(diǎn)轉(zhuǎn)載請(qǐng)注明原文譯者和出處為51CTO.com】

責(zé)任編輯:龐桂玉 來源: 51CTO
相關(guān)推薦

2015-02-02 14:06:33

微軟win10

2010-04-23 15:07:08

云計(jì)算

2017-10-09 09:33:55

2021-12-24 16:38:04

零信任

2020-06-08 17:26:35

TORRAS

2013-11-22 16:39:24

智慧城市

2021-06-03 09:32:21

云計(jì)算云廠商ICT

2025-05-21 09:34:11

2019-06-06 09:31:45

開源技術(shù) 趨勢(shì)

2020-11-30 15:04:23

大數(shù)據(jù)

2019-10-25 10:33:17

程序員技能開發(fā)者

2013-08-20 09:11:14

母嬰市場(chǎng)社區(qū)App移動(dòng)應(yīng)用

2021-01-07 16:11:29

SaaSAI企業(yè)

2025-05-21 09:41:23

2021-08-10 08:43:50

大數(shù)據(jù)經(jīng)濟(jì)互聯(lián)網(wǎng)

2022-04-21 11:52:16

零信任網(wǎng)絡(luò)安全

2021-08-17 10:13:19

大數(shù)據(jù)數(shù)字經(jīng)濟(jì)數(shù)據(jù)技術(shù)

2015-09-21 20:53:48

2021-11-30 09:37:11

邊緣計(jì)算開發(fā)智能

2020-01-18 08:19:09

啤酒廠物聯(lián)網(wǎng)IOT
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 北条麻妃一区二区三区在线观看 | 亚洲欧美日韩精品久久亚洲区 | 久久91精品久久久久久9鸭 | 亚洲国产一区二区视频 | 免费在线观看成年人视频 | 国产精品久久久久久久久久久久冷 | 美女视频一区二区三区 | 日韩精品一区二区三区中文字幕 | 国产精品久久久久久久 | 色必久久 | 四季久久免费一区二区三区四区 | 91大神xh98xh系列全部 | 欧美精品二区 | 欧美成人第一页 | 亚洲三级在线 | 蜜桃综合在线 | 亚洲欧美视频 | 国产伦一区二区三区 | 国产丝袜av | 欧美一级www片免费观看 | 色精品视频 | 久久久国产一区二区三区 | 久久久久亚洲精品中文字幕 | 99国产精品久久久 | 久久日本 | 成人欧美一区二区三区在线播放 | 欧美在线成人影院 | www国产成人免费观看视频,深夜成人网 | 欧美日韩亚洲国产综合 | 羞羞的视频网站 | 免费午夜剧场 | 亚洲 欧美 日韩在线 | 亚洲乱码一区二区三区在线观看 | 亚洲精品永久免费 | 亚洲成人免费视频在线观看 | 五月综合激情网 | 99视频在线免费观看 | 久久精品一区二区三区四区 | 狠狠色综合欧美激情 | 国产真实精品久久二三区 | 欧美日韩不卡 |