
GraphQL на грани
Щит вокруг вашего приложения (уровень: новичок)
Примечание: данная статья представляет собой адаптацию моих слайдов к моему докладу на GraphQL Summit 2017. Вы также можете посмотреть видео здесь.
Я знаю, что эта статья называется «GraphQL on the Edge», но не волнуйтесь, я не говорю о передовом GraphQL. Скорее, я имею в виду то, как размещение GraphQL на самом краю вашего приложения обеспечивает защитный экран вокруг вашего приложения.

GraphQL защищает данные, входящие и исходящие из вашего приложения, независимо от того, откуда они поступают. Как вы увидите позже, этот общий интерфейс также упрощает тестирование ваших API и предоставляет унифицированный метод доступа к вашим данным.
Защитите свои данные с помощью скалярных типов
Независимо от того, откуда поступают данные пользователей, GraphQL может нормализовать общие типы данных, очищать от неправильных входных данных и проверять, соответствуют ли эти значения определенным критериям.
Например, если в ваше приложение поступают номера телефонов из множества разных мест, и вы хотите использовать эти номера телефонов в качестве ключа базы данных, вам понадобится общий формат. GraphQL может очень легко нормализовать каждое число до единого формата во всем приложении с помощью настраиваемого скалярного типа.

Вы также можете использовать эти настраиваемые скаляры для очистки входных данных, например, для защиты от атак XSS, или, возможно, для проверки того, что число меньше 100 или что целое число является нечетным.
Мы, как сообщество, должны решать эти проблемы с данными с помощью настраиваемого скалярного типа и повторно использовать их не только в наших приложениях, но и во многих различных приложениях. Примеры, которые я обсуждал, просты, но вы можете вообразить гораздо больше возможностей:

Упростите тестирование, используя запросы GraphQl
Я знаю, что тестирование - не всегда самая увлекательная или полезная часть создания программного обеспечения, но это более чем критически важно. Мне больше всего нравится в GraphQL то, что он упрощает тестирование. Когда мы тестируем наши API, мы не тестируем базу данных или код, мы тестируем, как кто-то собирается использовать наше приложение; тестирование на предмет предполагаемого поведения. Как говорит наш друг Дэн Абрамов (из основной команды React):

и это утверждение верно не только для библиотек. Это также важно для общедоступных API. Хорошая новость заключается в том, что GraphQL делает эту задачу простой и декларативной.

GraphQL имеет свои преимущества на всех этапах тестирования: юнит, интеграция, развертывание, регрессия. . . вы называете это. Для прошлого проекта моя команда даже написала модульные тесты для нашего общедоступного API без mocks и без данных с отслеживанием состояния, как вы можете видеть в этом пример:

Этот тест просто создает случайного пользователя и проверяет, что запрос "me" возвращает этого пользователя. Он также использует chai-graphql, который написал мой друг Стив. Вы должны это проверить 👍.
Те из вас, кто использует конвейеры непрерывного развертывания, могут использовать эти же запросы в команде, подобной cURL, для тестирования каждого развертывания, даже если это просто проверка работоспособности.

Это подводит меня к одному из самых больших преимуществ тестирования, которое дает GraphQL: возможность многократного использования. Просто сохраните ваши общие запросы (бонусные баллы, если они совпадают с теми, которые использует ваш клиент) в .graphql файле, импортируйте их в виде строк в свои модульные тесты и повторно используйте их для интеграции, развертывания и регрессионного тестирования.

В Intuit мы усовершенствовали нашу собственную структуру Karate, чтобы декларативно тестировать наши запросы GraphQL. Мы повторно используем статические запросы для тестирования множества различных вариантов использования. Это позволяет нам повторно использовать большой объем кода и просто сделать наши тесты функцией данных.

Всякий раз, когда нам нужно протестировать новые возможности, нам просто нужно добавить связанные поля в наши запросы и добавить образцы данных в наши полезные данные. Мы даже случайным образом генерируем множество этих данных для нечеткого тестирования наших API.
Безопасность типов, универсальный доступ к данным, тестирование на основе данных - это лишь несколько удивительных преимуществ, которые дает вам GraphQL. Если вы хотите поговорить о GraphQL, напишите напишите мне, напишите в Твиттер или напишите мне в Apollo GraphQL Slack (имя пользователя @fix)!

Вы можете спросить, как вы создали эти потрясающе выглядящие скриншоты кода? Ответ - Carbon, маленькое веб-приложение, которое сделали я и пара друзей. Вы должны это проверить 🙃
