我的編碼習慣 - 接口定義

工作中,少不了要定義各種接口,系統集成要定義接口,前後臺掉調用也要定義接口。接口定義一定程度上能反應程序員的編程功底。列舉一下工作中我發現大家容易出現的問題:

1. 返回格式不統一

同一個接口,有時候返回數組,有時候返回單個;成功的時候返回對象,失敗的時候返回錯誤信息字符串。工作中有個系統集成就是這樣定義的接口,真是辣眼睛。這個對應代碼上,返回的類型是map,json,object,都是不應該的。實際工作中,我們會定義一個統一的格式,就是ResultBean,分頁的有另外一個PageResultBean

錯誤範例:

  //返回map可讀性不好,儘量不要
 PostMapping("/delete")
  public Map<String, Object> delete(long id, String lang) {

  }

  // 成功返回boolean,失敗返回string,大忌
  PostMapping("/delete")
  public Object delete(long id, String lang) {
    try {
      boolean result = configService.delete(id, local);
      return result;
    } catch (Exception e) {
      log.error(e);
      return e.toString();
    }
  }

2. 沒有考慮失敗情況

一開始只考慮成功場景,等後面測試發現有錯誤情況,怎麼辦,改接口唄,前後臺都改,勞民傷財無用功。

錯誤範例:

  //不返回任何數據,沒有考慮失敗場景,容易返工
 PostMapping("/update")
  public void update(long id, xxx) {

  }

3. 出現和業務無關的輸入參數

如lang語言,當前用戶信息 都不應該出現參數裏面,應該從當前會話裏面獲取。後面講ThreadLocal會說到怎麼樣去掉。除了代碼可讀性不好問題外,尤其是參數出現當前用戶信息的,這是個嚴重問題。

錯誤範例:

  // (當前用戶刪除數據)參數出現lang和userid,尤其是userid,大忌
 PostMapping("/delete")
  public Map<String, Object> delete(long id, String lang, String userId) {

  }

4. 出現複雜的輸入參數

一般情況下,不允許出現例如json字符串這樣的參數,這種參數可讀性極差。應該定義對應的bean。

錯誤範例:

  // 參數出現json格式,可讀性不好,代碼也難看
 PostMapping("/update")
  public Map<String, Object> update(long id, String jsonStr) {

  }

5. 沒有返回應該返回的數據

例如,新增接口一般情況下應該返回新對象的id標識,這需要編程經驗。新手定義的時候因爲前臺沒有用就不返回數據或者只返回true,這都是不恰當的。別人要不要是別人的事情,你該返回的還是應該返回。

錯誤範例:

  // 約定俗成,新建應該返回新對象的信息,只返回boolean容易導致返工
 PostMapping("/add")
  public boolean add(xxx) {
    //xxx
    return configService.add();
  }


很多人看了我的這篇文章 程序員你爲什麼這麼累?,都覺得裏面的技術也很簡單,沒有什麼特別的地方,但是,實現這個代碼框架之前,就是要你的接口的統一的格式ResultBean,aop纔好做。有些人誤解了,我那篇文章說的都不是技術,重點說的是編碼習慣工作方式,如果你重點還是放在什麼技術上,那我也幫不了你了。同樣,如果我後面的關於習慣和規範的帖子,你重點還是放在技術上的話,那是丟了西瓜撿芝麻,有很多貼還是沒有任何技術點呢。


附上ResultBean,沒有任何技術含量:

Data
public class ResultBean<T> implements Serializable {

  private static final long serialVersionUID = 1L;

  public static final int SUCCESS = 0;

  public static final int FAIL = 1;

  public static final int NO_PERMISSION = 2;

  private String msg = "success";

  private int code = SUCCESS;

  private T data;

  public ResultBean() {
    super();
  }

  public ResultBean(T data) {
    super();
    this.data = data;
  }

  public ResultBean(Throwable e) {
    super();
    this.msg = e.toString();
    this.code = FAIL ;
  }
}


統一的接口規範,能幫忙規避很多無用的返工修改和可能出現的問題。能使代碼可讀性更加好,利於進行aop和自動化測試這些額外工作。大家一定要重視。

本文作者:曉風輕
原文鏈接:https://zhuanlan.zhihu.com/p/28708259
版權歸作者所有,轉載請註明出處

發佈了8 篇原創文章 · 獲贊 17 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章