Задать вопрос
@a_halala

Как обеспечить непротиворечивость данных в клиент серверном приложении?

Добрый вечер. Хотелось бы получить ответ на один вопрос. Допустим есть какое-то веб приложение, где клиент общается с сервером посредством REST (Например связка Spring mvc и angularjs). Допустим с клиентской части были отосланы на сервер какие-то данные для обработки и сохранения в БД например. И вот тут вопрос. Что должен возвращать сервер в качестве ответа при успешной обработке? Должен ли он вернуть обработанные данные, или просто статус SUCCESS 200? Если он возвращает обработанные данные, то целостность и непротиворечивость гарантируется, но если количество данных влияет на скорость выполнения запроса, то тут спорно. Если же он возвращает SUCCESS, то все ту же обработку можно сделать и на клиенте, но непротиворечивость уже не гарантируется. Так кто же мне подскажет, какие best practices применяются в таких случаях? Надеюсь, что вопрос мой ясен. Спасибо!
  • Вопрос задан
  • 360 просмотров
Подписаться 1 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 3
gbg
@gbg Куратор тега Программирование
Любые ответы на любые вопросы
Непротиворечивость данных обеспечивается исполнением модели гарантий ACID. Если каждая REST - операция выполняется в рамках отдельной транзакции, удовлетворяющей ACID, данные остаются непротиворечивыми между любыми транзакциями. Таким образом, достаточно из каждого вызова REST возвращать уведомление о том, что транзакция фиксирована.
Ответ написан
@maxtm
Make money, not job
Имхо, для достижения 100% успеха во всех 100% операциях - тяжело будет найти какое-то единственное правильное решение. То есть, каждую Вашу операцию нужно будет согласовывать с сервером, на предмет непротиворечивости данных, в контексте требований к скорости работы приложения.

Другими словами, там где требуется скорость - вы на клиенте "доводите" данные до нужного состояние "непротиворечивости" с данными от сервера, но не выкачиваете их (и не генерируете), в других местах, где скорость не так важна - смело берете данные с сервера.
Ответ написан
Комментировать
ruFelix
@ruFelix
Предсказание будущего по руке, таро, кофе.
В общем случае:
Если клиенту нужно отправить данные для обработки и показать уже обработанные данные то очевидно их стоит вернуть.
Если клиенту не нужны данные, а нужно только совершить какое то действие, то он отправляет данные необходимые для этого действия и в ответ получает только статус.

Случай на которым вы акцентируете внимание, когда большой объём сырых данных обрабатывается и сохраняется на сервере, а потом в обработанном виде отображает на клиенте. Тут нужно смотреть по ситуации, клиент может быть слабый по производительности и скорости интернета, а может и нет, соответственно на сервер можно ждать обработанные данные с сервера, а можно на него отправлять уже обработанные.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы