WebAPI 實現先後端分離

隨着Web技術的發展,如今各類框架,前端的,後端的,數不勝數。全棧工程師的壓力愈來愈大。前端

如今的前端的框架,既能夠作各類Web,又能夠作各類APP,前端框架更新換代愈來愈快,愈來愈多。web

傳統的模式後端

前端和後端進行調試,修改都很是麻煩。每每前端配合後端很痛苦,後端也嫌前端麻煩。api

(無解,能動手解決的事,儘可能別動嘴。辦公室應該常備一些,繃帶,止血條,速效救心丸等藥品。爲了阻止事態升級,辦公室要增強刀具管制條例。)跨域

先後端分離瀏覽器

前端根據事先約定好的文檔,能夠本身摸擬數據,而後開發,測試,調試UI,發佈到線上時把API接口改爲線上API接口,便可完事。安全

前端往後增長新功能,修改UI,本身修改,本身編譯更新本身UI站點,發佈線上只要調上線上API接口便可。並不須要麻煩到後端。二者工做進行分離。前端框架

後端須要跟前端商量好接口,寫好接口文檔,在接口功能上相互溝通(其實至關於需求相互溝通),一旦接口文檔訂好以後,只需按事先約定實現API接口即口。把項目編譯好發佈到線上服務器。便可完事。服務器

後端實現WebApi接口,還能夠面對各類調用,如PC端web,手機APP,或者其它設備。一個接口多種調用,實現代碼去重。restful

工做模式分析

對前端和後端進行分離。各司其職,各自在本身的領域集中精力研究。更能有效的加深技術深度。

 

先後端分離的模式,你須要N名前端工程師和N名後端工程師。

首先咱們要約定一些返回基本的格式,好比用XML,仍是JSON。結果大多數前端都是喜歡JSON,由於JS天生就支持JSON。我貼出一些示例代碼

  {
    "ResultCode": 1300,
    "Message":"權限不足",
    "Data":null,
  }
複製代碼
  {
    "ResultCode": 1600,
    "Message":"邏輯異常",
    "Data":null,
    "DetailError":{
    "ErrCode":1601001,
    "ErrMsg":"金額必須大於>0"
    }
  }

複製代碼

返回參數說明

參數名 類型 是否必有 說明
ResultCode int 返回碼
Message string 結果說明
DetailError josn 具體錯誤
Data josn 數據

 

 

 

 

 

 

 

 

ResultCode

ResultCode 說明
1000 成功
1100 服務器異常
1200 身份驗證異常
1300 權限不足
1400 傳遞參數驗證不經過
1500 版本異常
1600 業務邏輯異常
1700 系統成升級中
1800 該接口己棄用

 

 

 

 

 

 

 

 

 

 

具體異常

這是一個有點爭議的地方,有不少業務邏輯異常,出於對用戶的友好提示。一些生澀難懂的錯誤提示,直接給到用戶,用戶一臉懵逼。可是後端卻不能修改爲友好提示,這樣不方便調試,尋找問題緣由。

通常來說,前端能夠自動修改友好提示給用戶。

若是後端返回字符串,前端寫死在代碼中,萬一,某一天後端認爲這個描述更符合場景,修改的字符串。敵軍還有30秒到達戰場。

建議:儘可能使用異常代碼,你們能夠看到上面貼出例子,就使用的異常代碼。每種異常都有惟一編號,描述能夠更改。可是編號不變。

用戶異常(1601000) 說明
1601001 帳號/密碼錯誤
1601002 帳號被冰凍
1601003 原密碼不對

 

 

 

 

版本控制

 每一個API都有一個版本,其實也是就針對APP,若是是WEB端的,都是直接升級的由於B/S結構自己就是存在升級方便的優點,只須要把服務端更新就能夠了。

版本控制通常用兩種方式

第一種:URL不變,版本寫在HTTP標頭內面。

第二種:版本寫在URL上面。

本人推薦第二種,比較直接方便了解。示例:

http://www.xxx.com/版本號

當前版本號:v1

http://www.baidu.com/v1/UserSecurity/Login

API風格

如今流行的api風格比較多,最出名的就是restful風格。

按本人的經驗,徹底走restful風格是很困難的,可能也是水平問題,在團隊內面也要考慮到其它成員的水平問題。咱們目前API風格仍是保留之前風格。

示例,V*表明版本號

http://xx.com/V*/UserSecurity/SignOut

HTTP謂詞

使用 Post 方法在服務器上建立/修改/刪除資源

使用 Get 方法從服務器檢索某個資源或者資源集合

基本命名規則

使用駱駝式命名法-大駝峯法

跨域處理

前端站點和後端API佈署到不一樣的站點,就會產生跨域問題。

什麼是同源策略?

同源是域名,協議,端口相同。也就是說若是不一樣,則是非同源。

同源策略是瀏覽器的一基本的安全功能,非同源訪問,瀏覽器會進行拒絕。

HMTL上面的SRC地址,你能夠指定任何URL,表單提交,你能夠提交到任何URL。

可是,你若是使用AJAX技術,就會受到同源策略的影響,拒絕提交。

現代瀏覽器幾乎都支持跨域資源請求的一種方式。這種技術叫CORS(跨域資源共享)

CORS跨域分兩種

第一種,簡單跨域。

第二種,複雜跨域。

解決方案:HTTP輸出標頭增長如何節點

注意有前端框架版本,對安全要求較高,不能使用通配符*,要指定跨域域名。

Access-Control-Allow-Origin:*

 

下面節點可填,可不填,根據實際狀況,自行決定。

1
2
3
Access-Control-Allow-Methods:GET,POST,OPTIONS
Access-Control-Allow-Credentials: true
Access-Control-Allow-Headers:根據請求頭的內容,填寫

  

注意:複雜跨域比要簡單跨域麻煩,更花費性能。由於複雜跨域在請求以前會先發一個options預請求,根據響應判斷服務器是否支持跨域。也就是說,實際上請求了兩次。

Cookies做用域

不一樣的站點,如何通用Cookies?

通常狀況只需把cookies做用域設置頂級域名,瀏覽器會自動把cookies在訪問子域名的時候捎上去。

示例,訪問二級域名時候,cookies默認會被傳送過去。

頂級域名:baidul.com
cookies做用域:.baidu.com
二級域名:
www.baidu.com
api.baidu.com

 

示例

下面貼一些示例文檔,其它的就很少講啦

 

基本上,WebApi先後端分離的細節和注意點,都記錄下來,還有更多的細節,須要讀者在開發過程本身去尋找答案。隨筆完畢!

相關文章
相關標籤/搜索