Представьте, что пользователь только что опубликовал данные в вашем веб-приложении, и вы хотите повторно отобразить текущую страницу с сообщением об их успехе или неудаче. Это становится сложным.
Если данные действительны и пользователь ожидает HTML, вы хотите выполнить перенаправление, чтобы обновление не вызывало повторную публикацию. Вы хотите перенаправить к рефереру, если он существует, и отобразить сообщение. Если они не ожидают HTML, вы можете просто вернуть 200 OK.
Если данные недействительны и пользователь ожидает html, вы хотите перерисовать страницу, с которой они пришли, с видимой ошибкой, чтобы они могли повторно опубликовать. Для этого вам нужно будет выполнить предыдущее действие и сообщить ему об ошибке. Чтобы решить, каким было предыдущее действие, возможно, вы включили его в качестве скрытого параметра в форме. Если они не ожидают HTML, вы можете вернуть соответствующую ошибку клиента 4xx.
Я слишком много раз исполняю этот глупый танец. Итак, вопросы:
1) Как бы вы абстрагировали весь этот процесс, чтобы любой пост в форме мог им воспользоваться?
2) Какой самый удобный или наименее повторяемый способ добиться этого в вашей любимой веб-среде?
3) Есть ли что-нибудь, что вы могли бы изменить во всем этом процессе, чтобы сделать его проще?
Идея 1: Никогда не визуализировать сообщение, всегда перенаправлять. Заполните данные об ошибках в сеансе за доли секунды между запросами, а затем очистите их, как сообщение об успешном завершении. Таким образом, действительные и недействительные сообщения могут обрабатываться одинаково.
Идея 2: Не делайте никаких обычных сообщений HTTP. Используйте только Ajax. Теперь вам не нужно беспокоиться о рендеринге или перенаправлении. Это будет полезно, только если у вас уже есть ajax-приложение.