2017-01-03 4 views
2

우리는 Rails 앱에서 acts_as_state_machine (AASM)을 사용하여 전통적인 유한 상태 기계에서 한 상태에서 다음 상태로 모델의 흐름을 제어합니다. 우리는 우리 애플리케이션을위한 API를 구축하고 있으며, 그 중 일부로 API 사용자가 컨트롤러 메소드 update에 전달 된 상태를 기반으로 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 

하나의 옵션은 우리가 /model/{ID}/publish/model/{ID}/retire 스타일의 엔드 포인트를 제공하는 원격 프로 시저 호출 (RPC) 스타일을 사용하는 것입니다. 이것은 상당히 솔직하지만 매우 RESTful하지는 않습니다.

우리가 고려한 또 다른 옵션은 모델의 수신 state 속성을 기반으로 매개 변수를 검사하고 전환하는 것입니다. 이것은 우리의 API가 소비자를 위해 더 간단하게 유지된다는 점에서 "더 나은"접근 방식처럼 느껴지지만 로직면에서 컨트롤러에 많은 복잡성을 추가합니다.

Rails API에 대한 AASM 상태 이벤트 트리거링을 구현하는 가장 좋은 방법은 무엇입니까? 우리가 옵션을 놓치고 있습니까?

답변

1

개인적으로 필자는 직선 클래스 -REST 호출과 상태 전환이라는 두 가지 종류의 호출을 사용하는 경향이 있습니다. 가장 일반적인 호출이 활성화 되었습니까? 나는 가장 직관적 인 것을 사용할 것이고, 상태 전환이 다른 논리 집합을 가질 수 있기 때문에 un-RESTful esp 인 것에 대해 걱정하지 않아도됩니다. 다시 말해 RPC 스타일