打破了vs你错了
為微服務(wù)構(gòu)建REST API時(shí),需要做出一些關(guān)于響應(yīng)的設(shè)計(jì)決策。 某些響應(yīng)顯然是微服務(wù)周圍協(xié)議的產(chǎn)物–例如3xx代碼之類的東西都與重定向和路由有關(guān)。
通常,您將嘗試獲取正確的2xx代碼以取得成功。 如有疑問(wèn),將為200(確定),但對(duì)于打算創(chuàng)建數(shù)據(jù)的請(qǐng)求,請(qǐng)考慮201(已創(chuàng)建),對(duì)于將在以后處理的請(qǐng)求,請(qǐng)考慮202(已接受)。
在本文中,我想討論用于錯(cuò)誤的4xx和5xx響應(yīng)。 我還要考慮您的服務(wù)是否將嘗試容忍下游錯(cuò)誤。 您希望軟件變得越復(fù)雜,內(nèi)部異常就越精確。
確切地說(shuō),我的意思是簡(jiǎn)單。
笨拙的異常處理策略最終將導(dǎo)致艱苦的工作來(lái)應(yīng)對(duì)所有用例。
簡(jiǎn)化簡(jiǎn)化簡(jiǎn)化
此刻,每當(dāng)我被要求對(duì)微服務(wù)中的異常和錯(cuò)誤提出意見時(shí),我都會(huì)回答相同的答案。
有兩類錯(cuò)誤的...它出了問(wèn)題,或者你就錯(cuò)了。
你錯(cuò)了
客戶端錯(cuò)誤最容易檢測(cè),需要與響應(yīng)代碼一樣精確的錯(cuò)誤處理。 通常,404錯(cuò)誤并不是真正的例外,就如同返回零結(jié)果一樣。 對(duì)于其他錯(cuò)誤,您基本上得到了:
- 安全違規(guī),在處理請(qǐng)求之前應(yīng)在適當(dāng)?shù)目蚣苤羞M(jìn)行檢查
- 無(wú)效的請(qǐng)求-通常是畸形的身體
容易忘記,如果隨機(jī)的Json解析異常發(fā)生在正確的層,則可以簡(jiǎn)單地將其歸類為您錯(cuò)了。
一旦知道了要嘗試證明的簡(jiǎn)單分類,就可以輕松地了解要做什么和要測(cè)試什么。
錯(cuò)了
這些錯(cuò)誤分為兩類:
- 我的算法無(wú)法解決這種情況-對(duì)不起
- 某些下游服務(wù)無(wú)法正常工作
在這兩個(gè)中,后者可能有一些變體,其中需要對(duì)錯(cuò)誤應(yīng)用重試策略,以便在給我們之前再次提出請(qǐng)求,從而避免出現(xiàn)網(wǎng)絡(luò)故障,或者避免與多個(gè)相關(guān)服務(wù)進(jìn)行某種機(jī)會(huì)游戲,目前其中任何一個(gè)都可能會(huì)出現(xiàn)故障。
提示:如果要獲得回應(yīng)就像Yahtzee的游戲一樣,則需要添加一些重試,并且這些重試應(yīng)該在明確定義的可重試范圍內(nèi), 但出錯(cuò)了。
如果您的重試策略錯(cuò)誤,它將重試以下內(nèi)容:
- 我的算法無(wú)法應(yīng)付
- 該請(qǐng)求永遠(yuǎn)不會(huì)有效
當(dāng)然,生活中的事物不可能是二進(jìn)制的嗎?
有兩種類型的人。 有人認(rèn)為一切都是二元選擇,然后還有其他人……
從標(biāo)題的二進(jìn)制選擇開始是一個(gè)很好的/強(qiáng)烈的起點(diǎn)。 然后在必要時(shí)將每個(gè)類別分為子類別,可以幫助您處理特定的細(xì)微差別。
到目前為止,這對(duì)我們有用。
您可以逐步建立。
有兩種類型的人員:懂得如何逐步構(gòu)建事物的人員,以及……我將在另一天告訴您另一種類型的人員。
翻譯自: https://www.javacodegeeks.com/2020/03/it-broke-vs-youre-wrong.html
總結(jié)
- 上一篇: 医师备案网站(医师备案网)
- 下一篇: Neo4J OGM与Quarkus