NodeJS

Введение в создание API и приложений GraphQL в Node.js

Введение в создание API и приложений GraphQL в Node.js

Связь и передача данных между клиентской частью и серверной частью любого приложения происходит через API (интерфейс прикладного программирования). Существует множество различных типов API, используемых для взаимодействия между интерфейсными и серверными приложениями, такими как RESTful API, SOAP API, GraphQL API и т. Д. GraphQL API - относительно новая технология, и она намного быстрее, чем другие доступные типы API. Получение данных из базы данных с помощью GraphQL api намного быстрее, чем REST API. При использовании GraphQL API клиент может получать только необходимые данные вместо получения всех подробностей; поэтому GraphQL API работает быстрее, чем REST API.

Установка пакетов

Мы построим узел.js с использованием GraphQL API, поэтому нам нужно установить node.js и npm для этого перед запуском проекта.

[электронная почта защищена]: ~ $ sudo apt-get update -y
[электронная почта защищена]: ~ $ sudo apt-get install nodejs
[электронная почта защищена]: ~ $ sudo apt-get install npm

Настройка проекта

Мы будем использовать экспресс-фреймворк из узла.js для создания нашего приложения. Создайте каталог с именем 'graphql' и запустите проект.

[электронная почта защищена]: ~ $ mkdir graphql
[электронная почта защищена]: ~ $ cd graphql /
[электронная почта защищена]: ~ $ npm init -y

Настройка MongoDB

В нашем проекте GraphQL мы будем использовать MongoDB в качестве нашей базы данных. MongoDB - это база данных без схемы, которая хранит данные в виде пар ключей. Чтобы установить mongoDB, выполните следующие действия.

Импортируйте публичный ключ GPG для MongoDB.

[электронная почта защищена]: ~ $ wget -qO - https: // www.mongodb.org / static / pgp / server-4.4.по возрастанию | sudo apt-key добавить -


Создайте файл списка для mongodb.

[электронная почта защищена]: ~ $ echo "deb [arch = amd64, arm64] https: // репо.mongodb.org / apt / ubuntu bionic / mongodb-org / 4.4 мультивселенная "| sudo tee / etc / apt / sources.список.d / mongodb-org-4.4.список

Обновите локальные репозитории.

[электронная почта защищена]: ~ $ sudo apt-get update -y

Установите пакет mongodb.

[электронная почта защищена]: ~ $ sudo apt-get install -y mongodb-org

Запустить и включить mongod.услуга.

[электронная почта защищена]: ~ $ sudo systemctl start mongod.услуга
[электронная почта защищена]: ~ $ sudo systemctl enable mongod.услуга

Установка модулей npm

Для нашего приложения GraphQL нам нужно установить несколько пакетов npm. Установим корс, экспресс, боди-парсер, мангуста и т. Д.

[электронная почта защищена]: ~ $ cd graphql /
[электронная почта защищена]: ~ $ npm install cors express body-parser mongoose --save

Чтобы создать GraphQL api, нам нужно установить дополнительный пакет npm с именем apollo-server-express.'Этот пакет npm используется для запуска сервера graphQL со всеми узлами.js HTTP-фреймворки, такие как 'express.'

[электронная почта защищена]: ~ $ npm install apollo-server-express --save

Определение схемы MongoDB

Теперь у нас есть среда, настроенная для нашего приложения GraphQL в Node.js, и пора определить схему для нашего приложения. Создать файл 'models / student.js 'в корневом каталоге проекта.

// определение схемы ученика
const mongoose = require ('мангуст');
const studentSchema = новый мангуст.Схема (
название:
тип: String,
требуется: правда
,
класс:
тип: Число,
требуется: правда
,
главный:
тип: String,
требуется: правда

,
отметки времени: истина
);
const Студент = мангуст.модель ('Студент', studentSchema);
модуль.export = Student, studentSchema

В указанной выше схеме у каждого студента должно быть имя, класс и специальность.

Создание GraphQL API

После создания схемы Student мы приступим к созданию GraphQL API. Создать схему.js 'для записи параметров GraphQL. В GraphQL API используются два параметра: типы и преобразователи. В «типах» мы укажем нашу схему, запросы (e.грамм., Выполнение запросов GET) и мутаций (e.грамм., Выполнение запросов UPDATE или DELETE) к указанной схеме. Мы напишем различные методы, определенные в 'types', чтобы связать запросы и мутации с базой данных в 'resolvers.'

// импортируем схему и модуль
const gql = требуется ('apollo-server-express');
const Student = require ('./ модели / студент ').Ученик;
// Определение схемы, запроса и типа мутации
const typeDefs = gql '
type Student
я сделал!,
имя: Строка!,
класс: Int!,
майор: Строка!

type Query
getStudents: [Студент],
getStudentById (id: ID!): Ученик

type Mutation
addStudent (имя: String!, класс: Int!, майор: Строка! ): Ученик
updateStudent (имя: String!, класс: Int!, майор: Строка! ): Ученик
deleteStudent (id: ID! ): Ученик
'
// Определение резольверов
const resolvers =
Запрос:
getStudents: (родитель, аргументы) =>
вернуться Студент.найти();
,
getStudentById: (родительский, аргументы) =>
вернуться Студент.findById (аргументы.я бы);

,
Мутация:
addStudent: (parent, args) =>
let student = new Student (
имя: аргументы.название,
класс: аргументы.класс,
major: args.главный
);
вернувшийся студент.спасти();
,
updateStudent: (родитель, аргументы) =>
если(!аргументы.id) return;
вернуться Студент.findOneAndUpdate (
_id: args.я бы
,

$ set:
имя: аргументы.название,
класс: аргументы.класс,
major: args.главный

,
new: true, (err, Student) =>
if (err)
приставка.журнал (ошибка);
еще ;
)



модуль.export =
typeDefs,
резолверы

Создание сервера API GraphQL

Теперь мы почти закончили создание приложения GraphQL. Остался единственный шаг - создать сервер. Создайте файл с именем 'app.js 'для настройки параметров сервера.

// импортируем необходимые пакеты
const express = require ('экспресс');
const mongoose = require ('мангуст');
const bodyParser = require ('body-parser');
const cors = require ('cors');
const ApolloServer = требуется ('apollo-server-express');
// импортируем схему
const typeDefs, resolvers = require ('./ схема ');
// подключаемся к MongoDB
const url = «mongodb: // 127.0.0.1: 27017 / студенты »;
const connect = мангуст.подключить (URL, useNewUrlParser: true);
соединять.тогда ((db) =>
приставка.log («Соединение успешно»);
, (err) =>
приставка.журнал (ошибка);
);
// создаем сервер
const server = новый ApolloServer (
typeDefs: typeDefs,
резолверы: резолверы
);
константное приложение = экспресс ();
приложение.использовать (bodyParser.json ());
приложение.используйте ('*', cors ());
сервер.applyMiddleware (приложение);
приложение.слушай (8000, () =>

приставка.log ('прослушивание 8000');
)

Тестирование GraphQL API

У нас есть наш сервер graphQL, работающий на порту 8000, и пришло время протестировать GraphQL API. Откройте веб-страницу GraphQL в браузере, посетив следующий URL-адрес.

http: // локальный: 8000 / graphql

И откроется следующая веб-страница.


Добавить студента в базу данных с помощью API-интерфейса graphQL.


Точно так же добавьте больше студентов, а после добавления студента получите всех студентов с помощью GraphQL API.


Запишите идентификатор любого из студентов и получите конкретного студента, используя его идентификатор.

Заключение

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

Бесплатные движки с открытым исходным кодом для разработки игр для Linux
В этой статье будет рассмотрен список бесплатных игровых движков с открытым исходным кодом, которые можно использовать для разработки 2D- и 3D-игр в L...
Shadow of the Tomb Raider для Linux Учебное пособие
Shadow of the Tomb Raider - двенадцатое дополнение к серии Tomb Raider - франшизе приключенческой игры, созданной Eidos Montreal. Игра была очень хоро...
Как увеличить FPS в Linux?
FPS означает Кадров в секунду. Задача FPS - измерить частоту кадров при воспроизведении видео или во время игры. Проще говоря, количество непрерывных ...