Я новичок в Rails и REST и пытаюсь понять, как лучше всего раскрыть ресурс, поддерживаемый объектом домена, имеющим конечный автомат (другими словами, это конечный автомат).
Я видел несколько жемчужин для превращения класса модели в конечный автомат, таких как aasm, переходы, рабочий процесс, но ни один из них не документирует примеры того, как они фактически используются в контроллере, ориентированном на ресурсы. Все они, кажется, подразумевают, что переходы между состояниями запускаются «событием», которое на самом деле является вызовом метода. Вот некоторые вопросы, которые у меня возникают по поводу того, что это подразумевает:
- Действие обновления (метод PUT) не подходит, потому что PUT предполагается идемпотентным. Единственное, это было бы возможно, если бы состояние было отправлено как часть представления. Это несовместимо с «событием». Это правильно?
- Поскольку события не идемпотентны, необходимо использовать POST. Но на какой ресурс? Есть ли подресурс для каждого возможного события? Или есть один (/ updatestate), который принимает в качестве своего представления событие, которое запускается, и какие-либо параметры для этого события?
- Поскольку состояние ресурса изменяется событием, потенциально инициированным другим ресурсом, должно ли действие create принимать изменения атрибута состояния (или любых других атрибутов, которые зависят от конечного автомата)?
- [Обновленный вопрос] Как лучше всего отображать переходы в пользовательском интерфейсе? Поскольку события не являются состояниями, казалось бы, не имеет смысла разрешать обновление атрибута состояния (и любого другого атрибута, который зависит от переходов состояний). Означает ли это, что эти атрибуты следует игнорировать при обновлении?