Serverless GraphQL Part II: ходим за данными в Yandex Database

Nikolay Matrosov
3 min readOct 24, 2020

--

В первой части мы закончили на том, что запустили Apollo в облаке. Но это слишком простое API. Поэтому сейчас добавим интеграцию с Severless YDB.

Создаем базу

В консоли переходим во вкладку Yandex Database и нажимаем кнопку создать базу.

Выбираем Serverless вариант. Собственно на странице создания вам объяснят все плюсы такого подхода:

YDB автоматически выделяет и освобождает ресурсы исходя из пользовательской нагрузки, то есть исходя из объема хранимых данных и количества и сложности операций выполняемых с данными; в этом случае оплачивается стоимость выполнения операций и хранимых данных. Тарифы и цены.

Далее создаем 2 таблицы authors и books. Их мы будем использовать в примере.

Теперь можно переходить к написанию кода.

Пример работы с YDB

YDB может работать с просто YQL запросами. Но предпочтительным является через prepared запросы. Это позволит избежать инъекций. Также если переиспользовать подготовленные запросы, это позволит работать с базой эффективнее, так как не будет тратиться время на парсинг каждого запроса.

Мы получили данные из базы, осталось описать resolver’ы в Apollo, которые будут обращаться к этим методам в ответ на входящие запросы.

Apollo Resolvers

Опишем GraphQL схему.

Как видно нам нужно описать всего 4 резолвера. Это простые функции которые принимают 4 параметра (parent, args, context, info)=> data.

parent — Результат выполнения родительского резолвера. Например author в нашем случае. Родительский резолвер всегда отрабатывает до резолверов вложенных в него.

args В этом объекте лежат все аргументы переданные при вызове запроса.

context Этот объект делят все резолверы, выполняемые в рамках одной операции. Его можно использовать для передачи состояния в рамках одной операции и доступа к datasouce’ам.

infо Содержит информацию о ходе выполнения операции (нужен исключительно в сложных случаях)

Подробнее про резолверы можно прочитать тут.

Вот собственно мы и получили работающее GraphQL API читающее данные из YDB.

Примеры запросов в API

Полный код примера можно найти тут.

--

--