GraphQL - одна из самых интересных новых технологий, появившихся за последние годы. Это отличный инструмент для разработчиков, позволяющий управлять необходимыми данными из API. Основная идея GraphQL:
`Получение того, что вам нужно, ни больше, ни меньше`
Эта концепция может помочь свести к минимуму полезные нагрузки вашего API и помочь разработчикам запрашивать данные, которые им могут понадобиться в приложении, а не управляться сервером.
Теперь предположим, что мы пишем веб-приложение, которое извлекает данные из конечной точки GraphQL и использует их для визуализации веб-страницы. Какое решение приходит на ум в первую очередь?
npm i <popular-graphql-client-library>
?
Теперь, прежде чем вы начнете раздувать папку node_modules
, подумайте о своем варианте использования. Вы действительно хотите платить библиотечный сбор? Особенно, если вы можете решить свою проблему вообще без каких-либо внешних зависимостей?
Хотя существуют допустимые случаи использования таких библиотек, как Apollo или Relay, они не обязательно должны быть подходящим решением для взаимодействия с GraphQL API. Написание легкого клиента GraphQL можно упростить, используя ванильные функции JavaScript, такие как выборка, обещания и строковые шаблоны. В некоторых примерных сценариях может быть создание тонкого клиента с минимальными зависимостями или создание прототипа решения.
Давайте создадим простую форму, которая может взаимодействовать с GraphQL API и искать книги по названиям. Мы будем использовать только HTML5, CSS3 и ES6 JavaScript.
Во-первых, у меня есть сервер GraphQL, работающий на localhost:3000
, который возвращает список из пяти книг.
У меня простая HTML-страница с несколькими стилями
Теперь в нашем script.js
file мы выберем нашу форму и добавим прослушиватель событий.
const bookContainer = document.querySelector("#book-container"); const form = document.querySelector("#book-search"); const loadBooks = (ev) => { ev.preventDefault(); } form.addEventListener("submit", loadBooks)
Функция loadBooks
вызовет GraphQL API, используя встроенную выборку. Но перед этим давайте добавим функцию для построения запроса.
const getBooksQuery = keyword => `{ allBooks(filter: { q:"${keyword}"}) { author title url } }`;
Наша функция построителя запросов возвращает строку, которая будет искать названия книг по ключевым словам и возвращать список совпадений. Мы достигаем этого с помощью фильтра в запросе. Поскольку нас интересует только информация об авторе, название книги и URL-адрес для отображения списка книг, мы запрашиваем только эти поля с нашего сервера GraphQL. Таким образом GraphQL помогает нам получать только те данные, которые нам нужны.
Мы конкретизируем вызов сервера в обработчике отправки.
Сначала мы получаем значение ключевого слова поиска из формы ввода и создаем объект options
для отправки запроса POST. Мы передаем ключевое слово нашей функции построителя запросов и получаем строку запроса, которую необходимо передать обратно в GraphQL API. Мы добавляем renderBooks
метод, который покажет список книг в виде простых карточек.
Вот как это выглядит полностью.
Конечный результат:
Вот некоторые другие варианты использования, которые можно обработать:
- Использование фрагментов - у нас могут быть функции, возвращающие строки как фрагменты, и просто добавлять их в основной запрос по мере необходимости.
- Множественные запросы - каждый запрос можно записать как отдельную функцию.
Вот и все. Теперь вы можете взаимодействовать с сервером GraphQL и сохранять свой клиентский код как можно более минимальным с нулевыми зависимостями. Стройте потрясающие вещи!