如果作為新人的你有這樣的經(jīng)歷:在會(huì)議上聽到前后端的程序員們對(duì)著你給出的設(shè)計(jì)稿討論“這邊要加一個(gè)API”嫁怀、“那個(gè)頁面的API要改動(dòng)”奸绷,特別是他們說了一堆你不太懂的事情還反過來問你:你覺得要用什么方案梗夸?(WTF)又或者,那幫人最終討論的結(jié)果是某個(gè)“接口”沒法做号醉,導(dǎo)致你的設(shè)計(jì)稿得改改改反症,然而你一臉懵逼,并搞不清楚狀況扣癣。那么這篇文章有可能幫到你了解自己的處境(雖然說服那幫固執(zhí)的開發(fā)還得靠你自己)惰帽。
那么到底什么是程序員口中API ?父虑?该酗?
API(Application Programming Interface,應(yīng)用程序編程接口)是一些預(yù)先定義的函數(shù),目的是提供應(yīng)用程序與開發(fā)人員基于某軟件或硬件得以訪問一組例程的能力士嚎,而又無需訪問源碼呜魄,或理解內(nèi)部工作機(jī)制的細(xì)節(jié)奋蔚。
——度娘
你懂了么虫啥?如果你不是學(xué)程序的還說看懂了,我想你一定還沒有呂朋友……好像唯一能看出來的就是:API=接口
下面是我身邊那些老司機(jī)同事們的解釋:
“一個(gè)聯(lián)通前端和后端的通道疲恢,通常用字段來做暗語笨蚁,就叫API睹晒。”(by 某少女心的PM)
“API是括细,面向網(wǎng)頁伪很、手機(jī)APP等終端設(shè)備和應(yīng)用,提供和網(wǎng)站后臺(tái)進(jìn)行交互的入口奋单★笔裕”(by 某經(jīng)驗(yàn)豐富的后端大神)
“這是個(gè)哲學(xué)問題,API應(yīng)該是服務(wù)開發(fā)者和服務(wù)使用者之間制定的關(guān)于如何服務(wù)使用的約定览濒〈舾牵”(by 某段子手文藝前端男青年)
從老司機(jī)們的描述中,我們看到和API有關(guān)的總有兩個(gè)角色出現(xiàn):”前端-后端“贷笛、”網(wǎng)頁APP-網(wǎng)站后臺(tái)“应又、”開發(fā)者-服務(wù)使用者“;而API發(fā)揮的則是:”聯(lián)通xxx的通道“乏苦、”進(jìn)行交互的入口“株扛、”xxx的約定“等串聯(lián)那兩個(gè)角色的作用。
似乎有一些眉目,但還是有點(diǎn)模糊席里。下面叔磷,我就從設(shè)(pu)計(jì)(tong)師(ren)的角度,用更形象的比喻來說明一下:
這是一個(gè)和物流有關(guān)的故事奖磁,首先我們?cè)O(shè)定兩個(gè)場所:一個(gè)叫倉庫改基,一個(gè)叫店鋪。倉庫是囤積所有貨物的地方咖为,庫中的貨物按照一定的規(guī)矩?cái)[放秕狰。而店鋪有很多,分散在各地躁染;店鋪總需要從倉庫調(diào)貨鸣哀,貨物運(yùn)達(dá)后會(huì)被按照能吸引顧客的方式陳列在貨架上。
那么問題來了:我們能想到吞彤,在店鋪陳列時(shí)幾乎不會(huì)與倉庫存貨的擺放一樣(不能理解的想想宜家)我衬。如果店員小哥貿(mào)然來到倉庫自己取貨必然會(huì)遇到很多困難(假設(shè)倉庫很龐大,小哥并不是倉庫管理員)饰恕。另外挠羔,若店鋪搞促銷要對(duì)幾種貨物組合打包(買洗發(fā)水送贈(zèng)品牙刷之類的),不管是在倉庫或店鋪進(jìn)行埋嵌,也必然會(huì)影響到它們的正常運(yùn)作破加。如何幫助店鋪更方便的從倉庫中調(diào)貨,又避免倉庫內(nèi)混亂不堪雹嗦?(請(qǐng)不要糾結(jié)”店鋪?zhàn)约翰皇菓?yīng)該有小倉庫嘛”這種事情范舀,請(qǐng)關(guān)注比喻本身…)
現(xiàn)在,我們?cè)谶@個(gè)調(diào)配貨物的過程中加入一個(gè)中轉(zhuǎn)環(huán)節(jié)了罪。店鋪告訴中轉(zhuǎn)站他們需要什么锭环,由中轉(zhuǎn)站專業(yè)調(diào)配分配打包,等待店鋪小哥前來取走捶惜。于是問題就這么愉快地解決了田藐。
在這個(gè)物流的故事中“貨物”就是數(shù)據(jù)荔烧,存放貨物的“總倉庫”可以看做數(shù)據(jù)庫吱七,而“店鋪”就可以看做我們的網(wǎng)站、App鹤竭。我們頁面上顯示的內(nèi)容踊餐、數(shù)字,以及用戶的操作請(qǐng)求和結(jié)果都可以看做是“貨物”——數(shù)據(jù)臀稚,會(huì)不停的經(jīng)歷這個(gè)運(yùn)輸過程吝岭。
貨物在倉庫“按規(guī)矩?cái)[放”可以看做數(shù)據(jù)庫的存儲(chǔ)結(jié)構(gòu);在店鋪那頭,貨品的陳列”需要能夠吸引到客戶“窜管,就代表了我們?cè)?b>設(shè)計(jì)網(wǎng)站散劫、App的頁面信息時(shí)需要注重用戶體驗(yàn)一般。前端頁面的數(shù)據(jù)展示與后端數(shù)據(jù)庫的存儲(chǔ)結(jié)構(gòu)的不一幕帆,便是店鋪陳列與倉庫擺貨規(guī)則的不一获搏。我們的頁面需要的數(shù)據(jù),如果都直接去連搜索數(shù)據(jù)庫失乾,就會(huì)像故事中的店員去倉庫找貨物一樣沒效率常熙。此外,通常我們的產(chǎn)品是由很多流程組成的碱茁,其中充滿了判斷邏輯和計(jì)算裸卫,這就好比故事中店鋪的促銷活動(dòng)時(shí)需要”貨品再組合“。
如果把這些對(duì)數(shù)據(jù)的操作放在數(shù)據(jù)庫或者頁面上進(jìn)行則會(huì)降低他們的運(yùn)作效率(一般來說情愿放在前端也不放在數(shù)據(jù)庫纽竣,數(shù)據(jù)庫的運(yùn)作更加重要墓贿。而放在前端頁面來做這些事情,就是我們通常說的”寫死“)蜓氨。
我想大家都能猜到募壕,故事中的中轉(zhuǎn)站就是我們所說的API接口了。程序員們?cè)跔幊车挠镉鋵?shí)是如何定義這個(gè)API中的內(nèi)容舱馅。根據(jù)上面的故事,中轉(zhuǎn)站需要根據(jù)店鋪的要求預(yù)先調(diào)配好貨物刀荒,并且在必要的時(shí)候進(jìn)行分配打包代嗤。而這個(gè)調(diào)配分配打包的過程就是程序員爭論的——API中所要包含的字段、計(jì)算缠借、邏輯判斷干毅。作為設(shè)計(jì)師,你的設(shè)計(jì)的頁面泼返、流程都極大的影響甚至是決定了前后端這個(gè)”物流”的過程硝逢。而這個(gè)“物流”的過程就是前后端的交互邏輯(看到這里的“交互”二字,交互設(shè)計(jì)師們你們有什么感想~)绅喉。
另外渠鸽,我們稱網(wǎng)頁、APP為前端(APP稱為客戶端)柴罐,簡單來說他們都是運(yùn)行在用戶的終端上的(手機(jī)徽缚,或自己電腦的瀏覽器里)。而數(shù)據(jù)庫和API我們都稱他們?yōu)榉?wù)端革屠、后端凿试,簡單來說排宰,因?yàn)樗麄冞h(yuǎn)隔萬里運(yùn)行在世界另一邊的高級(jí)電腦里(即服務(wù)器)~
有沒有稍微理解了一些呢?
上面的故事只是為了幫助大家更具象的理解API的大致原理那婉,入個(gè)門板甘。而實(shí)際情況下,前后端的運(yùn)行邏輯會(huì)更加復(fù)雜(比如故事中倉庫到店鋪是單向流通详炬,而真實(shí)的程序中則是雙向的)虾啦,更詳細(xì)的就需要大家回到實(shí)戰(zhàn)環(huán)境自己體會(huì)啦。
好了痕寓,今天就到這里~~
本文作者:朱彥劼(點(diǎn)融黑幫)傲醉,目前就職于點(diǎn)融網(wǎng)DDC。