在處理我的REST api時,我想知道什麼是最佳實踐,當您需要處理某些動作時,讓我以一個示例來解釋。在休息api中處理動作的首選方法
說我有以下模型。
create_table "requests", force: :cascade do |t|
t.datetime "start_date"
t.float "price"
t.string "status", default: 'open'
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
然後,我會爲該模型提供通常的CRUD路徑/操作(顯示,創建,更新,銷燬)。
好吧,說我想改變一個給定的請求記錄的狀態爲'接受',我會將我更新的屬性發送到更新路徑和wola。
但是,如果我想對特定的狀態更新作出反應,我想在請求更新時向相關用戶發送郵件。
我可以爲該行爲創建一個完整的新動作。
/api/v1/request/:id/approve
然後我可以發送我的郵件,並在我的動作中更新請求的狀態。
但是我不禁覺得我應該使用更新功能,因爲我真正在做的只是更新請求狀態,郵件更多的是「副作用」。
然後我看了一下How to detect attribute changes from model?這反而會讓我通過功能模型代替,發送郵件,如果以前的狀態改變保存。 然而,這會導致很多之前的行動,我不覺得特別漂亮。
你有什麼建議?