哎呀呀,今天本來都準備上線了,結(jié)果發(fā)現(xiàn)了一個小bug(不影響主流程的那種),是由于三方接口返回不明確引起的。主要的問題就是http接口對方返回的是null,而我沒有判空。當我判空后,又發(fā)現(xiàn),媽的格式又和約定好的不一樣,有個關(guān)鍵success字段居然是空的。。。( ̄▽ ̄)||
然后針對今天的問題,老大叫我去討論了下,并且傳授了一份在調(diào)用http接口時常見的注意事項。
接口編程(請求方)
接口調(diào)用常見流程
- 請求參數(shù)合法校驗
- 打印/記錄請求報文(日志和數(shù)據(jù)庫)
- 調(diào)用
- 網(wǎng)絡(luò)相關(guān)異常處理
網(wǎng)絡(luò)連接異常
網(wǎng)絡(luò)超時/合理設(shè)置超時時間
其它未知異常 - 打印/記錄返回報文
- 報文格式校驗
- 報文解析(解析也可以作為格式校驗的一部分)
- 報文參數(shù)校驗(格式、取值范圍等)
接口調(diào)用切記
- 不打印/記錄請求返回報文,給調(diào)試和排查問題帶來很大麻煩
- 不處理網(wǎng)絡(luò)相關(guān)異常,程序不夠健壯
- try/catch大量代碼,錯誤提示不友好、讓后續(xù)維護的人沒有安全感
- 請求和返回參數(shù)校驗不充分,程序不夠健壯
- 沒有設(shè)計錯誤碼/大量未知錯誤碼
- 報文記錄時:不能等獲得返回報文時再和請求報文一起記錄,需要分別開新事物記錄到數(shù)據(jù)庫中
一定要注意設(shè)置合理的超時時間!以前做過一個很坑的項目,一個接口需要我設(shè)置5分鐘的超時時間,后來商量著讓對方改為異步的了,后續(xù)回調(diào)通知結(jié)果。
以上是是針對請求方的,如果以后最為提供方的話。
注意點
- 接口文檔一定要寫詳細,每個字段的類型,是否必傳,枚舉說明,字段的長度。
- 對于關(guān)鍵的返回值,比如狀態(tài)字段,一定要約定好,不能隨意增減。
- 接口地址一般前綴都會加上版本/v1/xxx之類的
- 接口升級時,請一定要注意對以往版本的兼容(/(ㄒoㄒ)/~~特別是新增字段這種,不要出現(xiàn)由于以往版本由于字段無法識別導(dǎo)致錯誤的情況)
- 接口要精簡,不要傳無用字段
- 對于處理時間很長的接口,采用回調(diào)通知結(jié)果的方式
- 一定要記錄接口的調(diào)用(request,response)情況(同上)
- 對每個接口的調(diào)用方要以渠道號區(qū)分,每個渠道使用不同的密鑰