Нарушение RESTfulness в отношении базы данных - PullRequest
1 голос
/ 09 апреля 2019

С моей точки зрения, сессия нарушает RESTfulness либо когда она хранится в памяти, либо в дБ.

В случае, когда сеанс хранится в памяти, трудно масштабировать сервер, используя подобное распределение нагрузки, поскольку серверы не разделяют данные сеанса.

Аналогичным образом, если сеанс хранится в базе данных, база данных будет перегружена, когда множество серверов одновременно делают запросы.

Моя проблема связана со вторым случаем.

Долгое время я думал, что сервер и база данных разные.


Мое прошлое предположение)

Когда клиент делает запрос к серверу с конкретными данными, сервер сохраняет эти данные в базе данных, такие как mysql или mongo и т. Д.

Таким образом, серверу не нужно заботиться о состоянии клиента, поскольку база данных полностью контролирует его.

Сервер может работать автономно против запроса клиента, поскольку сервер может отправлять запросы в базу данных всякий раз, когда хочет узнать, кто является клиентом.


Итак, два моих вопроса:

  1. Всякий раз, когда упоминается, что "сервер RESTful автономен против запроса клиента", включает ли этот сервер базу данных?
  2. Если да, и если есть модель User и модель Post, связанные с отношением один-ко-многим, разве это не нарушает RESTfulness?

Я уверен, что второй вопрос не имеет смысла, поскольку, если ответ на второй вопрос верен, то RESTapi никогда не был бы таким полезным.

Но я не могу понять разницу между сеансом в базе данных, нарушающим RESTfulness и User-Post, не нарушающим Restfulness.

Я думаю, что они оба выполняют одну и ту же процедуру, клиент-сервер-база данных.

Как я могу легко понять эту проблему?

Ответы [ 2 ]

2 голосов
/ 09 апреля 2019

Что обычно подразумевается под безгражданством, так это то, что: вся информация для выполнения HTTP-запроса содержится внутри запроса.

Некоторые последствия таковы:

  • Я могу отключить TCP-сокет и снова открыть его, или я могу оставить TCP-соединение открытым, и это не имеет значения. Вся информация для выполнения запроса содержится в запросе.
  • В случае идемпотентных методов я могу повторить тот же запрос и получить то же состояние, как если бы я делал это только один раз.

Другими словами,

Существуют более полные описания безгражданства и HTTP, но важно то, что безгражданство здесь НЕ означает, что сервер вообще не может иметь никакого состояния. Большинство служб REST, вероятно, бесполезны, если нет состояния.

Теперь к вопросу о том, нарушает ли сеанс принципалы REST. Я думаю, что трудно объективно заявить об этом в любом случае. Важными частями вашего вопроса является то, что для RESTful вам необходима концепция ресурсов, концепция их решения и концепция передачи состояния между клиентом и сервером. (Есть еще вещи, которые составляют службу REST, но вот несколько важных моментов).

Я не думаю, что наличие средства аутентификации предотвращает это, независимо от того, выполняется ли аутентификация через заголовок Authorization или заголовок Cookie, это не так уж и важно.

Если cookie-файлы сеанса и связанные с ним данные сеанса начинают мешать этому процессу другими способами, возможно, что связанная с сеансом функция может нарушать принципы REST, но я не думаю, что это в целом верно.

Если есть «много статей» о том, что сессии нарушают REST, я не думаю, что для этого есть реальная основа. Есть много мусорных описаний REST, идущих вокруг. Я делаю думаю, что по другим причинам может быть плохо использовать куки для аутентификации. Это создает потенциал для проблем безопасности.

0 голосов
/ 09 апреля 2019

Restful сервер отделен от базы данных. Restful сервер, если есть такая вещь, это просто веб-сервер. REST - это просто архитектура, скажем, методология, которая доставляет информацию с сервера на клиент и наоборот по HTTP.

...