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, что означает, что вы можете использовать методы PUT или DELETE, используя формы браузера. Все, что вам нужно сделать, это добавить дополнительное скрытое поле, например:
<input type="hidden" name="X-HTTP-Method-Override" value="DELETE" />
Фреймворк Asp.net MVC сможет понимать такой запрос POST как запрос DELETE, а селектор метода действия HttpDeleteAttribute
также будет понимать его как запрос на удаление. HTTP-метод, переопределяющий FTW!