Что такого RESTful в ASP. NET MVC?

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 framework сможет понимать такой запрос POST как запрос DELETE, а селектор метода действия HttpDeleteAttribute также распознает его как удалить запрос. Метод HTTP, переопределяющий FTW!

50
задан Robert Koritnik 23 October 2011 в 21:04
поделиться