2017-01-03 8 views
2

従来の有限状態マシンでは、Railsアプリケーションでacts_as_state_machine (AASM)を使用して1つの状態から次の状態へのモデルのフローを制御しています。アプリケーションのAPIを構築しており、その一部として、APIユーザーがコントローラメソッドupdateに渡した状態に基づいてRailsモデルを更新するときに、状態遷移をトリガできるようにしたいと考えています。Rails APIコントローラでAASMを使用する際のベストプラクティス

ステートマシンの簡易版は、次のようになります

aasm :column => :state do 
    state :proposed, :initial => true 
    state :published 
    state :retired 

    event :publish do 
     transitions :from => :proposed, :to => :published 
    end 

    event :retire do 
     transitions :from => :published, :to => :retired 
    end 
end 

1つのオプションは、我々は/model/{ID}/publish/model/{ID}/retireスタイルのエンドポイントを提供し、リモートプロシージャコール(RPC)スタイルを、使用することです。これはかなり単純ですが、非常にRESTfulではありません。

もう1つのオプションは、モデルの受信stateプロパティに基づいてパラメータを検査し、移行することです。これは、APIがコンシューマにとってよりシンプルに保たれる点で「より良い」アプローチのように感じますが、ロジックに関してはコントローラに多くの複雑さが加わります。

Rails APIのAASM状態イベントのトリガを実装する最も良い方法は何ですか?私たちにはオプションがありませんか?

答えて

1

個人的には、ストレートクラスのREST呼び出しと状態遷移の2種類がありがちですが、最も一般的なものは有効ですか?私は最も直感的なものを使用し、状態遷移には異なるロジックセットを持たせることができるため、un-RESTfulなespであることを心配する必要はありません。言い換えればRPCスタイル

関連する問題