Es gibt definitiv Vor- und Nachteile bei der Verwendung von JSON über REST im Vergleich zu TCP / IP mit Binärprotokoll, und ich glaube, Sie ahnen bereits, dass das Binärprotokoll schneller sein wird. Ich kann Ihnen nicht genau sagen, wie viel schneller (und dies würde von vielen Faktoren abhängen), aber ich würde vielleicht 1-2 Größenordnungen Unterschied schätzen.
Wenn etwas auf den ersten Blick 10-100 Mal langsamer ist als etwas anderes, kann es sein, dass Sie mit einem Ruck reagieren und sich für "schnelles Ding" entscheiden. Dieser Geschwindigkeitsunterschied liegt jedoch nur im Protokoll selbst. Wenn auf der Serverseite Datenbank- / Dateizugriff besteht, wird dies durch die Auswahl der Übertragungsebene nicht beeinträchtigt. In einigen Fällen kann dadurch die Geschwindigkeit Ihrer Übertragungsschicht erheblich verringert werden.
HTTP REST und JSON sind aus mehreren Gründen gut:
- Sie können von nahezu jedem konsumiert werden. Sie können Ihre Web-App schreiben, sich dann umdrehen und Ihre API für den Rest der Welt veröffentlichen. Jetzt kann jeder die gleichen Endpunkte erreichen und zu Ihren Diensten gelangen
- Sie sind leicht zu debuggen, Sie können einen Paket-Sniffer öffnen oder einfach eingehende Anfragen in Textdateien ablegen und sehen, was los ist. Mit binären Protokollen geht das nicht
- Sie sind leicht erweiterbar. Sie können zu einem späteren Zeitpunkt weitere Attribute und Daten hinzufügen, ohne die Kompatibilität mit alten Clients zu beeinträchtigen.
- Verbrauchbar für Javascript-Clients (nicht sicher, ob sie einen Protobuf-JS-Parser haben, glaube nicht, dass es einen gibt)
Protobufs über TCP / IP:
Wenn es meine Wahl wäre, würde ich zweifellos mit HTTP REST und JSON gehen. Es gibt einen Grund, warum so viele andere Unternehmen und Websites diesen Weg eingeschlagen haben. Denken Sie auch daran, dass Sie in Zukunft immer 2 Endpunkte unterstützen könnten. Wenn Ihr Entwurf korrekt ist, sollte Ihre Endpunktauswahl vollständig von Ihrer serverseitigen Geschäftslogik oder der Datenbank entkoppelt sein. Wenn Sie später feststellen, dass Sie mehr Geschwindigkeit für alle / einige Anfragen benötigen, sollten Sie in der Lage sein, Protobufs mit minimalem Aufwand hinzuzufügen. REST / JSON bringt Sie jedoch auf Anhieb schneller auf den Boden und bringt Sie weiter.
So weit wie Netty vs Spring geht. Ich habe Netty nicht direkt verwendet, aber ich glaube, es ist nur ein leichter Webserver, bei dem Spring ein Framework ist, das Ihnen viel mehr als nur das bietet. Es verfügt über Datenzugriffsebenen, Hintergrundjobplanung und (glaube ich) ein MVC-Modell, ist also viel schwerer. Welches soll ich wählen? Wenn Sie sich für HTTP entschieden haben, ist die nächste Frage wahrscheinlich, wie standardisiert Ihre App ist. Wenn Sie im Begriff sind, eine verrückte benutzerdefinierte Logik zu schreiben, die nicht in die Standardform passt, und Sie lediglich eine HTTP-Serverebene benötigen, entscheiden Sie sich für Netty.
Ich vermute jedoch, dass Ihre App nicht so besonders ist und wahrscheinlich von vielen Dingen profitieren könnte, die Spring zu bieten hat. Das bedeutet jedoch, dass Sie Ihre App nach dem Framework von Spring strukturieren und die Dinge so tun sollten, wie sie von Ihnen erwartet werden. Dies würde bedeuten, dass Sie mehr über Spring erfahren, bevor Sie sich mit Ihrem Produkt befassen. Frameworks sind im Allgemeinen großartig, weil sie Sie wieder schneller auf den Weg bringen, aber der Nachteil ist, dass Sie in ihre Form passen müssen, anstatt Ihr eigenes Design zu erstellen, und dann erwarten, dass das Framework nur funktioniert.
(*) - In der Vergangenheit wurde darauf hingewiesen, dass meine Posts nicht die Meinungen der ganzen Welt widerspiegeln. Ich gehe auf die Aufzeichnung und füge nur hinzu, dass ich nur begrenzte Erfahrung mit Netty habe (ich habe zuvor das Play-Framework verwendet) das basiert auf Netty) oder Spring (ich habe nur darüber gelesen). Also nimm was ich sage mit einem Körnchen Salz.