2008-09-22 28 views
11

Dans chaque framework MVC que j'ai essayé (Rails, Merb, Waves, Spring et Struts), l'idée d'une requête (et d'une réponse) est liée à la notion HTTP d'une requête. C'est-à-dire, même s'il y a une demande abstraite qui est une superclasse de demande, la demande abstraite a des choses comme les en-têtes, la méthode de requête (GET, POST, etc.) et toutes les autres choses liées à HTTP. Je souhaite prendre en charge un cycle de demande-réponse sur SMS, Twitter, e-mail ou tout autre support pour lequel je peux créer un adaptateur. Y a-t-il un cadre qui le fait particulièrement bien? La seule autre option à laquelle j'ai pensé est la création, par exemple, d'un pollen Twitter qui s'exécute dans un thread distinct et qui traduit les messages en requêtes HTTP locales, puis renvoie les réponses.Existe-t-il des frameworks Web MVC prenant en charge plusieurs types de requêtes?

Si était une bonne infrastructure pour plusieurs médias de requête, à quoi ressemblerait le routage? Dans Rails, le routage HTTP ressemble à quelque chose comme:

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

À quoi ressemblerait une route Twitter ou SMS? Des expressions régulières pour faire correspondre des mots-clés et des paramètres?

Répondre

0

Vous semblez travailler principalement avec Java et/ou Ruby, alors pardonnez-moi que cette réponse soit basée sur Perl :-). Je suis très friand de Catalyst MVC Framework (http://www.catalystframework.org/). Il délègue le mappage actuel des requêtes (au sens générique, générique) au code via les moteurs. Certes, toutes les classes de moteurs sont actuellement basées sur HTTP, mais j'ai eu l'idée d'essayer d'écrire une classe de moteur qui ne soit pas basée sur HTTP (ou peut-être liée à Twitter, mais séparée des interactions HTTP que Twitter utilise). À tout le moins, je suis convaincu que cela peut être fait, même si je n'ai pas encore essayé.

+0

Il me semble qu'une instance de Catalyst ne peut être liée qu'à un seul moteur. C'est-à-dire que vous pouvez avoir un Catalyst CGI ou un Catalyst FCGI ou un Catalyst Apache, mais vous ne pouvez pas avoir plusieurs façons d'alimenter la même instance. Pas nécessairement un problème - pourrait juste revenir avec la même DB. –

1

Je n'en ai pas vu. Le problème est que la demande est également liée à l'hôte et que la réponse est liée à la demande.

Donc, si vous obtenez une demande par courrier électronique, et un contrôleur dit de rendre vue « aboutus », vous aurez besoin du framework MVC de savoir comment:

  • obtenir la demande en premier lieu - le framework MVC aurait presque besoin d'être un hôte (IIS ne sera pas notifié sur les nouveaux emails, alors comment votre code d'interrogation email sera-t-il viré?)
  • permet une correspondance de routage flexible - la correspondance par chemin/URL ne fonctionnerait pas pour tous, donc le routage de contrôleur spécifique à la demande serait nécessaire
  • utiliser le aboutus email voir plutôt que la vue SMS ou HTTP nommé « aboutus »
  • envoyer la réponse via e-mail, au bon destinataire

Un framework MVC Web ne va pas couper - vous aurez besoin d'un MVC " hôte "qui peut gérer l'activation via le Web, SMS, e-mail, peu importe.

+0

Cela ne me dérangerait pas d'écrire de petits threads d'interrogation qui ont ajouté des requêtes à la file d'attente de traitement du MVC, mais la plupart des frameworks n'exposent pas vraiment cette file d'attente (même multi-thread). Toute solution nécessiterait des addons, car de nouveaux types sont ajoutés tout le temps. –

0

Vous pouvez implémenter un adaptateur REST-based sur votre site web, qui remplace les modèles et les redirections en fonction des paramètres d'entrée.

Toutes les demandes entrantes api .yourhost.com seront traitées par l'adaptateur REST.

Cet adaptateur permettrait d'appeler votre site Web par programme et d'avoir le résultat dans un format analysable.

En pratique, cela signifie: Il remplace les modèles avec un propre moteur de modèle, sur lequel ces choses se produisent:

  • au lieu du modèle attribué, un modèle XML/JSON générique est appelée, qui sort juste un xml qui contient tous les modèles de vars

alors vous pouvez créer votre Twitter Poller, SMS Gateway ou même l'appeler à partir de Javascript.

1

La spécification Java Servlet a été conçue pour que les servlets soient neutres au protocole et étendues de façon spécifique au protocole - HttpServlet étant une extension de servlet spécifique au protocole. J'ai toujours imaginé que Sun, ou d'autres fournisseurs de framework tiers, trouveraient d'autres extensions spécifiques au protocole comme FtpServlet ou MailServlet, ou dans ce cas SmsServlet et TwitterServlet. Au lieu de cela, les gens ont complètement contourné le framework Servlet ou ont construit leurs protocoles au-dessus du protocole HTTP. Bien sûr, si vous voulez implémenter une extension spécifique au protocole pour vos protocoles requis, vous devrez développer toute la pile - objet requête, objet réponse, un mécanisme d'identification des sessions (par exemple en utilisant le MSISDN dans un SMS au lieu de cookies), un framework de création de modèles et de rendu (équivalent de JSP) - et ensuite construire un framework MVC dessus.