Я занимаюсь разработкой REST API для проекта, над которым мы работаем. То есть, я пишу спецификации, которые будут реализованы позже.
У меня возникают проблемы, чтобы думать о существительных/ресурсах вместо действий/глаголов. Не вдаваясь в слишком много особенностей проекта, мы пишем API вокруг SVN. Например, выполните действие, которое совершает изменения на сервере SVN. В нашем проекте мы имеем несколько определений/версий действия фиксации:
- просто передать все измененные файлы
- зафиксировать список измененных файлов (подмножество, а не весь набор измененных файлов)
- ...
(1) Как бы вы создали URL-адрес? Первый вопрос: как описать действие commit как существительное/ресурс вместо глагола?
Кто-то сказал бы:
POST/PUT http://server.com/api/revision/commit
Должен ли он быть POST или PUT? Я действительно не создаю ресурс фиксации, так что это не POST. Тем не менее, я действительно не изменяю ресурс фиксации, так что это не PUT. Собственно, это не ресурс, это действие. После того, как действие выполнено, оно исчезло, нет ресурса, который будет создан, изменен или сохранен для последующей ссылки.
Тем не менее, это должен быть ресурс, поэтому URL должен, вероятно, быть таким
POST http://server.com/api/revision/commitment
Это также POST, поскольку мы создаем обязательство. Мы ничего не меняем, поэтому нет PUT. Также обратите внимание, что я изменил приверженность обязательствам, чтобы отразить тот факт, что мы имеем дело с ресурсами.
Это имеет смысл? Для меня это не так, это сводит меня с ума. Я хочу выполнить действие, а не создать ресурс, похожий на действие. Но в любом случае.Тем не менее, идя дальше, я просто создал ресурс обязательств. Поэтому логично, я смогу получить его позже:
GET http://server.com/api/revision/commitment/:id
Но ресурсов для обязательств нет! Я был вынужден сделать один, чтобы быть RESTful. голова взрывается
Итак, как вы действительно указываете действия по ресурсам в REST API? Я не говорю о типах действий, которые создают ресурс (создайте пользователя,...), но о типах действий, которые манипулируют ресурсом или действуют на ресурсе (фиксировать ревизию,...).
(2) Затем, во-вторых, в случае второго определения (см. выше), как мы определяем подмножество измененных файлов? Через параметры или в некоторой структуре (например, массив JSON) в BODY? Какой из них предпочтительнее? Существуют ли общие правила?
Спасибо всем!