Здесь есть несколько аспектов.
Протокол: HTTP / 1.1 против HTTP / 2
Есть много улучшений в HTTP / 2 по сравнению с HTTP / 1.1, но есть и недостатки для некоторых случаи использования. Некоторые примеры улучшений:
- HTTP / 2 - это двоичный протокол, тогда как HTTP / 1.1 - это текстовый протокол
- HTTP / 2 может повторно использовать TCP-соединение для нескольких запросов, отправленных разным конечные точки, но к тому же серверу.
- HTTP / 2 имеет улучшенные функции сжатия заголовков с HPACK . Это полезно, например, если вы отправляете один и тот же
Authorization: Bearer <JWT-token>
в последовательных запросах API.
Формат полезной нагрузки: JSON против буферов протокола
Это может повлиять на полезную нагрузку размер , но сериализация и десериализация производительность, вероятно, важнее. Другим важным аспектом является инструментальные средства и производительность разработчика.
Протоколные буферы, используемые gRP C, являются , а не единственным эффективным двоичным форматом полезной нагрузки. Существует много альтернатив, например, FlatBuffers , формат с нулевым копированием, разработанный после опыта работы с буферами протокола. Другой двоичный формат, в основном для меньшей полезной нагрузки (не для производительности сериализации) - Avro . Формат Avro может иметь преимущество в расширяемости формата полезной нагрузки (см., Например, Разработка приложений с интенсивным использованием данных ).
См., Например, JSON против буферов протокола против FlatBuffers для сравнения.
gRP C
gRP C - более высокая абстракция протокола, чем просто использование HTTP / 2. Меньше деталей оставлено на усмотрение разработчика. В целом, выбор HTTP / 2 + JSON против gRP C имеет много аспектов, все зависит от того, что является наиболее важным аспектом для вашего варианта использования.