Удобные API с GraphQL

Когда мы пишем приложения, особенно веб, обычно мы получаем данные с API. Часто это будет REST API. REST — это красиво, но при разработке он начнет мешать, так как немного вьюшек можно нарисовать данными из одного ресурса, и обычно разработчик использует связанные данные из нескольких источников. Как правило, в такой ситуации в API добавляют разворот вложенных данных. Потом еще один. Потом еще пару параметров. А потом поверху всего этого накручивается возможность выбора датасета. В конечном итоге выходит толстенный эндпоинт, разработчик бекенда вас ненавидит, и в какой-то момент вы все равно будете вызывать несколько эндпоинтов со своего фронтенда.

Приложение усложняется и тормозит. Таким образом, любой проект с REST API вырождается в либо толстый и глючный бакенд, либо толстый и глючный фронтенд. А обычно и в то, и в то.

Но решение есть. В 2015 году Facebook представил GraphQL — новый подход к API, который они активно используют в продакшене. GraphQL — это стандарт из двух частей: язык для описания возможностей сервера и язык запросов к серверу на их основе. С помощью GraphQL можно одним запросом взять все данные, которые нужны вам для вьюшки. GraphQL-запрос проверяется на основе схемы и позволяет доставать только нужные (в том числе вложенные) данные. Если нужно что-то еще, достаточно добавить это в запрос, при этом не нужно беспокоить бакендера. В итоге запросы заточены под ваше приложение, а сервер — под доступные данные.

Кроме этого, с GraphQL очень удобно оборачивать и совмещать legacy API. Вместо того, чтобы переписывать весь свой старый Drupal магазин, можно поставить перед ним GraphQL Gateway и быстро сделать новое React Native приложение на его основе. GraphQL, а особенно его JS-имплементация graphql-js, позволяет делать API, независимые от источника, быстро и удобно.

В докладе я расскажу подробно про GraphQL, как с его помощью быстро и эффективно делать удобные API.

Mikhail Novikov, Reindex

Mikhail Novikov, Reindex

Я СТО в Reindex, мы делаем самый удобный GraphQL сервер для фронтенд разработчиков. До этого я делал консалтинг на React, строил роботов для сортировки мусора на Clojure и писал IM решения для телефонных операторов.