Комментарии 12
Ух ты, спасибо, как-то не нашел. Там правда в январе этого года первый коммит, молодая библиотека.
А как у HotChocolate с DataLoader и проблемой N + 1? Я вот о чем:
query {
posts {
author {
name
}
}
}
В ресолвере поля posts
мы достаем список постов. А в ресолвере поля author
мы полезем в базу N раз.
В референсной реализации GraphQL используется подход DataLoader. Он основан на том, что если у нас есть операция получения списка объектов :
Task<Item[]> GetItems(int id[]);
То мы можем группировать вызовы, загружающие единичный объект Item
:
- сначала
Task
-и на получение единичного элемента накапливаются в очереди - затем происходит обращение к БД для загрузки списка элементов
- далее, разультаты запроса распределяются по ожидающим
Task
из очереди - и наконец, выполнение переходит к более глубокому уровню GraphQL-ресолверов.
При всей уродливости graphql-dotnet
, DataLoader там есть.
Я не то, чтобы гуру GraphQL, но тоже копаюсь с ним сейчас, и мне интересно.
Когда делаешь классы наследники ObjectGraphType подразумевается, что вся схема известна на этапе компиляции. Здесь я генерирую схему на основе динамических метаданных Docsvision.
Хочется в ближайшем будущем попробовать GraphQL, а именно идею его использования как api-gateway, чтобы на клиенте любые данные извлекать одним запросом. Интересно как сделать маппинг с наименьшими усилиями.
Не, пока не пробовали.
Напиши мне GraphQL сервер на C#