Wir haben REST-Webservices, die XML oder JSON (WCF) bereitstellen können. Ich spiele mit der Idee, Protobufs zu implementieren. Warum?
PROS
- Weniger Last auf Servern.
- Kleinere Nachrichtengröße - weniger Verkehr.
- Es ist jetzt einfacher als später zu wechseln.
CONS
- Müssen umgesetzt werden
- Es wird schwieriger sein, Nachrichten für das Debuggen zu finden.
- Ich kann GZip auf dem Server aktivieren und JSON wird so viel Verkehr verbrauchen
Was ist Ihr Vorschlag und / oder Ihre Erfahrung dazu?
web-services
wcf
serialization
Katit
quelle
quelle
Antworten:
Übersteigt der geschäftliche Wert der Implementierung die Kosten?
Wenn Sie implementieren, müssen Sie nicht nur Ihren Server, sondern alle Clients ändern (obwohl Sie beide Formate unterstützen und Clients nur nach Bedarf ändern können). Das wird Zeit und Prüfung erfordern, was direkte Kosten sind. Und unterschätzen Sie nicht die Zeit, die erforderlich ist, um Protokollpuffer wirklich zu verstehen (insbesondere die Gründe, warum ein Feld erforderlich oder optional ist), und die Zeit, die erforderlich ist, um den Protobuf-Compiler in Ihren Erstellungsprozess zu integrieren.
Übersteigt der Wert diesen Wert? Stehen Sie vor der Wahl "Unsere Bandbreitenkosten machen X% unserer Einnahmen aus und wir können das nicht unterstützen"? Oder sogar "wir müssen 20.000 US-Dollar ausgeben, um Server zur Unterstützung von JSON hinzuzufügen"?
Sofern Sie kein dringendes Geschäftsbedürfnis haben, sind Ihre "Profis" keine wirklichen Profis, sondern nur eine vorzeitige Optimierung.
quelle
ich pflege apis und jemand vor mir fügte protobuf hinzu (weil es "schneller" war). Das einzige, was schneller ist, ist RTT aufgrund der geringeren Nutzlast, und das kann mit gzipped JSON behoben werden.
Der Teil, der mir unangenehm ist, ist die relative Arbeit, um protobuf (im Vergleich zu JSON) aufrechtzuerhalten. Ich verwende Java, also verwenden wir die Jackson-Objektzuordnung für JSON. Hinzufügen zu einer Antwort bedeutet Hinzufügen eines Felds zu einem POJO. Aber für protobuf muss ich die .proto-Datei ändern und dann die Serialisierungs- und Deserialisierungslogik aktualisieren, die die Daten in / aus den Protokollpuffern und in POJOs verschiebt. Es ist mehr als einmal vorgekommen, dass jemand ein Feld hinzugefügt und vergessen hat, den Serialisierungs- oder Deserialisierungscode für die Protokollpuffer einzugeben.
Nachdem Clients die Protokollpuffer implementiert haben, ist es fast unmöglich, sich davon zu lösen.
Sie können wahrscheinlich davon ausgehen, mein Rat ist, es nicht zu tun.
quelle