PTT評價

[請益] 怎麼處理API版本不同的問題?

看板Soft_Job標題[請益] 怎麼處理API版本不同的問題?作者
a88241050
(再回頭已是百殘身)
時間推噓13 推:13 噓:0 →:28

我是後端工程師

要寫API給WEB跟APP前端

WEB跟APP有些API共用有些沒有

後端就只有一個STA版本

也就是說一個版本要同時滿足APP和WEB的需求

但我們PROD的上線時間又不是統一的

有可能今天APP要上一個新的功能

所以APP和後端都要更版

但因為WEB沒有要更新

所以後端API要同時滿足前端新舊版本的需求

講白一點就是"只能加key,不能刪key"

久而久之就會看到一隻API回了幾十個key

但實際上前端很多key都沒用到

那隻API就會變得很雜

我們現在每個Vo動不動就2,30個key

有時看程式會看得很亂

不知道大家都怎麼處理這種問題?

資深前輩是跟我說改API都一定要向前相容

因為你不能保證用戶是否用最新版本

所以key都是只加不刪嗎

--

※ PTT 留言評論
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 61.220.158.181 (臺灣)
PTT 網址

bill020506/28 18:36看樣子應該沒有做版號?

codepo06/28 18:40API endpoint 可以加版號上去啊 例如: /api/v1/xxx

abcf06/28 18:56app做強制更版機制,這樣就不用永遠向下相容

呃.. 但我們同一套程式新舊兩個app是分開的 因為改動非常大,所以pm說就是用一個新的殼去包,但考量到有些用戶沒有裝我們新的 app,所以就變成後端API要讓前端新舊版本都能用

※ 編輯: a88241050 (123.192.130.8 臺灣), 06/28/2021 19:03:52

MoonCode06/28 19:02這app若不是很重要 用戶看到強更直接刪除

fantasystar06/28 19:291. API 分版號 2. 給 Web 跟給 App 的API 拆成兩組

BlacksPig06/28 19:39不知道你的語言,java的話有幾個API版本方式可以挑著

BlacksPig06/28 19:39用,URL(上面大大提到的)、param、header、accept he

BlacksPig06/28 19:39ader(produce)

jack020406/28 20:34靠傳參數處理,沒傳就走舊的邏輯,參數來源塞哪都行

jack020406/28 20:38最好還是把APP獨立用的接口分出來放,或加版號

kvjo06/28 21:07重點是不是先交代一下這麼多舊版本必要存在的原因

smalldra06/28 21:08第一要考驗db migration的功力 接著遲早某些版本要廢棄

DCTmaybe06/28 21:11如果全部都要相容,那為什麼要切版本?

kvjo06/28 21:18你可能沒權力決定 如果是我 這樣混亂與混用太嚴重

kvjo06/28 21:18我會直接管理面結合市場面 切一個大版本 分開出來

kvjo06/28 21:19這需要你向上管理 新版本不向後支援 你也沒聽過edge

kvjo06/28 21:19還要兼容 ie6

jack020406/28 21:22這也要說一下中國手機超多自建的瀏覽器,爛到流湯

jack020406/28 21:22可是有人客群在那邊,還是要支援,各種JS神奇錯誤

jack020406/28 21:23還有CSS問題,都接近無解的

bill020506/28 22:27API不可能無限向下支援 那只會造成往後的困擾

bill020506/28 22:28該捨棄的還是要捨棄

hakama9906/28 22:59新舊API要分開阿..

ldkrsi06/28 23:27這年頭還要讓菜鳥去麻煩這種困擾 我覺得你們公司人的問題

ldkrsi06/28 23:27比較大

ldkrsi06/28 23:29上面推文的方法己經普遍使用超過十年 運作起來符合也符合

ldkrsi06/28 23:29你的需要 但你的前輩一直沒去調應該不是技術面問題

viper970906/29 00:15分兩組API吧

WaterLengend06/29 01:34當初沒切清楚 後面沒人想管 今天就爛到流湯 真的覺

WaterLengend06/29 01:34得很痛苦看你要不要提議翻新,被打槍就讓他去吧

wxywxywxy06/29 09:16切版本啊 看要切在route 還是你要用一個header

jason457106/29 12:44API一定可以分更細 有新功能就塞進舊的API只代表初始階

jason457106/29 12:44段就沒規劃好

jinmin8806/29 13:12一是api路徑帶版本,二是讀取user-agent判斷client版本

hhsu1606/29 18:59看看graphQL

superpandal06/29 23:20適時整理一波就對了 不要到變成屎山

superpandal06/29 23:24工具沒有完美的 很多都有局限性 有些甚至難用

superpandal06/29 23:24弄到很好難道不是整理的人的功勞嗎 XD

jim743407/01 20:56只能等強制 APP 更版的時候把 API 切開了吧...

shooter55507/02 13:54靠傳參?

shooter55507/02 13:57或者用版本path隔開 舊的做成wrapper包新的api