iT邦幫忙

0

重複呼叫同一隻api的情況,如何針對沒有被更動的資料UPDATE狀態

  • 分享至 

  • xImage

各位前輩大大好
小弟在寫api的時候有一段邏輯卡住想不出來
想請各位集思廣益或是提點一下方向

我現在有一隻api是update
假設:
有一份文章有一個GUID,文章內有許多item,各自擁有不同的GUID
item可能代表各種不同的段落(標題、文字、圖片等等),但其類型會重複
在我要update一篇文章時,會是每個item獨立呼叫一次api,把該item送進後台處理後update

在資料庫內,item有一個able欄位來判斷在這份文章內這個item是否是可用的
如果是1就是可用,如果是2則不可用(不可用時在取得文章item的時候就不會撈出來)

我的問題是:
當我在update的時候,會有刪減的item,比方說10個item剩下9個
在如何針對地把刪減的item設為able=2,並且只靠後端檢查
不額外呼叫其他api

原先嘗試的作法是UPDATE方法的一開始就把所有屬於這個文章的item的able都設為2 (不啟用)
但由於每個item都會呼叫一次api,就會把所有人重複的設為2,所以這個做法顯然不對

item的db結構為:

articleId:Guid,文章id,同文章的item都會是同一個articleId
itemId:Guid,各種不同型態的文章item,型態會重複
able:int,是否在該文章為有效item
createtime:datetime,建立時間
lastmodified:datetime,有異動內容就會更新為當下DB時間
看更多先前的討論...收起先前的討論...
powerc iT邦研究生 5 級 ‧ 2021-12-22 09:11:17 檢舉
連同刪減的item也讓他call一次api
To powerc 目前狀況最尷尬的,我在這個update的過程無法知道刪減的item是哪一個
froce iT邦大師 1 級 ‧ 2021-12-22 10:09:05 檢舉
請具體描述一下你前端會送出什麼結構,後端接收後你大致做了什麼動作,要不然很難給你聰明的建議。
依你的目前描述只能跟你說在後端把每個item都取出來,然後跟前端送的比對,分別對每個item去更改。

但實際上應該前端就把該做的動作分開,例如要新增的、要改動的item都放在不同的變數,然後看是要分開打不同的api保持restful或乾脆寫一隻api去整體更改。
送出正確的操作應該是前端的責任,並且這種正確是建立在雙方都同意的api上。
天黑 iT邦研究生 5 級 ‧ 2021-12-22 10:23:15 檢舉
我覺得你在拆一隻api delete 更新 該欄位似乎比較快...不用動作全都混在一起update就不像update
To force
感謝你的建議,不過由於是每個item都獨立呼叫api的話
目前還沒想到如何在一次前端操作內,在後端keep所有的資訊來做你提供的建議
會再跟前端溝通在編輯頁面的時候每個item都設置Delete按鈕,如果沒有Delete的話就視作同一個item,再根據內容跟其他設定Update資訊
感謝你的建議!
To horace_work
對,目前我自己有許多盲點,大家的建議都非常寶貴><
firecold iT邦新手 1 級 ‧ 2021-12-22 11:28:57 檢舉
foreach items 做update並且update sort
然後把not in 的update able=2就好
沒有sort需求就直接
update from table set able=2
where id not in (array_column($items, 'id'))
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

2
海綿寶寶
iT邦大神 1 級 ‧ 2021-12-22 09:44:13
最佳解答

現在有一隻api是update
要update一篇文章時,會是每個item獨立呼叫一次api

依上兩點決定
新增 item 怎麼做,刪減 item 就怎麼做

若新增 item 是:
1.呼叫「新增 item API」---> 寫個/呼叫「刪減 item API」
2.在「update item API」裡新增 ---> 複製並修改成「刪減 item」功能

To 海綿寶寶
目前的狀況為在Update的時候有刪減原先存在的item,但我被呼叫的時候不知道是哪一個item在本次更新遭到刪減
要額外做一個檢查並把沒有被更新(也就是被刪減)的item設為不啟用
還是其實這個較為被動的做法實際上並不可行呢?

在Update的時候有刪減原先存在的item

刪減的?
刪減當時應該知道刪減的是那一個item
就改那一段,加上 update able=2 即可

To 海綿寶寶
這樣說我有想到其他方式,預計會額外放一個按鈕在編輯時、送出前獨立刪除item
如果沒有刪除就視作是同一個item,根據送出來的內容再更新所屬資訊就好
十分感謝!

2

我只做提示

你不要去想如何去判斷「設定」數值。
你要改個方向。

你要如何去原值 +1或-1。而不是原值判斷給與=1
這樣提示看你能不能理解。
例:

a=a+1
看更多先前的回應...收起先前的回應...

To 浩瀚星空
恕小弟資質駑鈍看不太懂,這個方法在不知道刪減的item是哪一個的狀況下依然適用嗎?

今天突然明白了,插入新Order的時候把該筆資料以後的order都加1...

通了嘛!!!
恭喜你,通洞技能又加了一點了。

以上說笑的。
認真來說,我也點的太模糊了。你沒辦法一下子懂也是屬於正常的。

那我想請教一個衍伸的問題
如果在多人編輯的狀況下
用這個加一的方法勢必每次結束都應該要重新把順序重排,以免被重複加到順序爛掉
如果採取迴圈的方式取出對server的消耗巨大,請問光就重排Order這一段,有能夠在資料庫內完成的方式嗎?
謝謝!

我要發表回答

立即登入回答