一般對于接口返回狀態(tài)碼表示不同的結(jié)果,比如登陸,有些人會寫很多個狀態(tài)碼,如:101,102,103,而有些人只寫一個,如:status為0或者1,具體例子:
只用status一個狀態(tài)碼:
// 只要登陸成功,status為1,否則都為0,具體信息放在msg里面
// 成功
{
status: 1,
msg: '登陸成功'
}
// 用戶名不存在
{
status: 0,
msg: '用戶名不存在'
}
// 密碼錯誤
{
status: 0,
msg: '密碼錯誤'
}
用多個狀態(tài)碼的情況可能如下:
// 成功
{
code: 200,
msg: '登陸成功'
}
// 用戶名不存在
{
code: 201,
msg: '用戶名不存在'
}
// 密碼錯誤
{
code: 202,
msg: '密碼錯誤'
}
顯然第二種會更麻煩,雖然更具體。大家一般都會第二種的吧,第一種的話,會有什么不合適的地方的呢?想看看大家的想法
| 字段 | 含義 |
|---|---|
| code | 服務端處理業(yè)務后的返回代碼,其中包含公共響應代碼和當前業(yè)務特有代碼 組成右 http_code+3位數(shù)字,成功除外,成功使用200表示,其他的,如客戶端請求權(quán)限錯誤 401001
|
| msg | 服務端處理后返回給客戶端的提示性文字,當然,客戶端不應該直接使用此 提示,而是根據(jù)code自定義提示語給用戶 |
| data | 處理業(yè)務邏輯后需要返回的數(shù)據(jù),必須為一個對象,而非任何標量值。 |
| session | 這里的session并不是傳統(tǒng)http中的session,而是單次會話的標識符,因為在 客戶端調(diào)用API的過程中,難免會遇到數(shù)據(jù)問題,導致不好調(diào)試,所以應該將 所有的請求記錄放進去日志,然后當客戶端出現(xiàn)問題時根據(jù)請求的session來 定位是哪一個會話,然后使用postman對請求進行重放調(diào)試,除了請求日志, 還應該保存請求日志 |
除了業(yè)務響應代碼,應該還有一些公共響應代碼
| code | 示例 |
|---|---|
| 200 | 請求成功 |
| 401001 | 用戶身份失效 |
| 400001 | 請求參數(shù)錯誤 |
| 404001 | 服務沒有數(shù)據(jù) |
....
其實這個還是看團隊吧,比如最近寫的一個Api,我前期定義錯誤返回碼:
$map = [
-1001 => '用戶名不存在',
-1002 => '密碼錯誤',
-1003 => '驗證碼錯誤'
];
采用定義一個這樣map錯誤碼,1 001,1代表模塊,001代表錯誤碼。只是前臺那里只要你不是返回200(約定成功返回200),其他一律都認定錯誤返回碼。其實通過200(成功),-200(不成功)這種簡單的也可以,因為你請求出現(xiàn)的異常錯誤,肯定是在同一個模塊下的報錯,所以排查起來也不是很麻煩。
一些特殊的狀態(tài)碼,肯定是要約定好的。如token過期需要重新登陸
-100 => '請重新登陸'
這樣。
我的設計方案是:
code: 狀態(tài)碼
summary: 說明
data: 數(shù)據(jù)
key: 參數(shù)加密
timestamp: 時間戳
nonce: 非重復隨機值
說明:
code:狀態(tài)碼,使用字符串
failure_password_or_account_error,這種具有自說明性的狀態(tài)碼,并且不容易重復success。其他狀態(tài)碼全局唯一但是各個接口可能會出現(xiàn)相同狀態(tài)碼。do_something_1、do_something2等。login_status_timeout,登錄過期......summary:說明,是對狀態(tài)碼的說明,一般是中文,
failure_password_or_account_error,前端不需要捕捉這個錯誤,而直接提示summary,此時sumamry的內(nèi)容是賬戶或者密碼錯誤,這樣前端就不需要捕捉每個狀態(tài)碼,只需要捕捉特定的的就好了。error_yo_yo:異地登錄,請重新登錄,這時候前端暫時不捕捉也沒事,畢竟默認就把summary提示出來了,所以用戶就會看到異地登錄,請重新登錄的提示,雖然跳到登錄頁面更好,但是暫時也不影響用戶操作。data:這是真正的數(shù)據(jù),需要的時候就返回key:對data的加密,用來校驗參數(shù)是否被篡改timestamp:時間戳,可用來加密data入?yún)ⅲ瑫r給后端校驗nonce:無意義隨機字符串,配合timestamp防重放攻擊說明:
上面的流程直接封裝成網(wǎng)絡層,配合模型層,上層的業(yè)務幾乎感覺不到這里的繁雜的東西,對上層來說,該捕捉狀態(tài)碼的時候,直接捕捉,不需要捕捉的時候,甚至都不用理會。將細節(jié)屏蔽、擴展能力擴大才是最優(yōu)的
使用經(jīng)驗:
這一套使用了大概2年,也經(jīng)過好幾次改版和迭代,橫跨了十多個項目,涉及原生安卓、ios、js 等,雖然上面有很多細節(jié)沒有說的很清晰,但是也差不多了。
更傾向于第二種,并且也建議直接用第二種,也是系統(tǒng)優(yōu)化茁壯的必然選擇。
樓上有人說對前端方便與否的,其實都一樣,正確狀態(tài)碼就一個 0,1,200 視自己習慣而定,其他都是錯誤碼,像我習慣0是success,其他都是異常,而對前端來說無非是判斷是0還是1與判斷是0還是非0的區(qū)別 實在想不通這算什么麻煩?
采用第二種方案后端給出詳細錯誤code能使錯誤信息更精準,嫌麻煩無意義的直接當成0和1用統(tǒng)一錯誤提示即可,也就是說第二種方案是可以向第一種無縫兼容的。
但一但決定采用第一種方案,后端只給你一種錯誤code,你以后后端想改第二種的話那代碼量就可觀了
北大青鳥APTECH成立于1999年。依托北京大學優(yōu)質(zhì)雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國IT技能型緊缺人才,是大數(shù)據(jù)專業(yè)的國家
達內(nèi)教育集團成立于2002年,是一家由留學海歸創(chuàng)辦的高端職業(yè)教育培訓機構(gòu),是中國一站式人才培養(yǎng)平臺、一站式人才輸送平臺。2014年4月3日在美國成功上市,融資1
北大課工場是北京大學校辦產(chǎn)業(yè)為響應國家深化產(chǎn)教融合/校企合作的政策,積極推進“中國制造2025”,實現(xiàn)中華民族偉大復興的升級產(chǎn)業(yè)鏈。利用北京大學優(yōu)質(zhì)教育資源及背
博為峰,中國職業(yè)人才培訓領域的先行者
曾工作于聯(lián)想擔任系統(tǒng)開發(fā)工程師,曾在博彥科技股份有限公司擔任項目經(jīng)理從事移動互聯(lián)網(wǎng)管理及研發(fā)工作,曾創(chuàng)辦藍懿科技有限責任公司從事總經(jīng)理職務負責iOS教學及管理工作。
浪潮集團項目經(jīng)理。精通Java與.NET 技術(shù), 熟練的跨平臺面向?qū)ο箝_發(fā)經(jīng)驗,技術(shù)功底深厚。 授課風格 授課風格清新自然、條理清晰、主次分明、重點難點突出、引人入勝。
精通HTML5和CSS3;Javascript及主流js庫,具有快速界面開發(fā)的能力,對瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網(wǎng)頁制作和網(wǎng)頁游戲開發(fā)。
具有10 年的Java 企業(yè)應用開發(fā)經(jīng)驗。曾經(jīng)歷任德國Software AG 技術(shù)顧問,美國Dachieve 系統(tǒng)架構(gòu)師,美國AngelEngineers Inc. 系統(tǒng)架構(gòu)師。