Давайте углубимся в AWS AppSync, полностью управляемый сервис GraphQL, который делает многое для небольшого.

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

Что такое AppSync?

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

Источники данных и преобразователи - это то, как AWS AppSync переводит запросы GraphQL и извлекает информацию из ваших ресурсов AWS. AWS AppSync поддерживает автоматическое выделение ресурсов и подключение к определенным типам источников данных. Вы можете использовать GraphQL API с существующими ресурсами AWS или создавать источники данных и преобразователи. - Учебное пособие по резольверам AWS AppSync

AppSync теперь также поддерживает следующие преобразователи

Эти преобразователи подключаются непосредственно к вашему API-интерфейсу AppSync и упрощают подключение к вашим внутренним ресурсам. Это красивая вещь.

Каковы преимущества?

AppSync сокращает время реализации за счет уменьшения количества кода, который вам нужно написать. С тех пор, как я начал разработку, у меня в ухе звенело звенело: «Лучший код - это код, который вы не пишете». С тех пор Serverless Guru принял это как мантру, о которой всегда нужно помнить при разработке. Отказавшись от написания кода для обработки простых запросов и изменений к базе данных и используя встроенные преобразователи, мы сокращаем время, затрачиваемое на планирование, отладку, разработку, и, главное, меньше времени проводим на собраниях.

Лучший код - это код, который вы не пишете

- Бессерверная мантра гуру

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

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

AppSync работает с существующей автоматизацией инфраструктуры AWS. Это означает, что вы можете воспользоваться сервисом, не прыгая в консоль AWS и настраивая все вручную с нуля. Вы можете создавать API-интерфейсы AppSync, используя Cloudformation и большинство других сторонних решений для автоматизации.

В Serverless Guru мы используем Serverless Framework для создания наших приложений для клиентов, а для создания любых API-интерфейсов AppSync мы используем плагин под названием Serverless AppSync Plugin.

За AppSync стоит GraphQL, а GraphQL - мощный

GraphQL предоставляет нам подписки для общения в реальном времени, самодокументирующиеся API, встроенные запросы, обработку ошибок, и визуальный интерфейс (GraphiQL) API.

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

Как фронтенд-разработчик, работающий с GraphQL API, вы можете определять запросы GraphQL, как хотите. Это означает, что интерфейс может сказать: «Дайте мне каждую запись пользователя, но только их номера телефонов» и «Дайте мне каждую запись пользователя и все поля». Эти два оператора говорят GraphQL ограничить поля ответа, и нам не нужно было писать код в серверной части для этого 🔥.

Где REST API может упасть

Типичному REST API потребуется логика, которая принимает запрос клиента, форматирует запрос для базы данных, обращается к базе данных, затем форматирует ответ базы данных и, наконец, отвечает клиенту.

В этом традиционном потоке мы сразу видим множество мест, которые потребуют исследования, планирования, общения, разработки, отладка, и тестирование. Каждая из этих областей может значительно увеличить срок доставки.

Упреждающий выбор решений, ограничивающих вашу общую площадь, - отличный способ направить пистолет подальше от вашей ноги и сэкономить на поездках в больницу.

В Serverless Guru одна из основных областей консультирования, которую мы предлагаем клиентам, - это работа с их существующими приложениями и работа в рамках существующей команды. Мы увидели множество разногласий по поводу того, как создавать API, как расширять API, где что-то выходит из-под контроля и как ограничить хаос.

У нас также была возможность проанализировать различные подходы к реализации, и мы обнаружили, что большая часть разработки API выполняется для обработки простых операций CRUD (создание, чтение, обновление, удаление). То, что AppSync упрощает.

Где AppSync падает

У AppSync много плюсов, о которых я довольно подробно упоминал выше. Однако давайте разберемся, в чем это может быть сложнее, чем с обычным REST API.

Изучите GraphQL. Когда вы переходите к GraphQL, не имея опыта создания REST API, вам нужно будет изучить внутреннюю работу GraphQL. Это может быть неплохой подъемник.

Изучите AppSync. Изучив GraphQL, вам нужно будет узнать, где заканчивается GraphQL и начинается AppSync. Это может занять некоторое время, чтобы понять. Как и все остальное, начните с малого и увеличивайте масштабы.

Изучите вспомогательные службы. После того, как вы освоите GraphQL и начнете выполнять базовые операции с помощью AppSync, вы захотите запустить его и изучить такие службы, как Cognito, DynamoDB, Aurora. Бессерверный »и Лямбда . Эти сервисы полностью управляются AWS и обрабатывают аутентификацию, NoSQL или SQL, а также вычисления. Позволяя вам разогнать ваше приложение.

Меньше контроля. Когда вы готовите на огне и действительно начинаете добиваться успехов, вы можете попасть в ловушку того, что не понимаете VTL (язык шаблонов скорости), с помощью которого AppSync взаимодействует с преобразователями. Затем, когда что-то сломается, у вас могут возникнуть проблемы с поиском первопричины. Из-за передачи обслуживания между запросом клиента к источникам и преобразователям данных GraphQL и AppSync.

Как облачная консалтинговая компания

Serverless Guru предоставляет консультации по разработке приложений клиентам, которые пытаются проникнуть в облачное или бессерверное пространство. А также клиенты, которые пытаются оптимизировать свою существующую инфраструктуру уже в облаке.

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

Как AppSync подключается к другим сервисам AWS

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

Для наших целей мы собираемся использовать полностью управляемую базу данных NoSQL AWS DynamoDB в качестве преобразователя и источника данных. Когда нашему приложению потребуется выполнить операции CRUD (создание, чтение, обновление, удаление), произойдет следующее:

  • Фронтенд делает HTTP-запрос к нашему AppSync API.
  • AppSync использует нашу схему GraphQL для проверки запроса.
  • AppSync использует наш шаблон сопоставления запросов для сопоставления запроса с нашим источником данных.
  • AppSync использует наш шаблон сопоставления ответов для сопоставления ответа из нашего источника данных.
  • Frontend получает HTTP-ответ от нашего AppSync API.

Хорошо, давайте перейдем к шаблонам сопоставления, которые заменяют серверные или облачные функции, которые обычно обрабатывают это взаимодействие.

Запросить шаблон сопоставления

Ниже приведен простой шаблон сопоставления запросов, который будет ожидать в запросе id, а затем запрашивать DynamoDB с помощью операции GetItem.

{
  "version": "2017-02-28",
  "operation": "GetItem",
  "key": {
    "id": $util.dynamodb.toDynamoDBJson($ctx.args.id)
  }
}

Шаблон сопоставления ответов

Ниже приведен простой шаблон сопоставления ответов, который просто отвечает результатом запроса и даже превращает ответ базы данных в JSON. Все в одной строке.

$util.toJson($ctx.result)

Повторяю, это все, что нам нужно. Больше нам ничего не нужно. Нет сервера или облачной функции. У нас нет внутреннего кода, чтобы это работало. Мы просто сообщаем AWS AppSync, если кто-то запрашивает нашу функцию запроса GraphQL, используя связанный шаблон сопоставления запросов и шаблон сопоставления ответов! Бум. Мы только что запросили базу данных без серверной логики.

Если вы все еще со мной, давайте перейдем к диаграмме, созданной AWS, под названием Создание бессерверного приложения для чата в реальном времени.

Разрушение архитектуры ChatQL

На этой диаграмме показан бессерверный способ реализации приложения реального времени. Приложение не обязательно должно быть чат-приложением. Мы можем повторно использовать эти знания для любых серверных приложений, будь то веб, мобильные устройства, настольные компьютеры и т. Д.

На диаграмме выше мы обозначили буквы от A до I, где каждая буква представляет собой отдельный компонент, который стоит обсудить.

A - пользователь входит в наше приложение и делает запрос к нашему AppSync API.

B - Cognito - это полностью управляемая служба аутентификации, которая позволяет пользователям нашего приложения войти в систему и получить токен JWT. Затем токен JWT передается в наш API-интерфейс AppSync. Если JWT отсутствует или недействителен, запрос не выполняется.

C - запросы и мутации GraphQL - это термины, которые GraphQL использует для описания операций CRUD. Запрос GET будет запросом, а POST / PUT / DELETE будет мутацией.

D - AppSync - это мозг, который получает запрос, проверяет его, передает запрос преобразователю и обрабатывает ответ обратно клиенту.

E - Источники данных AppSyn - это ресурсы (например, DynamoDB), прикрепленные к определенному преобразователю.

F - DynamoDB - это наша база данных NoSQL, которая подключается непосредственно к AppSync и позволяет нам выполнять операции CRUD без какого-либо серверного кода.

G - преобразователи AppSync позволяют нам подключать запрос или изменение GraphQL к набору шаблонов сопоставления запросов и ответов, которые, в свою очередь, подключаются к источнику данных AppSync.

H - Схема GraphQL определяет наши запросы и изменения API. В запросе схема GraphQL определяет поля, которые могут быть отправлены, и типы данных этих полей (например, строка, объект, число). В ответе схема GraphQL определяет поля, которые могут быть возвращены, она может быть ограничена до нескольких полей или всех полей. Затем интерфейс может выбрать, сколько полей им нужно для этого запроса.

I - Подписки GraphQL позволяют создавать приложения в реальном времени, которые отслеживают обновления и автоматически запускаются, если эти условия выполняются.

Serverless Guru, как правило, создает новые веб-приложения, аналогичные показанной на диаграмме выше, с небольшими отклонениями в зависимости от варианта использования и требований клиента.

Это был Райан Джонс из Serverless Guru, спасибо за чтение и удачи в вступлении в мир AppSync и GraphQL. 👋

Дополнительный контент:

Что делает Serverless Guru?

Serverless Guru помогает компаниям создавать масштабируемые и экономичные приложения в облаке. Мы помогаем обучать компании тому, как использовать IAC, бессерверные и облачные сервисы. Мы помогаем перенести существующие приложения в облако и оптимизировать существующие приложения в облаке, чтобы сделать их более рентабельными. Мы являемся партнером по бессерверной разработке и партнером-консультантом AWS.

Что мы упустили?

Когда вы оставляете свой ответ, обязательно оставьте комментарий ниже или напишите свой ответ @serverlessgurux в Twitter.

Райан Джонс

Основатель и генеральный директор - Serverless Guru

LinkedIn - @ryanjonesirl

Twitter - @ryanjonesirl

Спасибо за чтение 😃

Если вы хотите узнать больше о Serverless Guru, подпишитесь на нас в Medium, Twitter, Instagram, Facebook или LinkedIn!