Ich entwerfe eine REST-API für ein dreistufiges System wie: Client application-> Front-end API cloud server-> user's home API server (Home).
Homeist ein Front-endHeimgerät und soll die Verbindung über Websocket oder eine lange Umfrage aufrechterhalten (dies ist der erste Ort, an dem wir gegen REST verstoßen. Es wird später noch schlimmer) . Front-endMeistens tunnelt Clienter HomeVerbindungsanfragen und bearbeitet einige der Anrufe selbst. HomeSendet manchmal Benachrichtigungen an Client.
Front-endund Homehaben im Grunde die gleiche API; ClientMöglicherweise wird eine Homedirekte Verbindung über LAN hergestellt. In diesem Fall Homemüssen einige ClientAktionen auf einem Front-endselbst registriert werden .
Vorteile für REST in diesem System sind:
- REST ist für Menschen lesbar.
- REST verfügt über eine genau definierte Zuordnung von Verben (wie CRUD), Substantiven und Antwortcodes zu Protokollobjekten.
- Es funktioniert über HTTP und übergibt alle möglichen Proxys.
REST Contras sind:
- Wir brauchen nicht nur einen Request-Response-Kommunikationsstil, sondern auch ein Publish-Subscribe.
- HTTP-Fehlercodes reichen möglicherweise nicht aus, um dreistufige Kommunikationsfehler zu behandeln.
Front-endkehrt möglicherweise202 Acceptedzu einem asynchronen Aufruf zurück, um festzustellen, dass die erforderlicheHomeVerbindung unterbrochen ist und hätte vorhanden sein müssen503. Homemuss Nachrichten an sendenClient.Clientmuss abfragenFront-endoder eine Verbindung aufrechterhalten.
Wir erwägen, WAMP / Autobahn über Websocket zu veröffentlichen / abonnieren, als mir auffiel, dass es bereits wie eine Nachrichtenwarteschlange aussieht.
Lohnt es sich, eine Art Messaging-Warteschlange als Transportmittel zu bewerten?
Es sieht so aus, als wären Nachrichten-Warteschlangen-Contras:
- Ich muss CRUD-Verben und Fehlercodes selbst auf Nachrichtenebene definieren.
- Ich habe etwas über "höhere Wartungskosten" gelesen, aber was bedeutet das?
Wie ernst sind diese Überlegungen?
@Jimmy Hoffagültiger Punkt, danke. Das stimmt, aber nicht ganz. Es ist eine gemeinsame Datenbank, Speicher und so weiter. @JavierDanke, es ist ein guter Teil einer Antwort.
@Mike Browngenau. Bitte.