Блог

Единый endpoint для любого типа данных

Использование связки GraphQL + Django

Срок реализации – 60 дней.

Задача

Разработка MVP проекта для недвижимости с применением GraphQL

Стэк

Apollo GraphQL + Django

Решение

Apollo GraphQL

Классический REST API подразумевает под собой большое количество endpoint’ов, на которых мы запрашиваем те или иные данные (get_user, get_list_user, get_object и т.д.). Приходится постоянно общаться с backend’ом на предмет понимания - какую структуру запросить, post, get, и т.п.
Технология GraphQL сокращает всю эту бюрократию до одного запроса (вернее, двух): query (получение) и mutation (изменение). Парадигма работы с данными на фронте ломается полностью. Теперь на все имеющиеся вопросы есть только одно место, куда нужно обращаться за всеми данными. К запросу необходимо только добавить поля, которые ожидаются в ответе.
По признанию наших программистов, такой подход первые пару недель вызывал большое отторжение из-за своей нестандартности. Казалось, что это неудобно - в каждом компоненте на фронте нужно описывать список полей и сущностей, чтобы получить эти данные. Однако позднее удалось выявить пару библиотек, чтобы забирать с бэка схему данных в typescript. После подключения IDE теперь сама подсказывала, что можно запросить и получить, и необходимость знать наизусть структуру данных в бэке отпала.
При всей кажущейся сложности, Apollo-клиент позволяет широко пользоваться его преимуществами. Во-первых, кешировать данные: если они не обновились на сервере, он покажет уже сохраненную версию и не будет выполнять лишний запрос на бэкенд. Во-вторых, в рамках функционального программирования можно очень просто эти данные получать. Нет необходимости организовывать отдельный store для actions и reducers (как ранее в react/redux). С помощью apollo-клиента с описанным запросом в компоненте можно указать необходимость подставить данные во view - и вуаля.
Мы предполагаем, что не столь широкое применение GraphQL в отрасли может быть связано с повышенным порогом входа в этот язык, а также нюансами с обеспечением безопасности. Теоретически, при неверной организации политики безопасности, злоумышленник может получить от бэкенда всю структуру данных проекта буквально одним запросом. Дальнейшая практика покажет еще не изученные нами возможности GraphQL. Сейчас появилось множество инструментов для облегчения работы в такой связке бэка и фронта.
Backend Frontend JavaScript TypeScript FinTech