Je concevons A REST API pour un système de trois niveaux similaire à: Client application
-> Front-end API cloud server
-> user's home API server (Home)
.
Home
est un appareil à domicile et est censé maintenir la connexion à Front-end
via Websocket ou à un long sondage (c'est le premier endroit où nous violons Repos. Il devient encore pire plus tard) . Front-end
Surtout tunnels Client
Demandes à Home
Connexion et gère certains des appels lui-même. Parfois Home
envoie des notifications à Client
.
Front-end
Et Home
ont fondamentalement la même API; Client
peut se connecter à Home
directement, sur LAN. Dans ce cas, Home
doit enregistrer quelques actions Client
actions sur un Front-end
Elle-même.
Avantages pour REST dans ce système sont les suivants:
Les contras de repos sont:
Front-end
Peut retourner 202 Accepted
À un appel ASYNC uniquement pour savoir que la connexion Home
est cassée et qu'il aurait dû être 503
;Home
doit envoyer des messages à Client
. Client
_ devra sonder Front-end
ou pour maintenir une connexion.Nous envisageons [~ # ~ # ~] wamp [~ # ~] / Autobahn sur Websocket pour obtenir des fonctionnalités de publication/abonnement, quand il m'a frappé qu'il ressemble déjà à un message file d'attente.
Cela vaut-il la peine d'évaluer une sorte de file d'attente de messagerie en tant que transport?
On dirait que les contras de la file d'attente de messages sont les suivants:
quelle est la gravité de ces considérations?
Si vous avez la connectivité, accédez à une file d'attente de message - bien que vous devez définir vos propres protocoles (tâche difficile!) Pour envoyer des messages d'une structure et d'un format particulier.
Le problème avec la maintenance est que typiquement le client et le serveur sont construits séparément, vous devez veiller à conserver les deux extrémités à l'aide des mêmes définitions de message, mais si vous n'êtes pas assez organisé, utilisez simplement le même XML que vous utiliseriez dans votre = REST Service.
Si vous avez des problèmes de connectivité via Internet, les comms de port 80 et http uniquement et "unidirectionnel", alors A REST SYSTEM est probablement le meilleur. Envoyer et sondage, ou obtenir une bande Web pour rappeler Les données, mais généralement architecte votre système être client/serveur. Si vous avez la possibilité d'obtenir la connectivité, les systèmes de messagerie sont super.
J'irais avec Zeromq pour un système de messagerie, son suffisamment configurable pour tordre de toutes sortes de scénarios, y compris ceux tolérants de panne. Je ne suis pas sûr que cela fonctionne sur http cependant.
On dirait que Autobahn convient parfaitement à ce que vous essayez de faire. Il y a d'autres outils disponibles également. Consultez le Bus de service Windows Azure (qui contient des frameworks client pour Java, .NET, PHP, Python, Nodejs et Ruby).
Tandis que les messages de repos intégrés sont utiles. Vous constaterez que votre application dépassera les opérations de base du crud. Par exemple, si votre demande était un système bancaire. À la place de
Mise à jour ACCT 54321 Balance = Balance - 20h00 Mise à jour ACCT 98765 Balance = Balance + 20,00
Vous voulez probablement un seul message comme
Transférer 20,00 du compte 54321 au compte 98765
Il est préférable que vous découvriez cet obstacle avec REST maintenant plutôt que plus tard. Découvrez Greg Young événement centrique qui explique comment créer un modèle plus riche pour la messagerie dans votre application.