Является ли REST через междоменный AJAX плохой идеей в настоящее время (2011)?

#jquery #python #ajax #tornado #cors

#jquery #python #ajax #торнадо #cors

Вопрос:

Я пишу службу REST, к которой должны обращаться веб-приложения, настольные клиенты, мобильные клиенты и т.д. через интерфейс REST. Идея состоит в том, чтобы хранить такие объекты, как заметки, события календаря и т. Д. в общей иерархии и для предоставления HTTP-методов для создания, обновления и удаления документов, так что это должно быть идеальной областью для интерфейса REST.

Мой план состоит в том, чтобы иметь где-нибудь сервер REST, а веб-приложения — другие серверы, использующие данные, поэтому мне нужно сделать междоменный запрос, на который наложены особые ограничения по соображениям безопасности (см., Например, Эту статью). Я также хочу сделать некоторые обновления веб-материалов в режиме реального времени.

Сейчас я провожу обширные исследования, изучаю, что такое CORS, и пробую его (с tornado и jQuery.ajax), но к настоящему времени у меня возникает подозрение, что настройка, к которой я стремлюсь, просто скоро завершится. Я пробовал только с Firefox (как 3.6, так и 9), но у меня уже возникли проблемы:

  • HTTP-аутентификация не работает с jQuery.ajax() (даже если установлен параметр withCredentials)
  • некоторые браузеры вообще не поддерживают CORS (говорит Википедия)
  • по крайней мере, один плагин FF (RequestPolicy) заставляет CORS вообще не работать

Я понимаю, что CORS / AJAX является возможным решением, но, похоже, существует слишком много ограничений для практического использования. Что вы, люди, которые раньше занимались подобными вещами, думаете: это то, что я должен просто делать и надеяться, что эти проблемы будут решены кем-нибудь когда-нибудь в будущем? Или просто слишком рано для междоменного подхода REST / AJAX? Какую альтернативу вы бы выбрали для вышеуказанных планов? Поскольку я начинаю новый проект, я хотел бы сделать его чистым, без JSONP, прокси или других обходных путей, но если нет другого пути, я бы сделал это в любом случае.

Спасибо за любые ответы!

Ответ №1:

Ничто не мешает вам предоставлять ответы в стандартном JSON (например, для случаев, когда CORS доступен в браузере), а в JSONP — в тех случаях, когда это не так. Это не повлияет ни на что, кроме вашего вывода.

Я бы не сказал, что CORS жизнеспособен сам по себе, поскольку IE < 8 его не поддерживает. Я бы также сказал, что в JSONP нет ничего плохого; это технология, используемая крупными игроками (API Facebook, API Twitter, API Flickr, различные API Google).

Короче говоря, то, что вы сказали, верно; CORS в настоящее время недостаточно широко распространен, чтобы его можно было использовать.

Комментарии:

1. Хорошо, я думаю, тогда я соглашусь на использование интерфейса JSONP для веб-приложений и использую REST для других приложений. Недавно я узнал, как backbone.js сопоставляет запросы PUT и DELETE с запросами POST : он просто добавляет параметр HTTP _method=PUT при фактической отправке запроса GET. Я собираюсь попробовать это. Спасибо за ваш ответ!