Это не ограничивается REST;это больше основной вопрос о конечных автоматах.Конечный автомат должен инкапсулировать все состояния, так что если вы обнаружите, что создаете несколько переходов из одного состояния в другое, и разница значительна, то эта разница также должна быть зафиксирована в состоянии.
Например,Скажи, у меня нет дома.Я могу перейти из «бездомного» в «домашнее» состояние тремя способами: я могу арендовать один, я могу купить один, я могу украсть один.Три перехода из «бездомного» в «дом»?Не в мире машин.Либо различия значительны, либо нет.Если это не так, то для машины нет никакого смысла делать различие вообще.Просто поставь новый статус "дома".Если это так, то нам нужно расширить нашу концепцию государства, чтобы охватить различия.Например:
homeless
A A A
/ | \
V | V
possessor <--|--- renter
A | /
\ | /
V V V
owner
Я могу перейти от бездомного к владельцу, украдя дом.Если я приседаю на ней достаточно долго, я могу стать ее владельцем.Или я могу быть бездомным и снимать дом, или даже сдавать в аренду.Или я мог бы купить сразу.Все три пути приводят меня в состояние «владелец», но они используют промежуточные состояния для представления существенно разных переходов.
Если затем вы хотите представить «бездомный» против «в доме» (owner | renter| владелец), нет проблем с представлением этого ресурса как доступного только для чтения.Просто не позволяйте никому PUT / POST, так как переход неоднозначен.Также нет проблем с сохранением истории переходов состояний в качестве дополнительного набора ресурсов, если это состояние является значимым.