Предполагая, что «переворачивание» - это разовая задача, которая не меняет состояние собаки, как бы вы это реализовали?
Короткий ответ:
POST /tasks
{
"task": "roll over",
"id": "/dogs/1"
}
Более длинный ответ: одним из важных ограничений REST является унифицированный интерфейс, который включает тот факт, что семантика самоописательных сообщений одинакова для всех ресурсов повсюду.
GET
- это паршивый способ «начать задачу», потому что семантика GET безопасна , то есть фактически только для чтения, что означает, что любой человек в любом месте может запросить представление этого ресурса в любое время. Подумайте о браузерах, предварительно загружающих ссылку на задачу, чтобы сэкономить время, или о веб-сканере, который добавит ваш ресурс задачи для индексации.
Это оставляет выбор между
POST /dogs/1
POST /tasks
Теперь, потому что POST - небезопасный метод, поэтому следует учитывать одну интересную деталь кеширования. Ответ без ошибок на небезопасный запрос сделает недействительным кэшированное представление целевого ресурса.
Обычно, если вы вносите изменение в ресурс (например: PUT / foo), это именно то, что вы хотите.
Но здесь похоже, что задачи «пролистывания» не должны изменять представление /dogs/1
. Если представление этого ресурса не изменится, то я не хочу аннулировать его, и вместо этого я нацелен на какой-то другой ресурс с запросом.
Есть, конечно, ничего особо магического c по поводу написания /tasks
. Это также может быть /dogs/1/tasks
, /tasks/dogs/1
, /dogs/1/rollOver
или /b79d1e50-44eb-4c51-bfc6-ef0d94c15fdc
.