2016-03-18 43 views
1

在處理我的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?這反而會讓我通過功能模型代替,發送郵件,如果以前的狀態改變保存。 然而,這會導致很多之前的行動,我不覺得特別漂亮。

你有什麼建議?

回答

0

兩個你已經建議將在不同的情況下正常工作的方法:

  1. 讓說你有其中的任何變化都是非常關鍵的,應立即通知應用程序,那麼你可以通過你的郵件功能您的模型並在更新值後發送郵件。
  2. 如果你的變化並不重要,如果用戶得到了一些時間,然後你可以

    I)您可以進行更新的呼叫,你建議

    II)後就可以通知它是確定只是郵件功能將您加入隊列,sperate讀者會從隊列中讀取和發送郵件到相應的用戶(這將是優勢,如果你有很多用戶)

0

你可以做什麼(什麼是我相信有效的REST方式):

  • 創建一個名爲RequestApproveController左右的新控制器。
  • 在該控制器創建行動create
  • 您命名approve(在有更新的屬性和發送電子郵件)Request模型
  • 創建相匹配/api/v1/request/:id/approveRequestApproveController
路線創建方法