Serverless GraphQL Part II: ходим за данными в Yandex Database
В первой части мы закончили на том, что запустили 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.
Полный код примера можно найти тут.