作為一個 Web 應用開發人員,平時工作中最多的工作場景就是開發接口給前端調用或者關聯系統調用。接口寫了這么多,不知道大家有沒有總結過在開發一個接口時需要注意哪些細節。下面列出我自己的一些總結,每次寫接口時都用這些注意點“掃描”下自己的接口,你的接口質量將會上升一個台階。
能完成正常的業務功能
這個點應該不用多說了,我們的接口就是為了完成業務功能的,這個是必須要的。
但如果你的接口僅僅考慮了正常的流程,一旦發生任何異常就運行不起來了,那么你的接口不是一個合格的接口。
如果所有用戶請求都符合接口預期、所有網絡調用都不會超時、所有系統都不會down機,所有系統都能承載大並發的流量,那么程序員的工作量將減輕一大半。“程序員大部分時間都在解決異常”,這句話我想你一定聽過。

其實下面才是本文的重點,怎么讓自己的接口有更高的健壯性、更高的性能以及更高的擴展性,這是我們開發接口中不容忽視的地方。
異常處理
在你這個接口涉及的每個環節,你都要考慮到會不會發生異常。如果異常發生了,你要怎么處理?你的數據要不要回滾?Service是不是已經開啟了事物?事務的隔離級別是否正確?你的代碼有沒有全局異常處理機制?
異常流程處理
正常的流程處理起來很簡單,但是你一定要想到流程中斷以后再進入,你的接口是否支持。比如用戶忽然退出了頁面,用戶突然斷網了,流程的每個環境都有可能出現問題。你要考慮到每個環節點出現問題要怎么處理,代碼是否有容錯性,是在系統不好解決的可以通知運營人員,哪怕進行人工解決,也是一種辦法。
接口參數檢查機制
很多系統異常都是因為用戶傳的參數不對導致格式化錯誤、空指針錯誤等。所以我們要將錯誤扼殺在源頭,對用戶傳過來的參數做嚴格的檢查,在controller層做參數校驗。這個可以結合Spring的Validate機制。
打印准確合理的日志
這邊打日志的原則是不打多余的日志,打印的日志能讓自己看清系統的運行狀態,出問題是能迅速定位問題。
接口權限配置
你的接口哪些角色的用戶可以訪問,用戶不登陸是否可以訪問。
數據權限問題
如果你的接口是一個查詢接口,你就不應該查出當前用戶沒有權限訪問的數據。
接口性能優化
- 使用緩存;
- 數據庫加索引;
- 盡量不要在循環中調用數據庫;
- 盡量不要多張表關聯查詢;
- 考慮使用異步線程;
- 提升系統配置(窮途末路的方法)
提升接口性能的方法有很多,這邊只是舉了幾個通用的列子。結合你具體的業務場景,有時調整下業務的執行流程也能大大提升用戶體驗。比如銀行開戶的流程可以分為授信和簽約兩步,其中授信是比較耗時的操作,那我們可以考慮在用戶提交身份證材料時觸發授信操作,用戶提交完材料,授信操作可能已經完成了。
接口冪等性
考慮下你的接口是否要保持冪等
接口自測的問題
很多開發人員都不會想測試場景來測試自己的接口。我自己覺得我們想的測試場景要夠全,甚至要比測試還多。我的建議是在開發環境一定要自己自測一下,自己想各種測試場景,造各種數據進行測試,同時將自己造的數據保存下來,方便后續用到。
一些其他細節
- 如果是更新操作,是不是需要加樂觀鎖更新;
- 如果涉及到分布式系統要考慮數據一致性問題。
- 擴展性優化,你的代碼是否有很好的擴展性。
- 開發環境改了代碼,一定要到測試環境測試一下。(因為測試環境和開發環境可能有很大的區別,比如jdk版本,代碼不一定能跑起來)
