Весной 2020 года Райан Даль выпустил Deno 1.0.0. После релиза Deno вызвал большой интерес в веб-сообществе. Так что же такое Дено? Deno - это то, что Райан, оглядываясь назад, хотел бы сделать при создании Node. Были сделаны улучшения в отношении безопасности, управления пакетами и поддержки TypeScript, и это лишь некоторые из них.

Далее к теме статьи. GraphQL в Deno.

Весь наш импорт поступает из Oak, который является фреймворком веб-сервера для Deno. Те, кто знаком с Express в Node, будут чувствовать себя в Oak как дома.

Мы создаем нашу схему GraphQL, вызывая функцию gql со строкой шаблона, описывающей схему. Схема определяет динозавра с именем и изображением. Обратите внимание, что изображение - это просто строка, поскольку в нем используется смайлик. В схеме указано 2 запроса. Один для поиска всех динозавров и один для поиска определенного динозавра. Наконец, схема определяет мутацию, которая добавляет одного динозавра.

В этом руководстве мы сохраняем наши данные в переменной. Поэтому перезапуск сервера приведет к сбросу данных. Но он хорошо работает для опробования Oak и GraphQL.

Далее мы реализуем наши три резолвера. В наших преобразователях выполняется поиск, возврат или расширение массива динозавров. В последнем случае вместо возврата данных мы возвращаем логическое значение для указания. См. В схеме ResolveType.

Все, что осталось, это запустить наш сервер. Мы делаем это, сначала передавая нашу схему (переменную типов) и наш преобразователь в функцию Oaks applyGraphQL, и из этого вызова мы получаем обратно GraphQLService. Мы передаем это нашему экземпляру приложения Oak, как показано в примере.

Наконец, мы начинаем прослушивать запросы GraphQL POST на порту 8080!

Теперь мы можем выполнить POST в / graphql на порту 8080 с полезными данными:

Вот и все!
Удачного взлома и не стесняйтесь обращаться за вопросами или комментариями.

Видео этого точного руководства:
https://www.youtube.com/watch?v=Rc_HhL55JZM

Код: https://gist.github.com/danba340/ce04651f8fc14bcb974fb4b940d95bdd

Twitter: https://twitter.com/BarelyDaniel