Думаю над докладом на весеннюю встречу. GraphQL в Rails у многих ассоциируется с медленными ответами, и обычно виноват не GraphQL, а N+1 в резолверах. Хочу взять один запрос, список заказов с клиентом и позициями, показать в логе 51 SELECT, а потом убрать их через dataloader из graphql-ruby:
class Types::OrderType < Types::BaseObject
field :customer, Types::CustomerType, null: false
def customer
dataloader.with(Sources::RecordById, Customer).load(object.customer_id)
end
end
Сам Source пишется строк на десять. Цифры у меня есть: 51 запрос превратился в 3, ответ с 640 мс до 90. Вопрос в другом: стоит ли тратить слот на GraphQL, если на встречах его почти никто не использует?
Стоит. Его не используют как раз потому, что боятся этого, а ты показываешь, как лечится. Я бы ещё взял пару минут на ограничение глубины и сложности, без них любой клиент кладёт сервер одним вложенным запросом:
class AppSchema < GraphQL::Schema
max_depth 10
max_complexity 300
end
+1, пришла бы. Мы на Hotwire привыкли жить без API, интересно посмотреть, как это выглядит с другой стороны