Je conçois une API REST pour un système à trois niveaux comme: Client application-> Front-end API cloud server-> user's home API server (Home).
Homeest un appareil domestique, et est censé maintenir la connexion Front-endvia Websocket ou un long sondage (c'est le premier endroit où nous violons REST. Il empire encore plus tard) . Front-endtunnelise principalement les Clientdemandes de Homeconnexion et gère certains appels lui-même. Envoie parfois Homedes notifications à Client.
Front-endet Homeont essentiellement la même API; Clientpeut se connecter Homedirectement sur LAN. Dans ce cas, Homedoit enregistrer certaines Clientactions sur Front-endlui - même.
Les avantages de REST dans ce système sont:
- REST est lisible par l'homme;
- REST a un mappage bien défini des verbes (comme CRUD), des noms et des codes de réponse aux objets de protocole;
- Il fonctionne sur HTTP et passe tous les proxy possibles;
Les contras REST sont:
- Nous avons besoin non seulement d'un style de communication demande-réponse, mais également d'un abonnement à la publication;
- Les codes d'erreur HTTP peuvent être insuffisants pour gérer les erreurs de communication à trois niveaux;
Front-endpeut revenir202 Acceptedà un appel asynchrone uniquement pour découvrir que laHomeconnexion nécessaire est rompue et qu'il aurait dû y en avoir503; Homedoit envoyer des messages àClient.Clientdevra interrogerFront-endou maintenir une connexion.
Nous envisageons WAMP / Autobahn sur Websocket pour obtenir la fonctionnalité de publication / abonnement, quand il m'a semblé que cela ressemblait déjà à une file d'attente de messages.
Vaut-il la peine d'évaluer une sorte de file d'attente de messagerie comme moyen de transport?
On dirait que les contras de la file d'attente de messages sont:
- Je vais devoir définir moi-même les verbes CRUD et les codes d'erreur au niveau du message.
- J'ai lu quelque chose sur "des coûts de maintenance plus élevés", mais qu'est-ce que cela signifie?
Quelle est la gravité de ces considérations?
@Jimmy Hoffapoint valable, merci. C'est vrai, mais pas complètement. Il s'agit d'une base de données, d'un stockage, etc. communs. @Javiermerci, c'est une bonne partie d'une réponse.
@Mike Brownexactement. Je vous en prie.