Ich entwerfe eine REST-API für ein dreistufiges System wie: Client application
-> Front-end API cloud server
-> user's home API server (Home)
.
Home
ist ein Front-end
Heimgerä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-end
Meistens tunnelt Client
er Home
Verbindungsanfragen und bearbeitet einige der Anrufe selbst. Home
Sendet manchmal Benachrichtigungen an Client
.
Front-end
und Home
haben im Grunde die gleiche API; Client
Möglicherweise wird eine Home
direkte Verbindung über LAN hergestellt. In diesem Fall Home
müssen einige Client
Aktionen auf einem Front-end
selbst 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-end
kehrt möglicherweise202 Accepted
zu einem asynchronen Aufruf zurück, um festzustellen, dass die erforderlicheHome
Verbindung unterbrochen ist und hätte vorhanden sein müssen503
. Home
muss Nachrichten an sendenClient
.Client
muss abfragenFront-end
oder 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 Hoffa
gültiger Punkt, danke. Das stimmt, aber nicht ganz. Es ist eine gemeinsame Datenbank, Speicher und so weiter. @Javier
Danke, es ist ein guter Teil einer Antwort.
@Mike Brown
genau. Bitte.