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

>Денормализованная выдача не совсем, справедливо только для json-сериализации. любой другой сериализатор

с возможностью внутренних ссылок позволяет исключить дубликаты.

>GQL - это просто RPC.
при помощи graphql можно построить RPC, но сам он таковым не является.

>Нестандартизированные параметры
да, но я не сказал бы, что это минус. Универсальным инструментом для работы с разными апи является клиент graphql - благодаря тому, что схемы экспортируются. Изобретение одного универсального API не лежит в сфере задач graphql.

>Все запросы POST-ом, все ответы с кодом 200. Соответственно браузер никак не помогает всё это дебажить.
а что именно вы дебажите? ответы резолверов? реализацию собственного graphql? я не сведущ в разработке под веб, но я не вижу проблемы испольвать дебаггер IDE для отладки браузерного кода, благо для chrome и для node он один и тот же.

>HTTP кеширование не работает
потому что graphql никак не связан с HTTP

>Все эти типы, фрагменты, мутации и пр на собственном ограниченном языке, требующем писать много кода для простых вещей. Без библиотек и спец-инструментов использовать очень сложно.
этот собственный язык очень ложится на описание систем, которые следуют DDD/CQRS. Простые вещи описываются простым языком, все сводится к командам (мутациям) и проекциям (queries).

>Нет загрузки файлов
да просто Buffer кидаете в команду и все. зачем base64? если вы сериализуете через json, then don't. Если вы привязаны к JSON, вижу несколько вариантов:
1. кодировать в json и менять буфферы на какой-нибудь { __type: "Buffer", content: "base64..." },
2. или же отправлять через multipart form data, заменяя буфферы на ссылку на content disposition.

в самом graphql нет "файлов", потому что файлы ничем не отличаются от остальных данных. вы хотите транспорт бинарных данных, и он в graphql есть, очевидно.

>Легко простым запросом выгрузить на клиент всю базу, что положит сервер.
почему же? с каждым запросом у вас есть объект контекста. каждый из узлов запроса может менять и смотреть этот контекст. если ваши запросы превышают какую-нибудь эвристику предела вложенности, вы можете отказаться дальше рекурсивно спускаться и вернуть какую-нибудь заглушку типа "превышена глубина запросов", или отменить ответ в принципе. Более того, вас никто не заставляет подготавливать все данные сразу же, вы можете сначала оценить потенциальный размер ответа и потом принять решение, хотите ли вы его отправлять и на самом деле извлекать из бд, или ну его нафиг.

1 ответов

24 просмотра

Можно много фантазировать про не json сериализацию, но её поддержки нигде нет и не планируется. А используя что-то своё, вы теряете все преимущества перед любым самопальным протоколом. Он по факту имеет семантику РПЦ указанные следствия из этой семантики. Думаю вам стоит поработать в вебе немного, чтобы понимать что и как там дебажится. Через ide подключиться не всегда возможно, не всегда удобно, и опять же нужна спец поддержка этого протокола, которой нет и не предвидится. В том и проблема, что он никак с хттп кешированием не связан и ломает его полностью, вместо того, чтобы использовать его возможности. Всё сводится к копипасте, очень много копипасты. Прочитать объект - один код, положить его обратно - другой код. Оценить ресурсоёмкость запроса - задача не из простых. Сформировать конечное число запросов к бд по произвольному запросу к серверу - ещё более сложная задача.

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

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

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Ребят в СИ можно реализовать ООП?
Николай
33
Подскажите пожалуйста, как в CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); получить наз...
A Z
7
Карта сайта