Правильный и RESTful способ выполнения действий на сервере? - PullRequest
0 голосов
/ 24 мая 2018

Мое приложение предоставляет REST-сервер для управления им.Я использую GET-запросы для получения различной информации о состоянии:

  • / current_status - возвращает объект JSON и 200 OK
  • / Programs - возвращает массив JSON и 200 OK
  • /конфигурация - возвращает объект JSON и 200 OK
  • ...

Но я не уверен, какой запрос (GET, POST и т. д.) я должен передать, если я хочу выполнить что-тона сервере?Что такое RESTful способ делать вещи?Некоторые функции могут не работать, поэтому мне нужно уведомить об этом клиента, что означает, что мне нужно отправить правильный код состояния.

Например:

  • выполнить задачу (номер задачи, дополнительные параметры): bool execute(int task, const std::string& data) или bool execute(int task, std::vector<std::uint8_t>& data)
  • shutdown (timeout): bool shutdown(int timeout)
  • restart: bool restart()

Должен ли GET с параметрами или POST с объектом JSON, описывающим задачу?

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

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

1 Ответ

0 голосов
/ 24 мая 2018

Но я не уверен, какой запрос (GET, POST и т. Д.) Я должен передать, если я хочу выполнить что-то на сервере?Что такое RESTful способ делать вещи?

Следует иметь в виду, что REST / HTTP связан с семантикой;клиент и сервер обмениваются сообщениями, но то, что сервер на самом деле делает на своей стороне, является деталью реализации, при условии, что реализация согласуется с семантикой сообщения.

Может быть, полезно рассмотреть RFC 7231и раздел 4.2 , который описывает общие свойства метода, и раздел 4.3 , который описывает семантику, связанную с каждым из методов HTTP.

Но короткая версияis: не используйте safe методы, когда вы собираетесь сменить сервер.

Вот как Roy Fielding описал ситуацию в 2002

HTTP не пытается требовать, чтобы результаты GET были безопасными.Для этого требуется, чтобы семантика операции была безопасной, и, следовательно, это ошибка реализации, а не интерфейса или пользователя этого интерфейса, если в результате произойдет что-либо, что приведет к потере имущества (денег, кстати,для этого определения считается собственностью).

Использование опроса в вашем протоколе является вполне удовлетворительным способом получения обновлений от клиента.WebSockets может быть жизнеспособной альтернативой для вашей ситуации.

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