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)
.
Home
est un appareil domestique, et est censé maintenir la connexion Front-end
via Websocket ou un long sondage (c'est le premier endroit où nous violons REST. Il empire encore plus tard) . Front-end
tunnelise principalement les Client
demandes de Home
connexion et gère certains appels lui-même. Envoie parfois Home
des notifications à Client
.
Front-end
et Home
ont essentiellement la même API; Client
peut se connecter Home
directement sur LAN. Dans ce cas, Home
doit enregistrer certaines Client
actions sur Front-end
lui - 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-end
peut revenir202 Accepted
à un appel asynchrone uniquement pour découvrir que laHome
connexion nécessaire est rompue et qu'il aurait dû y en avoir503
; Home
doit envoyer des messages àClient
.Client
devra interrogerFront-end
ou 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 Hoffa
point valable, merci. C'est vrai, mais pas complètement. Il s'agit d'une base de données, d'un stockage, etc. communs. @Javier
merci, c'est une bonne partie d'une réponse.
@Mike Brown
exactement. Je vous en prie.