\1. 【強(qiáng)制】前后端交互的 API,需要明確協(xié)議、域名、路徑、請(qǐng)求方法、請(qǐng)求內(nèi)容、狀態(tài)碼、響應(yīng)體。
\2. 【強(qiáng)制】前后端數(shù)據(jù)列表相關(guān)的接口返回,如果為空,則返回空數(shù)組[]或空集合 {}
。
null
判斷。
\3. 【強(qiáng)制】服務(wù)端發(fā)生錯(cuò)誤時(shí),返回給前端的響應(yīng)信息必須包含 HTTP 狀態(tài)碼,errorCode
、errorMessage
、用戶(hù)提示信息四個(gè)部分。
errorCode
:參考附表 3。errorMessage
:簡(jiǎn)要描述后端出錯(cuò)原因,便于錯(cuò)誤排查人員快速定位問(wèn)題,注意不要包含敏感數(shù)據(jù)信息。200 OK
: 表明該請(qǐng)求被成功地完成,所請(qǐng)求的資源發(fā)送到客戶(hù)端。
2) 401 Unauthorized
: 請(qǐng)求要求身份驗(yàn)證,常見(jiàn)對(duì)于需要登錄而用戶(hù)未登錄的情況。
3) 403 Forbidden
:服務(wù)器拒絕請(qǐng)求,常見(jiàn)于機(jī)密信息或復(fù)制其它登錄用戶(hù)鏈接訪問(wèn)服務(wù)器的情況。
4) 404 Not Found
: 服務(wù)器無(wú)法取得所請(qǐng)求的網(wǎng)頁(yè),請(qǐng)求資源不存在。
5) 500 Internal Server Error
: 服務(wù)器內(nèi)部錯(cuò)誤。
\4. 【強(qiáng)制】在前后端交互的 JSON 格式數(shù)據(jù)中,所有的 key
必須為小寫(xiě)字母開(kāi)始的 lowerCamelCase
風(fēng)格,符合英文表達(dá)習(xí)慣,且表意完整。
errorCode
/ errorMessage
/ assetStatus
/ menuList
/ orderList
/ configFlag
ERRORCODE
/ ERROR_CODE
/ error_message
/ error-message
/ errormessage
/ ErrorMessage
/ msg
\5. 【強(qiáng)制】errorMessage
是前后端錯(cuò)誤追蹤機(jī)制的體現(xiàn),可以在前端輸出到 type="hidden"
文字類(lèi)控件中,或者用戶(hù)端的日志中,幫助我們快速地定位出問(wèn)題。
\6. 【強(qiáng)制】對(duì)于需要使用超大整數(shù)的場(chǎng)景,服務(wù)端一律使用 String
字符串類(lèi)型返回,禁止使用 Long
類(lèi)型。
Long
整型數(shù)據(jù)給前端,JS 會(huì)自動(dòng)轉(zhuǎn)換為 Number
類(lèi)型(注:此類(lèi)型為雙精度浮點(diǎn)數(shù),表示原理與取值范圍等同于 Java 中的 Double
)。Long
類(lèi)型能表示的最大值是 2 的 63 次方-1,在取值范圍之內(nèi),超過(guò) 2 的 53 次方 (9007199254740992)的數(shù)值轉(zhuǎn)化為 JS 的 Number
時(shí),有些數(shù)值會(huì)有精度損失。擴(kuò)展說(shuō)明,在 Long 取值范圍內(nèi),任何 2 的指數(shù)次整數(shù)都是絕對(duì)不會(huì)存在精度損失的,所以說(shuō)精度損失是一個(gè)概率問(wèn)題。若浮點(diǎn)數(shù)尾數(shù)位與指數(shù)位空間不限,則可以精確表示任何整數(shù),但很不幸,雙精度浮點(diǎn)數(shù)的尾數(shù)位只有 52 位。\7. 【強(qiáng)制】HTTP 請(qǐng)求通過(guò) URL 傳遞參數(shù)時(shí),不能超過(guò) 2048 字節(jié)。
\8. 【強(qiáng)制】HTTP 請(qǐng)求通過(guò) body 傳遞內(nèi)容時(shí),必須控制長(zhǎng)度,超出最大長(zhǎng)度后,后端解析會(huì)出錯(cuò)。
nginx
默認(rèn)限制是 1MB,tomcat
默認(rèn)限制為 2MB,當(dāng)確實(shí)有業(yè)務(wù)需要傳較大內(nèi)容時(shí),可以通過(guò)調(diào)大服務(wù)器端的限制。\9. 【強(qiáng)制】在翻頁(yè)場(chǎng)景中,用戶(hù)輸入?yún)?shù)的小于 1,則前端返回第一頁(yè)參數(shù)給后端;后端發(fā)現(xiàn)用戶(hù)輸入的參數(shù)大于總頁(yè)數(shù),直接返回最后一頁(yè)。
\10. 【強(qiáng)制】服務(wù)器內(nèi)部重定向必須使用 forward
;外部重定向地址必須使用 URL 統(tǒng)一代理模塊生成,否則會(huì)因線上采用 HTTPS 協(xié)議而導(dǎo)致瀏覽器提示“不安全”,并且還會(huì)帶來(lái) URL 維護(hù)不一致的問(wèn)題。
\11. 【推薦】服務(wù)器返回信息必須被標(biāo)記是否可以緩存,如果緩存,客戶(hù)端可能會(huì)重用之前的請(qǐng)求結(jié)果。
http 1.1
中,s-maxage
告訴服務(wù)器進(jìn)行緩存,時(shí)間單位為秒,用法如下,response.setHeader("Cache-Control", "s-maxage=" + cacheSeconds);
\12. 【推薦】服務(wù)端返回的數(shù)據(jù),使用 JSON 格式而非 XML。
說(shuō)明:盡管 HTTP 支持使用不同的輸出格式,例如純文本,JSON,CSV,XML,RSS 甚至 HTML。如果我們使用的面向用戶(hù)的服務(wù),應(yīng)該選擇 JSON 作為通信中使用的標(biāo)準(zhǔn)數(shù)據(jù)交換格式,包括請(qǐng)求和響應(yīng)。此外,application/JSON
是一種通用的 MIME 類(lèi)型,具有實(shí)用、精簡(jiǎn)、易讀的特點(diǎn)。
\13. 【推薦】前后端的時(shí)間格式統(tǒng)一為"yyyy-MM-dd HH:mm:ss
",統(tǒng)一為 GMT。
14.【參考】在接口路徑中不要加入版本號(hào),版本控制在 HTTP 頭信息中體現(xiàn),有利于向前兼容。
更多建議: