當前端的一次操作會調用多個有關聯的後臺接口

由於歷史原因,前端的一次操作需要調用多個後臺接口,以前寫的一般都是調用一個的,或者哪怕是多個,接口之間也不會有依賴。但最近做的需求裏,前端一次操作需要調用兩個後臺接口,且這兩個接口是有關聯的,需要先調用接口A,再調用接口B。

一開始直接寫兩個Promise,一個成功後調用另一個,類似於這樣子

 fetch(urlA)
	 .then((res) => {
	 	if (res.ret == 0) {
		 	fetch(urlB)
			 	.then(() => {
					///
				})
				.catch(e) {
				}
		}

	 })
	 .catch(e){
	 }

一切看上去都這麼美好,直到測試同學發現第二個接口一直調用不了。

才發現自己沒考慮失敗情況,如果接口A調用失敗了,接口B是不會調用的。那麼假設用戶第一次操作,調用接口A成功,但後臺因爲某些原因B接口臨時掛了,或者因爲網絡問題B接口調用失敗了。用戶第二次操作時,接口A因爲保護機制,之前已經調用過一次了,這次錯誤碼會返回非0,這樣就調用不到接口B了。而且不管用戶怎麼重試,都調用不到。

與後臺協商後,決定採用接口A結果返回非零也去嘗試調用接口B,因爲前端可能因爲重啓app、網頁、小程序,無法確保是否調用過接口A,所以用戶的操作流程是調用接口A,不管接口A是否返回成功,都去調用接口B,後臺對接口B的調用進行判定,會判斷接口A是否已經調用,未調用則不處理。

事後回想,其實這應該是常識:

  1. 接口調用可能失敗,一定要考慮失敗的情況
  2. 一次操作調用多個關聯的接口,要考慮若干接口可能調用失敗的所有情況
  3. 前端要做到無狀態,當接口調用失敗後,要能夠恢復,確保下次能發起請求,能正常調用接口

在前端方面,踩的坑還不夠多,導致這種常識現在才知道……

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章