2009-12-11 82 views
0

我有一個處理髮送短信的控制器,它被設置爲默認資源。現在,業務需求發生了變化,我們希望提供發送消息的用戶三種不同的方式:他們的聯繫人名單 如何使這個概念RESTful?

    1. 爲了大家的聯繫人列表中的分段部分(預定)
    2. 他們可以選擇的個人聯繫人

    此外,他們可以通過兩種方式發送SMS消息:Premium(通過短信網關)或Standard(通過SMTP)。所以基本上有六種不同的發送消息的方式(三種爲優質,三種爲標準)。

    的要求規定,三個選項上述需要爲以「精靈般」的格式呈現,三個單選按鈕選擇,然後提交按鈕,顯示適當的形式和列表:

    • 如果選項1(發送給所有人)然後只顯示發送短信的文本框
    • 如果選項2(發送到段)然後顯示段的列表作爲單選按鈕
    • 如果選項3(發送到特定)然後顯示一個可搜索/排序的名單旁邊帶有複選框的所有聯繫人列表,並在提交時選擇所有人檢查發送。

    我遇到的問題是如何使這適合資源強加的RESTful約定。這些用例中的每一個在技術上只有一個動作(好吧,兩個,因爲它對應於new/create),但看起來在動作中需要有過多的邏輯,而且相當混亂(switch語句或類似)。

    對此有更好的方法嗎?

  • +0

    您能描述發送消息的控制器資源上的接口嗎?它接受哪些數據?不知道這一點,我們所能做的就是給你理論。 :) – delfuego 2009-12-11 15:04:25

    +0

    爲了保費,它需要聯繫人的手機號碼和消息,並將其發送到PHP Web服務,後者又調用外部Web服務(有直接從Ruby調用外部服務的SOAP頭問題)。對於SMTP,它需要手機號碼,調用PHP Web服務(它再次調用外部服務)來獲取運營商,然後使用SMSFu插件。現在的代碼是由一名離岸程序員完成的,而且非常混亂,幾個大型的if語句基本上做了同樣的事情。 – 2009-12-11 15:07:18

    回答

    1

    我會首先考慮「最簡單的工作」方法。不同的參數處理和設置幾種傳遞方法看起來像是不能輕鬆包裝成一對「新」和「創建」動作的東西。

    我不知道所有的細節,我的第一個建議就是實施像"choose_contacts", "send_to_contacts" and "choose_segments", "send_to_segments"這樣的操作,它們爲這些用例準備數據並呈現它們自己的模板,或者處理傳入數據並處理可能的錯誤。然後,「新」操作將根據選定的選項將處理分派給適當的操作,而不再需要「創建」操作(或者可以重複使用它來發送單個消息)。我敢打賭,發送單個消息(或一組消息)的代碼無論如何都是在模型中,因此,只要以合理的方式處理表單數據,就必須使用正確的參數調用它。

    優點這種方法的:

    1. 它的人誰以後會保持你的代碼,因爲它清楚地區別可用的選項更自然地讀取;

    2. 您將更靈活地處理輸入參數並處理來自不同形式的錯誤,因爲您將知道將哪個錯誤狀態呈現爲響應,而無需從窗體中攜帶額外的數據。細分和聯繫人可能需要不同的處理,不是嗎?

    3. 如果您使用某種性能管理應用程序(如NewRelic),您會看到某些傳遞處理操作中是否有任何性能問題比一般SMSDelivery#create操作快得多;

    我有類似的情況,「通過上傳/搜索聯繫人邀請/尋找朋友」過程,並且給定的方法非常適合我。總的來說,REST是一個很好的約定,但是試圖將許多業務邏輯擠入CRUD有時並不完美並且容易出錯。 YMMV,我只是建議保持邏輯清晰,易於閱讀,修改現有的約定,如果你感覺不夠靈活。