REST очень абстрактный.Это помогает иметь несколько хороших, простых, реальных примеров.
Возьмем, к примеру, все основные приложения для социальных сетей - Tumblr, Instagram, Facebook и Twitter.Все они имеют вид с непрерывной прокруткой, где чем дальше вы прокручиваете вниз, тем больше контента вы видите, все дальше и дальше назад во времени.Тем не менее, мы все пережили тот момент, когда вы теряете то, куда вас прокручивали, и приложение сбрасывает вас обратно наверх.Например, если вы выходите из приложения, то при повторном его открытии вы снова возвращаетесь наверх.
Причина в том, что сервер не сохранил ваше состояние сеанса.К сожалению, ваша позиция прокрутки была просто сохранена в RAM на клиенте.
К счастью, вам не нужно повторно входить в систему при повторном подключении, но это только потому, что ваш сохраненный сертификат входа в систему на стороне клиента также не истек.Удалите и переустановите приложение, и вам придется снова войти в систему, поскольку сервер не связал ваш IP-адрес с вашим сеансом.
У вас нет сеанса входа в систему на сервере, потому что они соблюдают REST.
Теперь приведенные выше примеры вообще не связаны с веб-браузером, но набэкэнд, приложения связываются через HTTPS со своими хост-серверами.Я хочу сказать, что REST не должен включать файлы cookie, браузеры и т. Д. Существуют различные способы хранения состояния сеанса на стороне клиента.
Но давайте поговорим о веб-браузерах на секунду, потому что это поднимает еще одно важное преимущество REST, о котором никто здесь не говорит.
Если сервер попытался сохранить состояние сеанса, как он?должен идентифицировать каждого отдельного клиента?
Он не может использовать свой IP-адрес, потому что многие люди могут использовать этот же адрес на общем маршрутизаторе.Так как же тогда?
Он не может использовать MAC-адрес по многим причинам, не в последнюю очередь из-за того, что вы можете войти в несколько учетных записей Facebook одновременно в разных браузерах и в приложении.Один браузер может легко притвориться другим, а MAC-адреса так же легко подделать.
Если серверу нужно хранить какое-то состояние на стороне клиента, чтобы идентифицировать вас, он должен хранить его в ОЗУ дольшепросто время, необходимое для обработки ваших запросов, или же оно должно кэшировать эти данные.Серверы имеют ограниченный объем оперативной памяти и кеша, не говоря уже о скорости процессора.Состояние на стороне сервера добавляет ко всем трем экспоненциально.Кроме того, если сервер собирается хранить какое-либо состояние о ваших сеансах, он должен хранить его отдельно для каждого браузера и приложения, в котором вы в настоящий момент вошли, а также для каждого используемого вами другого устройства.
Итак ... Я надеюсь, что вы теперь понимаете, почему REST так важен для масштабируемости.Я надеюсь, что вы начнете понимать, почему состояние сеанса на стороне сервера связано с масштабируемостью сервера, а наковальни - с ускорением автомобиля.
Когда люди запутываются, думая, что «состояние» относится к информации, хранящейся в базе данных.Нет, это относится к любой информации, которая должна быть в оперативной памяти сервера, когда вы ее используете.