従来の有限状態マシンでは、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状態イベントのトリガを実装する最も良い方法は何ですか?私たちにはオプションがありませんか?