原文出處: 小胡子哥的博客(@Barret李靖) 前后端分工協(xié)作是一個(gè)老生常談的大話題,很多公司都在嘗試用工程化的方式去提升前后端之間交流的效率,降低溝通成本,并且也開發(fā)了大量的工具。但是幾乎沒有一種方式是令雙方都很滿意的。事實(shí)上,也不可能讓所有人都滿意。根本原因還是前后端之間的交集不夠大,交流的核心往往只限于接口及接口往外擴(kuò)散的一部分。這也是為什么很多公司在招聘的時(shí)候希望前端人員熟練掌握一門后臺(tái)語言,后端同學(xué)了解前端的相關(guān)知識(shí)。 一、開發(fā)流程前端切完圖,處理好接口信息,接著就是把靜態(tài)demo交給后臺(tái)去拼接,這是一般的流程。這種流程存在很多的缺陷。
當(dāng)然,存在的問題遠(yuǎn)不止上面枚舉的這些,這種傳統(tǒng)的方式實(shí)在是不酷(Kimi 附身^_^)。還有一種開發(fā)流程,SPA(single page application),前后端職責(zé)相當(dāng)清晰,后端給我接口,我全部用 ajax 異步請(qǐng)求,這種方式,在現(xiàn)代瀏覽器中可以使用 PJAX 稍微提高體驗(yàn),F(xiàn)acebook 早在三四年前對(duì)這種 SPA 的模式提出了一套解決方案,quickling+bigpipe,解決了 SEO 以及數(shù)據(jù)吐出過慢的問題。他的缺點(diǎn)也是十分明顯的:
問題多的已經(jīng)是無力吐槽了,當(dāng)然他依然有自己的優(yōu)勢(shì),咱們也不能一票否決。 針對(duì)上面看到的問題,現(xiàn)在也有一些團(tuán)隊(duì)在嘗試前后端之間加一個(gè)中間層(比如淘寶UED的 MidWay )。這個(gè)中間層由前端來控制。 JavaScript
中間層的作用就是為了更好的控制數(shù)據(jù)的輸出,如果用MVC模型去分析這個(gè)接口,R2E(后端)只負(fù)責(zé) M(數(shù)據(jù)) 這部分,Middle(中間層)處理數(shù)據(jù)的呈現(xiàn)(包括 V 和 C)。淘寶UED有很多類似的文章,這里不贅述。 二、核心問題上面提出了在業(yè)務(wù)中看到的常見的三種模式,問題的核心就是數(shù)據(jù)交給誰去處理。數(shù)據(jù)交給后臺(tái)處理,這是模式一,數(shù)據(jù)交給前端處理,這是模式二,數(shù)據(jù)交給前端分層處理,這是模式三。三種模式?jīng)]有優(yōu)劣之分,其使用還是得看具體場(chǎng)景。 既然都是數(shù)據(jù)的問題,數(shù)據(jù)從哪里來?這個(gè)問題又回到了接口。
這一系列的問題一直困擾著奮戰(zhàn)在前線的前端工程師和后端開發(fā)者。淘寶團(tuán)隊(duì)做了兩套接口文檔的維護(hù)工具,IMS以及DIP,不知道有沒有對(duì)外開放,兩個(gè)東西都是基于 JSON Schema 的一個(gè)嘗試,各有優(yōu)劣。JSON Schema 是對(duì) JSON 的一個(gè)規(guī)范,類似我們?cè)跀?shù)據(jù)庫中創(chuàng)建表一樣,對(duì)每個(gè)字段做一些限制,這里也是一樣的原理,可以對(duì)字段進(jìn)行描述,設(shè)置類型,限制字段屬性等。 接口文檔這個(gè)事情,使用 JSON Schema 可以自動(dòng)化生產(chǎn),所以只需編寫 JSON Schema 而不存在維護(hù)問題,在寫好的 Schema 中多加些限制性的參數(shù),我們就可以直接根據(jù) Schema 生成 mock(測(cè)試) 數(shù)據(jù)。 mock 數(shù)據(jù)的外部調(diào)用,這倒是很好處理: JavaScript
在請(qǐng)求的參數(shù)中加入 callback 參數(shù),如 /mock/hashString?cb=callback,一般的 io(ajax) 庫都對(duì)異步數(shù)據(jù)獲取做了封裝,我們?cè)跍y(cè)試的時(shí)候使用 jsonp,回頭上線,將 dataType 改成 json 就行了。 JavaScript
這里略微麻煩的是 POST 方法,jsonp 只能使用 get 方式插入 script 節(jié)點(diǎn)去請(qǐng)求數(shù)據(jù),但是 POST,只能呵呵了。 這里的處理也有多重方式可以參考:
對(duì)于如何拿到跨域的接口信息,我也給出幾個(gè)參考方案:
JavaScript
JavaScript
三、小結(jié)本文只是對(duì)前后端協(xié)作存在的問題和現(xiàn)有的幾種常見模式做了簡(jiǎn)要的列舉,JSON Schema 具體如何去運(yùn)用,還有接口的維護(hù)問題、接口信息的獲取問題沒有具體闡述,這個(gè)后續(xù)有時(shí)間會(huì)整理下我對(duì)他的理解。 如果有人讓你推薦前端技術(shù)書,請(qǐng)讓他看這個(gè)列表 ->《經(jīng)典前端技術(shù)書籍》
|
|