一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

談?wù)勄昂蠖说姆止f(xié)作

 八塊腹肌的壞蛋 2016-11-08

前后端分工協(xié)作是一個(gè)老生常談的大話題,很多公司都在嘗試用工程化的方式去提升前后端之間交流的效率,降低溝通成本,并且也開發(fā)了大量的工具。但是幾乎沒有一種方式是令雙方都很滿意的。事實(shí)上,也不可能讓所有人都滿意。根本原因還是前后端之間的交集不夠大,交流的核心往往只限于接口及接口往外擴(kuò)散的一部分。這也是為什么很多公司在招聘的時(shí)候希望前端人員熟練掌握一門后臺(tái)語言,后端同學(xué)了解前端的相關(guān)知識(shí)。

一、開發(fā)流程

前端切完圖,處理好接口信息,接著就是把靜態(tài)demo交給后臺(tái)去拼接,這是一般的流程。這種流程存在很多的缺陷。

  • 后端同學(xué)對(duì)文件進(jìn)行拆分拼接的時(shí)候,由于對(duì)前端知識(shí)不熟悉,可能會(huì)搞出一堆bug,到最后又需要前端同學(xué)幫助分析原因,而前端同學(xué)又不是特別了解后端使用的模板,造成尷尬的局面。
  • 如果前端沒有使用統(tǒng)一化的文件夾結(jié)構(gòu),并且靜態(tài)資源(如圖片,css,js等)沒有剝離出來放到 CDN,而是使用相對(duì)路徑去引用,當(dāng)后端同學(xué)需要對(duì)靜態(tài)資源作相關(guān)配置時(shí),又得修改各個(gè)link,script標(biāo)簽的src屬性,容易出錯(cuò)。
  • 接口問題
    1. 后端數(shù)據(jù)沒有準(zhǔn)備好,前端需要自己模擬一套,成本高,如果后期接口有改變,自己模擬的那套數(shù)據(jù)又不行了。
    2. 后端數(shù)據(jù)已經(jīng)開發(fā)好,接口也準(zhǔn)備好了,本地需要代理線上數(shù)據(jù)進(jìn)行測(cè)試。這里有兩個(gè)費(fèi)神的地方,一是需要代理,否則可能跨域,二是接口信息如果改動(dòng),后期接你項(xiàng)目的人需要改你的代碼,麻煩。
  • 不方便控制輸出。為了讓首屏加載速度快一點(diǎn),我們期望后端先吐出一點(diǎn)數(shù)據(jù),剩下的才去 ajax 渲染,但讓后端吐出多少數(shù)據(jù),我們不好控。

當(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)也是十分明顯的:

  • 頁面太重,前端渲染工作量也大
  • 首屏還是慢
  • 前后端模板復(fù)用不了
  • SEO 依然很狗血(quickling 架構(gòu)成本高)
  • history 管理麻煩

問題多的已經(jīng)是無力吐槽了,當(dāng)然他依然有自己的優(yōu)勢(shì),咱們也不能一票否決。

針對(duì)上面看到的問題,現(xiàn)在也有一些團(tuán)隊(duì)在嘗試前后端之間加一個(gè)中間層(比如淘寶UED的 MidWay )。這個(gè)中間層由前端來控制。

JavaScript
1
2
3
4
5
6
7
8
9
10
11
    +----------------+
    |       F2E      |
    +---↑--------↑---+
        |        |
    +---↓--------↓---+
    |     Middle     |
    +---↑--------↑---+
        |        |  
    +---↓--------↓---+
    |       R2E      |
    +----------------+

中間層的作用就是為了更好的控制數(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è)問題又回到了接口。

  • 接口文檔由誰來撰寫和維護(hù)?
  • 接口信息的改動(dòng)如何向前后端傳遞?
  • 如何根據(jù)接口規(guī)范拿到前后端可用的測(cè)試數(shù)據(jù)?
  • 使用哪種接口?JSON,JSONP?
  • JSONP 的安全性問題如何處理?

這一系列的問題一直困擾著奮戰(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
1
2
3
typeof callback === "function" && callback({
   json: "jsonContent"
})

在請(qǐng)求的參數(shù)中加入 callback 參數(shù),如 /mock/hashString?cb=callback,一般的 io(ajax) 庫都對(duì)異步數(shù)據(jù)獲取做了封裝,我們?cè)跍y(cè)試的時(shí)候使用 jsonp,回頭上線,將 dataType 改成 json 就行了。

JavaScript
1
2
3
4
5
IO({
  url: "http://",
  dataType: "jsonp", //json
  success: function(){}
})

這里略微麻煩的是 POST 方法,jsonp 只能使用 get 方式插入 script 節(jié)點(diǎn)去請(qǐng)求數(shù)據(jù),但是 POST,只能呵呵了。

這里的處理也有多重方式可以參考:

  • 修改 Hosts,讓 mock 的域名指向開發(fā)域名
  • mock 設(shè)置 header 響應(yīng)頭,Access-Allow-Origin-Control

對(duì)于如何拿到跨域的接口信息,我也給出幾個(gè)參考方案:

  • fiddler 替換包,好像是支持正則的,感興趣的可以研究下(求分享研究結(jié)果,因?yàn)槲覜]找到正則的設(shè)置位置)
  • 使用 HTTPX 或者其他代理工具,原理和 fiddler 類似,不過可視化效果(體驗(yàn))要好很多,畢竟人家是專門做代理用的。
  • 自己寫一段腳本代理,也就是本地開一個(gè)代理服務(wù)器,這里需要考慮端口的占用問題。其實(shí)我不推薦監(jiān)聽端口,一個(gè)比較不錯(cuò)的方案是本地請(qǐng)求全部指向一個(gè)腳本文件,然后腳本轉(zhuǎn)發(fā)URL,如:

JavaScript
1
2
3
4
5
原始請(qǐng)求:http:///api/test.json
在ajax請(qǐng)求的時(shí)候:
$.ajax({
  url: "http://<local>/api.php?path=/api/text.json"
});

  • php中處理就比較簡(jiǎn)單啦:

JavaScript
1
2
3
4
5
if(!isset($_GET["page"])){
  echo 0;
  exit();
}
echo file_get_contents($_GET["path"]);

  • Ctrl+S,保存把線上的接口數(shù)據(jù)到本地的api文件夾吧-_-||

三、小結(jié)

本文只是對(duì)前后端協(xié)作存在的問題和現(xiàn)有的幾種常見模式做了簡(jiǎn)要的列舉,JSON Schema 具體如何去運(yùn)用,還有接口的維護(hù)問題、接口信息的獲取問題沒有具體闡述,這個(gè)后續(xù)有時(shí)間會(huì)整理下我對(duì)他的理解。

如果有人讓你推薦前端技術(shù)書,請(qǐng)讓他看這個(gè)列表 ->《經(jīng)典前端技術(shù)書籍
1 收藏 評(píng)論

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    免费久久一级欧美特大黄孕妇| 日韩欧美91在线视频| 美国黑人一级黄色大片| 国产户外勾引精品露出一区| 不卡视频免费一区二区三区| 欧美日韩精品一区免费| 日韩一区二区三区18| 亚洲一区二区精品免费| 女人高潮被爽到呻吟在线观看| 国产高清视频一区不卡| 亚洲国产欧美精品久久| 高清一区二区三区大伊香蕉| 国产中文另类天堂二区| 国产精品刮毛视频不卡| 欧美精品专区一区二区| 欧美丰满大屁股一区二区三区| 都市激情小说在线一区二区三区| 亚洲欧洲在线一区二区三区| 高清一区二区三区四区五区 | 开心久久综合激情五月天| 日本黄色美女日本黄色| 九九热最新视频免费观看| 免费观看一级欧美大片| 日韩一区二区三区高清在| 日韩高清毛片免费观看| 欧美中文字幕日韩精品| 欧美亚洲美女资源国产| 麻豆91成人国产在线观看| 午夜精品麻豆视频91| 国产精品一区日韩欧美| 好吊视频一区二区在线| 亚洲香艳网久久五月婷婷| 大屁股肥臀熟女一区二区视频| 亚洲一区二区三区精选| 亚洲精品成人午夜久久| 五月综合激情婷婷丁香| 国产成人综合亚洲欧美日韩| 国产免费成人激情视频| 国产免费无遮挡精品视频| 字幕日本欧美一区二区| 日本午夜一本久久久综合|