Тёмный

Сравнение скорости GraphQL и REST 

Архитектор ПО. Александр Желнин
Просмотров 5 тыс.
50% 1

В этом видео покажу как в Posman делается нагрузочное тестирование, и с помощью него сравню скорость выполнения идентичных запросов GraphQL и REST.
github.com/AlexanderZhelnin/DEMO

Опубликовано:

 

12 ноя 2021

Поделиться:

Ссылка:

Скачать:

Готовим ссылку...

Добавить в:

Мой плейлист
Посмотреть позже
Комментарии : 51   
@senkamatic8448
@senkamatic8448 22 дня назад
Крутой чел! Интересно смотреть❤
@ilyalisov5284
@ilyalisov5284 Год назад
Спасибо за видео, решил использовать Graphql, нашел понятное сравнение с REST по производительности!
@Kulibins1
@Kulibins1 Год назад
В нашем полку прибыло 👍
@DInfinity3
@DInfinity3 2 года назад
Спасибо большое за видео, они топовые!)
@Kulibins1
@Kulibins1 2 года назад
Рад что нравится, у вас система тоже очень известная 👍
@Kulibins1
@Kulibins1 2 года назад
Перепроверил REST, у меня настроен NewtonJson в качестве серилизатора, поставил стандартный, который быстрее, но это не повлияло на результат.
@user-yo7mw6oj4p
@user-yo7mw6oj4p 2 года назад
Спасибо. Классный ролик.
@Kulibins1
@Kulibins1 2 года назад
Всегда пожалуйста.
@user-mo8kx4yi4g
@user-mo8kx4yi4g 9 месяцев назад
Сделал тоже самое с local MSSQL, REST и GraphQL в одном проекте. Данные беру из EF context в обоих случаях. Скорость одинаковая (как и должно быть). P.S. В целом видео классные, подписался.
@Kulibins1
@Kulibins1 9 месяцев назад
Я изначально думал что скорость rest будет выше, а она как минимум одинаковая, поэтому graphql очень хорош
@vladimirv.443
@vladimirv.443 Год назад
Подскажите, а как в GraphQl лучше работать с динамическими объектами? Получить все поля, без перечисления в query как я понял нельзя? К примеру, имеется динамическая форма (сотрудника), строится на основе конфиг-файла json. С сервера приходит сам объект со всеми полями, строится форма. Почему-то решил спросить в этом ролике )
@Kulibins1
@Kulibins1 Год назад
Тут может помочь хранение в виде json, когда у вас поле json строка. И при получении её происходит десирелизация
@Saveaaa
@Saveaaa 2 года назад
А что Вы используете в своем основном проекте для генерации отчетов на сайте?
@Kulibins1
@Kulibins1 2 года назад
У меня проекты больше это как замена десктопным приложениям. Раньше была своя система для отчётов. Сейчас хочу поизучать этот вопрос. Проектов много, команд много, посмотрю что кто использует.
@Saveaaa
@Saveaaa 2 года назад
@@Kulibins1 тоже как замена десктопу начал переносить на blazor проект. Пока проблема только с передачей файла. С отчётами есть идеи, но пока ищу все варианты.
@Poseidonboy
@Poseidonboy Год назад
Привет! Не очень понимаю почему GraphQL оказался быстрее, ведь он работает поверх HTTP и наоборот должен только добавлять время. Было бы хорошо, если бы еще сравнили какой SQL запрос генерируется, наверное в нём всё дело?
@Kulibins1
@Kulibins1 Год назад
По какой-то причине более оптимальный запрос, хотя и там и там entity. А так накладные расходы graphql ничтожные.
@user-lb9rz2jg9l
@user-lb9rz2jg9l 2 года назад
Ну да, если с фронта одним запросом графа можно забрать все данные, нежели рестом несколькими запросами с разных эндпоинтов.. И что тогда будет быстрее?
@Kulibins1
@Kulibins1 2 года назад
GraphQL быстрее, но в rest тоже можно сделать специальный запрос который сможет вернуть всё, REST не ограничен CRUD, но такие запросы нужно делать каждый раз, а их может быть много, и они заранее не известны.
@rudolfsikorsky7900
@rudolfsikorsky7900 2 года назад
Интересно, спасибо. Я правильно понял что сам GraphQL-сервер тоже написан на Ц#, а не запущена какая-то готовая сборка?
@Kulibins1
@Kulibins1 2 года назад
Да, исходники горячего шоколада лежат на GitHub
@nouchance
@nouchance 2 года назад
Классика жанра:)
@Kulibins1
@Kulibins1 2 года назад
Спасибо
@kepamuk1
@kepamuk1 2 года назад
Тогда в чем преимущество одного и другого, или графкл просто лучше и все?
@Kulibins1
@Kulibins1 2 года назад
С мой точки зрения GraphQL личе во всем. Но rest проще и более распространен, для некоторых стыковок различных систем между собой наверное лучше использовать rest
@mihailamurov8575
@mihailamurov8575 Год назад
Почему с REST возвращаются данные на 20% "легче" чем с GraphQL? Может ли это сказаться при большем объеме данных и реальных условиях по сети?
@Kulibins1
@Kulibins1 Год назад
Как посчитали 20% ? GraphQL добавляет буквально чуть-чуть, причем т.к. запросы мы группируем, то наоборот у GraphQL будет меньше данных, т.к. у каждого запроса есть еще http header и т.д. если писать под любое требование оптимизированный запрос то мы в ответе json видим дополнительно слово data и название функции, если вы включили что-то для отладки, то это не релизное сравнение, в rest мы то же можем напихать для отладки чего лишнего. Из моего опыта данные во много раз перевешивают слово data и название функции + что бы не говорили а многие не оптимизируют и в результате на rest кучу лишних запросов - GraphQL лишён этих недостатков, разработка ускоряется, запросов меньше.
@mihailamurov8575
@mihailamurov8575 Год назад
@@Kulibins1 Респонс для REST: 2.5 килобайта, для GraphQL: 3 килобайта. Но может действительно в реальных условиях с более емкими запросами жила разница или пропадет или не будет так заметна. Спасибо )
@Kulibins1
@Kulibins1 Год назад
@@mihailamurov8575 посмотрел, и понял почему у вас так, русские буквы в ответе превратились в \u0410\u0432\u0442\u043E\u0440 из-за этого разница в размере. Самое интересное, если поставить ResponseCompression на бэке, то сжатый ответ graphql оказался почему-то значительно меньше 2.9 kb против 8.2 у REST. Если не сжимать, то 84.5 против 61.5 kb у рест. Но у меня на рабочих проектах всегда стоит сжимать. Нужно посмотреть как настраивается сериализация для HotChocolate ( или чем вы пользуетесь )
@user-hy8kc7ht7v
@user-hy8kc7ht7v Год назад
Потому что это очередная абстракция,+ как она реализована внутри вопрос, если у вас в приложении работает , 20% это огромная потеря производительности, это будет заметно
@Kulibins1
@Kulibins1 Год назад
@@user-hy8kc7ht7v я уже ответил на этот вопрос нет такого что rest легче!!! Оно одинаково по размеру ответа. Тут дело в кодировке по умолчанию русского текста. В qraphql hot chocolate тоже можно убрать перекодирование и будет так же, более в rest изначально тоже русский текст через кодировку выдавал, пришлось опцию json серелизации выставлять. Я у себе провел замеры и в ответе на вопрос их выложил. Что rest что grapql это надстройки 🤣 только graphql не медленнее и гораздо фукциональнее , на написание бэка тратится гораздо меньше времени. Конечно если цель: бесконечная работа, то qraphql это минус, а если скорость, функциональность, то это qraphql. Целую статью на Хабре писал GraphQL: как сделать бэкенд приложения экономнее и быстрее habr.com/p/593115/
@vinogradova619
@vinogradova619 2 года назад
Неожиданно, интересно почему так?
@Kulibins1
@Kulibins1 2 года назад
Сам удивился, думал либо равны, либо REST на одинаковом результате будет быстрее, но вот результат: GraphQL в несколько раз быстрее. Может повлиял еще запрос в базу данных. Sql в горячем шоколаде, чуть от того что entity формирует отличается. Надо еще провести расширенные эксперименты. Изначально в видео хотел показать как тестить Postman, и взял пример, а оно вот как получилось.
@user-hy2qh2tq1z
@user-hy2qh2tq1z 2 года назад
1:30 дай пожалуйста ссылку на видео про хэш
@Kulibins1
@Kulibins1 2 года назад
Вопрос про это видео, наверное: ru-vid.com/video/%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE-0Q5Pz5Ozsow.html
@user-yx8nj9mp4f
@user-yx8nj9mp4f Год назад
3:31 говорит, что произвел нагрузочный тест, делая 100 запросов за 10 секунд, а результаты якобы говорят что-то о REST.
@Kulibins1
@Kulibins1 Год назад
Конечно через postman это не прям супернагрузочное тестирование, да и запрос в бд тут реально без кэширования, запрос с join получается - но факт от этого не меняется, думал что накладные расходы у GraphQL будут выше, а оказалось что он не то что не медленее , но и чуть быстрее - Суть видео была сравнить на примере.
@user-yx8nj9mp4f
@user-yx8nj9mp4f Год назад
​@@Kulibins1 20 - 80 миллисекунд для запроса на локальную машину - это очень медленно для небольших запросов. Думаю, дело не в том, что используется REST.
@Kulibins1
@Kulibins1 Год назад
@@user-yx8nj9mp4f конечно там еще и запрос в базу данных
@matveiq
@matveiq 2 года назад
Попробуй сервер на rust написать
@Kulibins1
@Kulibins1 2 года назад
Никогда не занимался rust 😉
@matveiq
@matveiq 2 года назад
@@Kulibins1 там крейт простой async-graphql. У меня схеиа очень простая, запрос в браузере поисходит за три милисекунды
@Kulibins1
@Kulibins1 2 года назад
@@matveiq за 3мс с обращением к postgresql?
@matveiq
@matveiq 2 года назад
@@Kulibins1 нет, статика из памяти
@Kulibins1
@Kulibins1 2 года назад
@@matveiq тут в примере из базы + запрос не просто select
@PutlerXLO
@PutlerXLO 2 года назад
Епте... Что тут можно мерить, если ты меряешь не сам graphql, а реализацию своих контроллеров. Все это http, так что без толку тут мерить.
@Kulibins1
@Kulibins1 2 года назад
Ну тут как раз и меряю все вместе, т.к. запросы идентичные 😉
@pawsdev
@pawsdev Год назад
REST в топку вслед за SOAP
@Kulibins1
@Kulibins1 Год назад
Rest для всяких стыковок с другими системами очень даже хорошо.
Далее
Почему Angular
18:40
Просмотров 8 тыс.
GraphQL net core. Базовый уровень 1
19:33
tRPC, gRPC, GraphQL or REST: when to use what?
10:46
Просмотров 74 тыс.
GraphQL vs REST: what you need to know
10:11
Просмотров 15 тыс.
GraphQL vs REST: Which is Better for APIs?
7:31
Просмотров 190 тыс.