Projektuję interfejs API REST dla trójwarstwowego systemu, takiego jak: Client application-> Front-end API cloud server-> user's home API server (Home).
Homejest urządzeniem domowym i ma utrzymywać połączenie Front-endprzez Websocket lub długą ankietę (jest to pierwsze miejsce, w którym naruszamy REST. Później staje się jeszcze gorzej) . Front-endgłównie tuneluje Clientżądania Homepołączenia i obsługuje niektóre połączenia. Czasami Homewysyła powiadomienia do Client.
Front-endi Homemają w zasadzie ten sam interfejs API; Clientmoże łączyć się Homebezpośrednio przez sieć LAN. W takim przypadku Homemusi zarejestrować niektóre Clientdziałania na Front-endsobie.
Plusy dla REST w tym systemie to:
- REST jest czytelny dla człowieka;
- REST ma dobrze zdefiniowane odwzorowanie czasowników (takich jak CRUD), rzeczowników i kodów odpowiedzi na obiekty protokołu;
- Działa przez HTTP i przekazuje wszystkie możliwe proxy;
Kontrole REST to:
- Potrzebujemy nie tylko stylu komunikacji żądanie-odpowiedź, ale także subskrypcji publikowania;
- Kody błędów HTTP mogą być niewystarczające do obsługi błędów komunikacji trójwarstwowej;
Front-endmoże powrócić202 Accepteddo jakiegoś wywołania asynchronicznego, aby dowiedzieć się, że konieczneHomepołączenie zostało zerwane i powinno być503; Homemusi wysłać wiadomości doClient.Clientbędzie musiał odpytaćFront-endlub utrzymać połączenie.
Rozważamy WAMP / Autobahn przez Websocket, aby uzyskać funkcjonalność publikowania / subskrybowania, kiedy uderzyło mnie, że już wygląda jak kolejka wiadomości.
Czy warto oceniać rodzaj kolejki przesyłania komunikatów jako transportu?
Wygląda na to, że kontrole kolejki wiadomości to:
- Będę musiał sam zdefiniować czasowniki CRUD i kody błędów na poziomie komunikatu.
- Przeczytałem coś o „wyższych kosztach utrzymania”, ale co to znaczy?
jak poważne są te względy?
@Jimmy Hoffaważny punkt, dzięki. Zgadza się, ale nie do końca. To wspólna baza danych, pamięć masowa i tak dalej. @Javierdziękuję, to dobra część odpowiedzi.
@Mike Browndokładnie. Proszę zrób.