REST был таким популярным модным словом за последние пару лет (или около того), и когда ASP.NET MVC выкатился, все связывали REST с ASP.NET MVC. Я также упал на шум и из-за отсутствия моих знаний, мое понимание REST было просто:
REST = SEO/дружественные пользователю URL
Но это намного больше. И чем больше я узнаю о REST, тем меньше я связываю ASP.NET MVC с ним. Это, конечно, гораздо ближе к REST, чем к WebForms. Итак, правда на самом деле совершенно противоположна:
REST ≠ SEO/дружественные пользователю URL
И если ваш маршрут по умолчанию, определенный как controller/action/id
, определенно не RESTful.
Позвольте мне объяснить мою проблему с этим пониманием.
Если ASP.NET MVC был RESTful, у нас не было бы маршрута по умолчанию, определенного как:
controller/action/id
а скорее
resources/id /* that would have to use HTTP methods GET/PUT/POST/DELETE */
Итак, вместо того, чтобы иметь (также предоставляющий HTTP-метод с запросом):
/product/index/1 /* GET */
/product/create /* POST */
/product/delete/1 /* POST */
/product/update/1 /* POST */
он должен быть (HTTP-метод также предоставлен здесь)
/products/1 /* GET */
/products /* POST */
/products/1 /* DELETE */
/products/1 /* PUT */
Теперь это будет RESTful. Хорошо, что это действительно возможно. И если вы сделаете это полностью RESTful, это также означало бы, что вы должны использовать Ajax, потому что методы PUT и DELETE не могут быть выполнены с помощью запросов только для браузера (это не совсем верно 1). Таким образом, современные приложения Ajax могут быть полностью RESTful.
Ajax - это клиентская технология и на самом деле не имеет ничего общего с ASP.NET MVC. Факт в том, что ASP.NET MVC может быть выполнен как полностью RESTful-приложение. Средство его достижения (Ajax) не имеет значения. (спасибо Дарину Димитрову)
Основной вопрос
Почему мы рассматриваем ASP.NET MVC как структуру RESTful, особенно связанную с его маршрутизацией URL-адресов? Почему они не задали маршрут URL по умолчанию для обеспечения RESTfulness? Я не ищу аргументативных ответов, но те, которые на самом деле отвечают на вопрос - как это отношение воплотилось в жизнь... Возможно, я по-прежнему недостаточно мудр и все еще воспринимаю это как недостаток моих знаний об обоих.
1 Обновленная информация
На самом деле вам не нужно использовать Ajax для полной реализации архитектуры RESTful. Asp.net MVC поддерживает (начиная с версии 2) метод HTTP overriding, то есть вы можете выдавать методы PUT или DELETE с использованием форм браузера. Все, что вам нужно сделать, это добавить дополнительное скрытое поле, например:
<input type="hidden" name="X-HTTP-Method-Override" value="DELETE" />
Структура MVC Asp.net сможет понять такой запрос POST как запрос DELETE, а селектор действия HttpDeleteAttribute
также будет понимать его как запрос на удаление. Метод HTTP, переопределяющий FTW!