Подумайте, как бы вы реализовали это требование на веб-сайте.
Вы бы посмотрели какую-то веб-страницу, относящуюся к текущему пользователю.Там будет ссылка с надписью начало.Вы получите эту ссылку и вызовете форму, которая даст вам возможность переопределить параметры по умолчанию, связанные с запуском таймера.
Когда вы отправляете форму, браузер создает запрос на основе правил обработки формы HTML.Поскольку это небезопасная операция, метод, вероятно, будет публикацией, а данные формы будут application / x-www-form-urlencoded в теле сообщения.
После изменения состояния таймеравероятно, изменит представление исходной страницы, вероятно, там, где форма скажет вам отправить POST.Успешный ответ на запрос POST скажет браузеру сделать недействительным его кэшированное представление исходной страницы.
Когда вы перезагрузите эту страницу, ссылка «старт» исчезнет, и вместо этого будет «остановка»" ссылка на сайт.Работа с этой ссылкой будет практически такой же -> нажатие на ссылку приведет вас к форме, отправит форму обратно на исходную страницу и лишит законной силы предыдущее представление.Когда вы перезагружаете страницу, таймер выключается, и стартовая ссылка снова становится доступной.
GET /DarthVaderYellowMerrigold
GET /DarthVaderYellowMerrigold/start
POST /DarthVaderYellowMerrigold
GET /DarthVaderYellowMerrigold
GET /DarthVaderYellowMerrigold/stop
POST /DarthVaderYellowMerrigold
GET /DarthVaderYellowMerrigold
Есть несколько вещей, которые вы можете сделать, чтобы убрать это (возвращение нового представления в ответ на успешный POST,например, с соответствующими заголовками Content-Location, чтобы клиенту не нужно было извлекать данные), но основная идея - это звук.
Сделайте это машиночитаемым способом, и вы самиAPI REST.
Выполнение этого в основном означает документирование того, как машина должна понимать, для чего предназначена каждая ссылка.«Чтобы перейти к форме таймера запуска, найдите эту ссылку; чтобы перейти к форме таймера остановки, найдите эту ссылку».
Возможно, вы оставите HTTP и URI в покое, но разумно заменить HTMLнапример, с одним из типов гипермедиа JSON.Или поместить ссылки в заголовки HTML, а не в представление.
Конечно, у HTML есть непосредственное преимущество: вы можете просто пройтись по API "вручную" и убедиться, что все работает, используя ваш любимыйнастольный браузер.Компромиссов предостаточно.