1、接口禁止方法重載俺驶,重載會在做服務(wù)SLA控制幸逆,日志監(jiān)控等方面帶來不便
2、接口注釋必須清晰地表達(dá)如何使用暮现,接口是同步還是異步还绘,服務(wù)內(nèi)容,參數(shù)校驗規(guī)則(精度栖袋、長度拍顷、取值范圍等),返回值信息栋荸,異常情況菇怀;使用場景有要求的需要重點這幾個方面描述
a)不同使用場景,在注釋中區(qū)分描述
b)特定使用場景下的業(yè)務(wù)規(guī)則描述
c)特定使用場景下的注意事項描述
格式上參照注釋規(guī)范{*}
3晌块、接口返回值中屬性禁止使用枚舉爱沟,如果返回值屬性是枚舉類型,會為后期升級埋下隱患(由于枚舉序列化的特性導(dǎo)致
刪除枚舉值和增加枚舉值都可能導(dǎo)致客戶端反序列化失敗)匆背,建議提供String類型呼伸,取值范圍可以通過枚舉來告訴客戶端
禁止聲明方式
/** 強制還款標(biāo)志 */
private EnforceFlagEnum enforceFlag;
/** 手工調(diào)級標(biāo)志 */
private AdjRiskFlagEnum adjustRiskFlag;
建議聲明方式
/** 強制還款標(biāo)志,取值范圍見{@link EnforceFlagEnum}*/
private String enforceFlag;
/** 手工調(diào)級標(biāo)志钝尸,取值范圍見{@link AdjRiskFlagEnum}*/
private String adjustRiskFlag;
4括享、接口參數(shù)涉及取值范圍選擇的(比如交易碼,渠道類型珍促,身份標(biāo)識)铃辖,需提供對應(yīng)的常量給客戶端使用,謹(jǐn)慎使用枚舉做入?yún)?/p>
唯一性控制屬性:a)如接口請求參數(shù)包含業(yè)務(wù)唯一性控制字段猪叙,需要對相關(guān)字段以及唯一性控制方式進行特別說明
b)若在唯一性控制基礎(chǔ)之上娇斩,涉及相關(guān)業(yè)務(wù)冪等控制處理,需要進行相關(guān)詳細(xì)描述
5穴翩、接口方法確保不對外拋出異常犬第,異常情況需要通過錯誤碼通知客戶端,處理失敗也需要有返回值芒帕,返回值實現(xiàn)可參考EcBaseResult及其子類實現(xiàn)
POM依賴
<dependency>
<groupId>com.test.eccommon</groupId>
<artifactId>eccommon-rpc</artifactId>
<version>請用最新版本號</version>
</dependency>
9歉嗓、接口返回值中的方法盡量只提供基本屬性的get set方法,不要提供有業(yè)務(wù)規(guī)則含義的方法(因為業(yè)務(wù)邏輯的變化會要求客戶端升級jar包版本)
10背蟆、操作類的接口務(wù)必考慮冪等性控制鉴分,因為網(wǎng)絡(luò)重發(fā)哮幢,客戶端異常等都可能會引起重復(fù)調(diào)用,嚴(yán)重的可能會引起資損
根據(jù)業(yè)務(wù)約定的部分唯一性字段冠场,對多次請求的數(shù)據(jù)判斷是否重復(fù)提交的判斷依據(jù)家浇,比如通過外部訂單號outOrderNo做唯一性控制,在唯一性控制的基礎(chǔ)上碴裙,對請求中的其他字段進行判斷钢悲,
如果全部業(yè)務(wù)數(shù)據(jù)(或關(guān)鍵業(yè)務(wù)數(shù)據(jù))和已經(jīng)落庫的數(shù)據(jù)一致,則請求一次和請求多次都不會對業(yè)務(wù)處理產(chǎn)生影響舔株,返回結(jié)果不變莺琳,
如果outOrderNo關(guān)聯(lián)的其他信息與系統(tǒng)已經(jīng)持久化的數(shù)據(jù)不一致則提示XXX參數(shù)與原先的數(shù)據(jù)不一致。
11载慈、接口命名統(tǒng)一以Facade結(jié)尾惭等,個別的SPI接口可以使用別的結(jié)尾詞以便更好地表達(dá)SPI的要求,SOFA框架系統(tǒng)對外接口統(tǒng)一存放在xxx-common-service-facade
這個bundle下
12办铡、接口必須提供有效的監(jiān)控日志辞做,配置監(jiān)控報警規(guī)則監(jiān)控日志輸出見日志規(guī)范
13、敏感信息:接口返回對象屬性字段包含敏感信息寡具,需要做好標(biāo)識秤茅,進行相關(guān)提示避免客戶端打印到日志中去
金額:接口返回對象屬性涉及到金額,需要描述金額的單位以及對應(yīng)的幣種 統(tǒng)一使用支付寶金額類com.iwallet.biz.common.util.money.Money
Money所在jar坐標(biāo)
<dependency>
<groupId>com.test.common</groupId>
<artifactId>test-common-lang</artifactId>
<version>2.0.9</version>
</dependency>