Рельсы AJAX +: я должен использовать GET или PUT при создании маршрута? - PullRequest
0 голосов
/ 29 сентября 2019

Мой вопрос: при использовании AJAX в Rails, с точки зрения передового опыта, имеет ли значение глагол HTML, который я использую (например, get), чтобы определить маршрут?Можно ли в принципе всегда использовать get?

Контекст: в моем приложении Rails я построил следующее:

  • Когда пользователь выбирает флажок HTML, это вызываетслушатель JQuery, который находится в файле внутри /app/assets/javascripts.
  • . Этот .js файл вызывает AJAX-вызов контроллера / действия: foos#bar.Мой JS передает идентификатор в действие.
  • Чтобы направить этот запрос, я добавил следующее к routes.rb: get "/foos/bar" => "foos#bar".Это сообщает моему приложению, какой контроллер / действие должно обрабатывать вызов AJAX.
  • Контроллер / действие прекрасно обрабатывает этот запрос.Действие захватывает идентификатор в качестве параметра URL, обновляет соответствующий объект модели и, наконец, возвращает 200 вызывающей стороне JS AJAX.

Все это прекрасно работает!Никаких проблем - здесь ничего не нужно устранять.

Мой вопрос таков: в приведенном выше примере уместно ли определить get маршрут в routes.rb для обработки этого AJAX-запроса?Или это плохая практика?Должен ли я вместо этого определять put, поскольку концептуально это то, что я делаю в этом рабочем процессе (то есть я обновляю существующий объект)?Я обеспокоен тем, что, хотя все это работает отлично, я нарушаю некоторые фундаментальные стандарты маршрутизации MVC.

1 Ответ

2 голосов
/ 29 сентября 2019

Если вы обновляете ресурс, это, скорее всего, будет обновление PATCH, что означает, что вы не полностью заменяете ресурс, а просто обновляете его (вот почему PATCH является методом HTTP по умолчанию для обновлений вРельсы вместо PUT).

Итак, да, вы нарушаете соглашения RESTful, используя GET для обновления ресурса.GET используется только для получения представления ресурса ... без какого-либо изменения.

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