Существуют ли какие-либо веб-фреймворки MVC, поддерживающие несколько типов запросов?

В каждой среде MVC, которую я пробовал (Rails, Merb, Waves, Spring и Struts), идея запроса (и ответа) связана с понятием HTTP запроса. То есть, даже если есть AbstractRequest, который является суперклассом Request, у AbstractRequest есть такие вещи, как заголовки, метод запроса (GET, POST и т.д.) И все другие вещи, связанные с HTTP.

Я хотел бы поддержать цикл запроса-ответа по SMS, Twitter, электронной почте или любому другому средству, для которого я могу сделать адаптер. Есть ли рамки, которые делают это особенно хорошо?

Единственным другим, о котором я думал, является создание, например, опросчика Twitter, который работает в отдельном потоке и переводит сообщения в локальные HTTP-запросы, а затем отправляет ответы обратно.

Если бы была хорошая структура для нескольких информационных носителей, как бы выглядела маршрутизация? В Rails HTTP-маршрутизация выглядит примерно так:

map.connect 'some/path/with/:parameter_1/:paramter_2', :controller => 'foo', :action => 'bar'

Как будет выглядеть Твиттер или SMS-маршрут? Регулярные выражения для соответствия ключевым словам и параметрам?

Ответ 1

Вы, похоже, работаете в основном с Java и/или Ruby, поэтому простите, что этот ответ основан на Perl: -).

Я очень люблю Catalyst MVC Framework (http://www.catalystframework.org/). Он делегирует фактическое отображение запросов (в общем, общем смысле) для кода через движки. Конечно, все классы двигателей в настоящее время основаны на HTTP, но я попытался написать класс двигателя, который не был основан на HTTP (или, возможно, был привязан к чему-то вроде Twitter, но был отделен от HTTP-взаимодействий что использует Twitter). По крайней мере, я убежден, что это можно сделать, даже если я еще не попытался это сделать.

Ответ 2

Я его не видел. Проблема в том, что запрос также привязан к хосту, и ответ привязан к запросу.

Итак, если вы получите запрос по электронной почте, а контроллер говорит, что для визуализации представления "aboutus", вам понадобится структура MVC, чтобы узнать, как:

  • получить запрос в первую очередь - MVC-инфраструктура почти должна быть хостом (IIS не получает уведомления о новых сообщениях электронной почты, так как ваш код опроса электронной почты запущен?)
  • разрешить гибкое сопоставление маршрутов - сопоставление по пути /url не будет работать для всех, поэтому потребуется маршрутизация контроллера запроса.
  • используйте просмотр электронной почты aboutus, а не просмотр SMS или HTTP с именем "aboutus"
  • отправить ответ по электронной почте, правильному получателю

Структура веб-MVC не собирается сокращать ее - вам понадобится "хост" MVC, который может обрабатывать активацию через сеть, sms, электронную почту и т.д.

Ответ 3

Спецификация Java Servlet была разработана для того, чтобы сервлеты были нейтральными по протоколу и расширялись в соответствии с протоколом - HttpServlet является расширением сервлета, специфичным для протокола. Я всегда думал, что Sun или другие сторонние разработчики рамочных платформ придумают другие расширения для протокола, такие как FtpServlet или MailServlet, или в этом случае SmsServlet и TwitterServlet.

Вместо этого произошло то, что люди либо полностью обошли платформу Servlet, либо создали свои протоколы поверх HTTP.

Конечно, если вы хотите реализовать расширение для конкретного протокола для ваших необходимых протоколов, вам придется разработать весь объект запроса стека, объект ответа, механизм идентификации сеансов (например, используя MSISDN в SMS-сообщении вместо файлов cookie), шаблоны и рамки рендеринга (эквивалент JSP), а затем создайте структуру MVC поверх нее.

Ответ 4

Вы можете реализовать Адаптер на основе REST на своем веб-сайте, который заменяет шаблоны и перенаправляет в соответствии с входными параметрами.

Все запросы, поступающие на api.yourhost.com, будут обрабатываться адаптером REST.

Этот адаптер позволит запрограммировать ваш веб-сайт и получить результат в формате синтаксического анализа.

Практически это означает: он заменяет шаблоны собственным движком шаблонов, на котором это происходит:

  • вместо назначенного шаблона вызывается общий шаблон xml/json, который просто выводит xml, содержащий все шаблоны vars

то вы можете сделать свой Twitter Poller, SMS-шлюз или даже вызвать его из Javascript.