前(qian)端同事最(zui)討厭的后端行為,看(kan)看(kan)你中了沒有(you)
公眾號「古時的風箏」,專注于后端技術,尤其是 Java 及周邊生態。
個人博客:
大家好,我是風箏
聽說這是(shi)(shi)前(qian)端程(cheng)序員最討厭的(de)后端行為,不(bu)知(zhi)道(dao)你(ni)有沒有碰到過,或者你(ni)的(de)前(qian)端同(tong)事(shi)雖然沒跟(gen)你(ni)說過,但是(shi)(shi)你(ni)已(yi)經被偷偷吐槽(cao)了(le)。

前端吐槽:后端從不自測接口,等到前后端聯調時,這個接口獲取不到,那個接口提交不了,把前端當成自己的接口測試員,耽誤前端的開發進度。
聽(ting)到(dao)這個吐槽,仿佛(fo)看到(dao)曾經(jing)羞愧(kui)的自己。這個毛(mao)病以前我(wo)也有(you)啊,有(you)些接(jie)口(kou),尤(you)其是大表(biao)單(dan)提(ti)交接(jie)口(kou),表(biao)單(dan)特別大,字段很多,有(you)時候就偷懶(lan)了(le),直接(jie)編譯(yi)過了(le),就發到(dao)測試環境了(le)。前端(duan)同時聯調的時候一調接(jie)口(kou),異常了(le)。
好在(zai)后來改了(le),畢竟讓人發現自己(ji)接口(kou)寫的有問題(ti),也是(shi)一件丟臉的事(shi)兒(er)。
但是(shi)我還真見過后端的(de)同學,寫完接口一個都(dou)不(bu)測(ce),直接發(fa)測(ce)試環境的(de)。
我就(jiu)(jiu)碰到過厲(li)害(hai)的(de),編譯(yi)都不(bu)過,就(jiu)(jiu)直接提(ti)代碼。以(yi)前,有(you)個新來(lai)的(de)同事,分了(le)(le)(le)任務就(jiu)(jiu)默默的(de)干著,啥也不(bu)問(wen)(wen),然(ran)后(hou)(hou)他(ta)做的(de)功能測(ce)試(shi)(shi)就(jiu)(jiu)各種(zhong)發現(xian)問(wen)(wen)題(ti)。說(shuo)過之后(hou)(hou),就(jiu)(jiu)改一(yi)(yi)(yi)下,但(dan)是(shi)基本上還是(shi)不(bu)測(ce)試(shi)(shi),本想再給(gei)他(ta)機會的(de),所(suo)以(yi)后(hou)(hou)來(lai)他(ta)每(mei)次提(ti)代碼,我都review一(yi)(yi)(yi)下。直到有(you)一(yi)(yi)(yi)天(tian),我發現(xian)忍不(bu)了(le)(le)(le)了(le)(le)(le),他(ta)把一(yi)(yi)(yi)段全局配置給(gei)注(zhu)釋了(le)(le)(le),然(ran)后(hou)(hou)把代碼提(ti)了(le)(le)(le),我過去問(wen)(wen)他(ta)是(shi)不(bu)是(shi)本地(di)調試(shi)(shi),忘(wang)了(le)(le)(le)取(qu)消(xiao)注(zhu)釋了(le)(le)(le)。他(ta)的(de)回答直接讓(rang)我震(zhen)驚了(le)(le)(le),他(ta)說(shuo):不(bu)是(shi)的(de),是(shi)因為不(bu)注(zhu)釋那段代碼,我本地(di)跑步起來(lai),所(suo)以(yi)肯定是(shi)那段代碼有(you)問(wen)(wen)題(ti),所(suo)以(yi)就(jiu)(jiu)注(zhu)釋了(le)(le)(le)。
然(ran)后,當晚,他就離(li)職了(le)。
解決方式
對于這種大(da)表單類似的(de)問題,應該怎么(me)處理呢(ni)?
好像沒有別(bie)的方法,只(zhi)能克服自(zi)己的懶惰,為自(zi)己寫(xie)的代碼負責。就(jiu)(jiu)想著,萬(wan)一接口有問題,別(bie)人可能會(hui)懷(huai)疑你(ni)水(shui)平不(bu)行,你(ni)水(shui)平不(bu)行,就(jiu)(jiu)是你(ni)不(bu)行啊,程(cheng)序員怎(zen)么能不(bu)行呢。
你可以找那么在線 Java Bean轉 JSON的功能(neng),直接幫你(ni)生(sheng)成(cheng)請求參數,或者現在更可(ke)以借助 ChatGPT ,幫你(ni)生(sheng)成(cheng)請求參數,而且生(sheng)成(cheng)的參數可(ke)能(neng)比你(ni)自己瞎填的看上(shang)去更合理。
或者(zhe),如果是小(xiao)團(tuan)隊,不(bu)拘一(yi)格的話,可(ke)以讓前端(duan)的同(tong)事把(ba)代(dai)碼提了,你本地跑(pao)著自測一(yi)下,讓前端(duan)同(tong)事先(xian)做別的功能,穿插進行也可(ke)以。
前端吐槽:后端修改了字段或返回結構不通知前端
這個就有點不講武德了。
正常情況下,返回(hui)結構和字段都是事先約定好的,一般(ban)都是先寫(xie)接口,做一些 Mock 數據,然后再實現(xian)真實的邏(luo)輯。
除了(le)約(yue)定好(hao)返(fan)回字段(duan)(duan)和結構外,還包括接口(kou)(kou)地址(zhi)、請求(qiu)方法、頭(tou)信息等等,而(er)且一個項目都會有(you)(you)項目接口(kou)(kou)規范,同一類(lei)接口(kou)(kou)的返(fan)回字段(duan)(duan)可能(neng)有(you)(you)很多相同的部(bu)分。
后端(duan)如(ru)果(guo)改接(jie)口(kou),必(bi)須要及時通知前(qian)(qian)端(duan),這其(qi)實應(ying)該是(shi)正常的開發流程。后端(duan)改了接(jie)口(kou),不告訴前(qian)(qian)端(duan),到時候(hou)測試出(chu)問題了,一般都會先找前(qian)(qian)端(duan),這不相當于讓(rang)前(qian)(qian)端(duan)背(bei)鍋了嗎,確實不地道啊。
后端的同學們,謹記啊。
前端吐槽:為了獲取一個信息,要先調用好幾個接口,可能參數還是相同的
假設(she)在(zai)一個詳(xiang)情(qing)(qing)(qing)頁面,以(yi)前端的角(jiao)度就(jiu)是(shi),我獲取詳(xiang)情(qing)(qing)(qing)信息,就(jiu)調用(yong)詳(xiang)情(qing)(qing)(qing)接口(kou)好了,為什(shen)么調用(yong)詳(xiang)情(qing)(qing)(qing)接口(kou)之前,要(yao)(yao)調用(yong)3、4個其他的接口(kou),你詳(xiang)情(qing)(qing)(qing)里需(xu)要(yao)(yao)啥(sha)參(can)數,我直(zhi)接給你傳過去(qu)不就(jiu)好了嗎。
在后(hou)端看來可能(neng)(neng)是這樣的,我這幾(ji)個接口之前(qian)就寫好(hao)了,前(qian)端拿過(guo)去就能(neng)(neng)用,只不過(guo)就是多調幾(ji)次罷了,沒什么(me)大不了的吧。
有些(xie)時(shi)候,可(ke)能(neng)確(que)(que)實是必須這么做的,比如頁(ye)面(mian)內容太(tai)多,有的部分(fen)查(cha)詢邏輯復雜,比較耗(hao)時(shi),這時(shi)候需要異步(bu)加載,這樣搞確(que)(que)實比較好。
但是更多時候其實就是后端犯懶了,不想再寫個新接口。除了涉及到性能的問題,大多數邏輯都應該在(zai)后(hou)端(duan)處理,能用(yong)一個(ge)接口處理完(wan),就不應該讓前端(duan)多調用(yong)第二個(ge)接口。
有(you)前端的(de)朋友曾經問過(guo)我,他(ta)說,他(ta)們(men)現在做的(de)系統中(zhong)有(you)些接口是(shi)根據用戶身份來展示(shi)數據的(de),但(dan)是(shi)前端調用登錄接口登錄系統后,在調用其他(ta)接口的(de)時候,除了在 Header 中(zhong)加(jia)入 token 外,還有(you)傳很多關于用戶信息的(de)很多參數,這樣做是(shi)不(bu)是(shi)不(bu)合理的(de)。
這肯定(ding)不(bu)(bu)合(he)理,token 本(ben)來就(jiu)是(shi)根據用戶身份產生的,后(hou)端(duan)拿到 token 就(jiu)能獲取(qu)用戶信(xin)息,這是(shi)常識問題,讓(rang)前端(duan)在接口中(zhong)再傳一遍,既不(bu)(bu)合(he)理也不(bu)(bu)安(an)全。
類(lei)似的問題還(huan)(huan)有,比如后端接口返回一堆數據,然后有的部分有用(yong)、有的部分沒(mei)有,有的部分還(huan)(huan)涉及到邏輯,不借(jie)助文(wen)檔根本就看不明白(bai)怎么用(yong),這(zhe)其實并不合理。
接口應該盡(jin)量(liang)只包含有用的部分,并且(qie)盡(jin)可能(neng)結構清(qing)晰,配合簡單的字段說明就能(neng)讓(rang)人明白是怎(zen)么回事,是最好的效果(guo)。
如果前后(hou)端都感覺(jue)形勢不(bu)對了(le)(le),后(hou)端一(yi)個接口(kou)處(chu)理性能(neng)跟(gen)不(bu)上(shang)了(le)(le),前端處(chu)理又太麻煩了(le)(le)。這時候就要向上(shang)看了(le)(le),產品設(she)計(ji)上(shang)可能(neng)需要改一(yi)改了(le)(le)。
后端(duan)的同學(xue)(xue)可(ke)以學(xue)(xue)一(yi)(yi)點前端(duan),前端(duan)的同學(xue)(xue)也可(ke)以學(xue)(xue)一(yi)(yi)點后端(duan),當你都懂一(yi)(yi)些的時候,就能兩方面考慮了,這樣做(zuo)出來的東西可(ke)能會(hui)更好用一(yi)(yi)點。總之,前后端(duan)相互理解,畢竟都是為了生活嘛。

