工作中,少不了要定義各種介面,系統整合要定義介面,前後臺掉呼叫也要定義介面。介面定義一定程度上能反應程式設計師的程式設計功底。列舉一下工作中我發現大家容易出現的問題:

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和自動化測試這些額外工作。大家一定要重視。

下一篇講controller的規範,還有用到ResultBean,敬請留意。覺得有用請點贊加關注?

====================GITHUB地址======================

所有的程式碼細節都在已經上了github了,地址

xwjie/PLMCodeTemplate,歡迎加星。有問題歡迎提出。