Передача сообщений между запросами с помощью REST API (JSON, XML, HTML ...) - PullRequest
0 голосов
/ 22 октября 2018

Давайте представим REST API, который может возвращать JSON, XML, HTML и другие форматы.В случае веб-клиента браузера без включенного JavaScript, API возвращает HTML.Токены используются для аутентификации и авторизации.

В классическом веб-проекте может случиться так, что перенаправление должно быть выполнено со страницы A на другую страницу BЭто может быть использовано, например, для отображения приветственного сообщения или сообщения об ошибке на другой странице.В этом случае для отображения сообщения (например, прошивки) со страницы A на странице B мы обычно используем сеанс.Два простых (и минимизирующих) примера в выражении (но концепция аналогична другим технологиям):

// With session directly
const session = require('express-session');

app.use(session({ /* ... */ });

function (req, res, next) {
  req.session.message = 'Welcome, you are connected';
  return res.redirect('/');
}

<p class="message">${ session.message }</p>

// With a library as connect-flash
const flash = require('connect-flash');

app.use(flash());

function (req, res, next) {
  req.flash('error', {
    message: 'An error!',
  });
  return res.redirect('/login');
}

<p class="message">${ flash.message }</p>

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

У меня такой вопрос: Как веб-сервер без состояния должен обычно передавать сообщения между двумя запросами? (в случае перенаправления)

  • Сессия: Не сохраняется кактребуется
  • DB?
  • Строка запроса?
  • Cookie?
  • Другое?

Примечание: я знаю, как реализовать этирешения, но я прошу правильный способ сделать это в случае веб-сервера без состояния.Как обычно REST API реализует это?

После этого вопроса у меня есть два (необязательных) недоразумения.

На основе ответ о переполнении стека :

Это не мешает другим службам, с которыми общается веб-сервер, поддерживать состояние о бизнес-объектах, таких как корзины покупок, только не о текущем состоянии приложения / сеанса клиента.

Что здесь означают другие службы ?

На основании этого комментария от того же самогоответ :

Аутентификация может быть неявной в этом состоянии. Считаете ли вы, что Facebook делает «доступ к базе данных» при каждом запросе своего REST API?Или Google в этом отношении?подсказка: нет

Что означает неявное в состоянии ?Если они используют токен или подобный процесс аутентификации, то они должны каждый раз получать доступ к базе данных, чтобы получить нового пользователя, нет?

Заранее спасибо.

1 Ответ

0 голосов
/ 22 октября 2018

Other Service может быть Redis или любой базой данных NoSQL, которая может хранить пользовательское состояние между вызовами API.См. backed service определение из 12 Factor App .

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