Я немного опоздал на вечеринку, но я пытаюсь обдумать, как REST должен работать, как в целом, так и в Ruby on Rails. Я уже читал кучу статей в Интернете об этом, но все еще не чувствую, что получаю полную картину.
REST, насколько я понимаю, представляет собой серию желательных утверждений, с чистым результатом в нижней части является то, что URL-адреса должны содержать всю информацию, необходимую для обработки запроса, а get не должен иметь возможность изменять состояние на сервере и множество других конкретных рекомендаций.
Насколько я понимаю, REST в Rails основан на CRUD, то есть каждая модель имеет действие создания, чтения, обновления и удаления. Каждое из этих действий доступно через аналогичный набор URL-адресов, созданных путем сопоставления ресурса в маршрутах. Таким образом, URL-адрес входа создает сеанс пользователя, поэтому URL будет выглядеть как example.com/session/new с POST, а выход из системы будет example.com/session/destroy с POST.
В чем именно заключается преимущество стандартизации URL-адресов таким способом? Мне кажется, что это оптимизирует машинную читаемость за счет читаемости человеком. Я знаю, что затем вы можете переназначить в файле маршрутов example.com/login на example.com/session/new, но это еще один шаг без видимой выгоды для меня.
Считается ли действительно плохой практикой создание веб-сайта, использующего традиционные маршруты?
Кроме того, каждое из этих действий CRUD должно иметь возможность отвечать на запросы любым типом ответа, который ищет запрос. Так, например, ту же ссылку на, например, example.com/tasks можно также вызвать по адресу example.com/tasks.xml для получения xml-представления результата или example.com/tasks.json для json-представления.
Это значит, что RESTful API будет просто обычными ссылками на сайте, но с добавлением xml? Мне кажется очень странным и неловким, что веб-API будет вести себя таким образом, но, похоже, это то, что подразумевается под всем, что я читал. Я более привык видеть API, на котором есть ссылки, например example.com/api/tasks, чтобы получить список задач. В чем именно преимущество этого подхода?