170 похожих чатов

Подскажите, читаю щас про REST и gRPC. Пытался понять в

чем разница (с REST работал, а с gRPC ещё не доводилось). Кроме как протобафа и второй версии http есть ли ещё отличия?

11 ответов

27 просмотров

REST - это парадигма, grpc - конкретный протокол

Simon-S Автор вопроса
Daniel Podolsky
REST - это парадигма, grpc - конкретный протокол

Тогда очень странно, что их вообще сравнивают

Simon S
Тогда очень странно, что их вообще сравнивают

Сравнивают скорее REST и RPC как подходы, а gRPC это просто одна из наиболее распространенных реализаций в нашем стеке, и она облегчает многие моменты для разработчика

Simon-S Автор вопроса
Alexandr Sokolov
Сравнивают скорее REST и RPC как подходы, а gRPC э...

Ещё у меня возник вопрос о нагрузке на сервер. Если при REST мы обслуживаем по очереди, то при gRPC мы можем одновременно несколько, как это вообще влияет на потребление ресурсов? (если я не прав, то поправьте меня)

Скорее разница между http и gRPC (поверх http2), пожалуй самые важные отличия grpc это типизация методов и параметров с помощью описания proto файлов (и автомагическая генерация сервера и клиента из этих файлов), честное двунаправленное соединение и бинарный протокол http2. Для http можно также описывать методы и параметры и генерить по этим описаниям сервер и клиенты с помощью экосистемы swagger (openapi)

Simon-S Автор вопроса
Alexandr Sokolov
Вы не обслуживаете REST по очереди)

когда микросервис получает несколько запросов от более чем одного клиента, он должен обслуживать их по одному, что замедляет работу всей системы. API REST также могут использовать HTTP 2, они по-прежнему ограничены моделью запрос-ответ и не используют поддержку HTTP 2 для двунаправленной потоковой связи. В отличие от этого, gRPC использует HTTP 2 и пользуется преимуществами поддержки HTTP 2 как для взаимодействия с клиентом, так и для двунаправленной связи. Таким образом, gRPC может управлять «унарными» взаимодействиями, аналогичными HTTP 1.1 (когда клиент отправляет один запрос, а сервер отправляет один ответ). В то же время клиенты могут также открывать долговременные соединения, в которых каждый вызов RPC открывает новый поток HTTP 2, также известный как двунаправленная, «мультиплексируемая» или потоковая связь.

Simon S
когда микросервис получает несколько запросов от б...

Эм, что то очень странное написано, REST никак вам не диктует порядок обработки входящих запросов, все зависит от реализации. Если взять какую нибудь Django на python, то там да, один воркер - один запрос единовременно, именно поэтому поднимают пул воркеров. В го же все web серверы обрабатывают входящие сообщения в отдельных горутинах асинхронно

Simon S
когда микросервис получает несколько запросов от б...

Этот текст ввел вас в заблуждение. Вы обслуживаете запросы последовательно в рамках одного соединения, никто не мешает использовать более одного соединения. Более того, если вы посылаете несколько запросов параллельно, то как раз несколько соединений и будут использованы и обработы параллельно (условно) на стороне сервера. На сколько я понял, что тут написано, автор пытается рассказать про возможность HTTP2 использовать несколько нитей в рамках одного соединения

Simon-S Автор вопроса
Andrei 🦉 Sergeev
Эм, что то очень странное написано, REST никак вам...

Да, я поэтому не очень понял эту строчку и решил спросить

Simon-S Автор вопроса
Alexandr Sokolov
Этот текст ввел вас в заблуждение. Вы обслуживаете...

ааа, теперь стало понятно, что тут не про соединение написано, спасибо

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта