GraphQL предлагает гибкую альтернативу классическому подходу REST при создании API.

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

Архитектура RESTful является наиболее популярным подходом, но у нее есть один существенный недостаток: структура фиксированной конечной точки, которая возвращает заранее определенные данные. Такой дизайн может привести к неэффективному общению.

Напротив, GraphQL — альтернатива REST — предлагает большую гибкость, позволяя вам запрашивать только те данные, которые вам нужны.

Что такое API GraphQL?

ГрафQL — это язык запросов, который вы можете использовать для написания серверных API (интерфейсов прикладного программирования). В отличие от REST API, которые имеют несколько конечных точек для разных данных, API-интерфейсы GraphQL имеют только одну точку входа.

instagram viewer

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

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

Вот упрощенная разбивка основных компонентов архитектуры GraphQL API:

  1. Схема. Схема — это описание типов данных и операций, которые предоставляет API. По сути, схема определяет структуру доступных данных, а также тип запросов и мутаций, которые клиент может выполнять для изменения данных.
  2. Запросы: клиенты используют запросы для извлечения данных из базы данных, указывая структуру требуемых данных. Более того, они могут вкладывать несколько запросов в один HTTP-запрос для получения связанных данных с нескольких конечных точек.
  3. Мутации: Мутации — это операции, используемые для изменения данных в базе данных. Клиенты могут отправлять запросы на изменение для создания, обновления или удаления данных.

Настройка базы данных MongoDB

Для начала, создать базу данных MongoDB. Кроме того, вы можете бесплатно настроить кластер MongoDB в облаке.После настройки базы данных скопируйте строку URI подключения к базе данных MongoDB.

Вы можете найти код этого проекта в его Репозиторий GitHub.

Создайте сервер Аполлона

Сервер Аполлона — это популярная реализация сервера GraphQL, которая позволит вам создавать API-интерфейсы GraphQL в средах JavaScript, включая Node.js, Express и другие.

Создайте каталог для нового проекта и CD внутрь:

mkdir graphql-API-mongoDB
cd graphql-API-mongoDB

Затем инициализируйте новый проект Node.js.

инициализация npm --да

Эта команда создает пакет.json файл.

Установите необходимые зависимости

Выполните следующую команду, чтобы установить пакеты.

npm установить apollo-сервер graphql мангуста

Наконец, создайте index.js файл в корневом каталоге вашего проекта.

Настройте сервер Apollo

Открыть index.js и добавьте код ниже:

константа {АполлонСервер} = требовать('apollo-сервер');
константа мангуст = требовать('мангуста');
константа typeDefs = требовать("./graphql/typeDefs");
константа резольверы = требовать("./graphql/резольверы");

константа сервер = новый АполлонСервер({
типDefs,
резольверы
});

константа МОНГО_URI = 'mongodb://локальный хост: 27017';

мангуста
.подключить (MONGO_URI, {
использовать ньюурлпарсер: истинный,
использовать унифицированную топологию: истинный,
})
.затем(() => {
консоль.бревно(`БД подключена`);
возвращаться сервер.слушай({ порт: 5000 });
})
.затем((разрешение) => {
консоль.бревно(`Сервер работает на ${рез.url}`);
})
.ловить(ошибаться => {
консоль.log (сообщение об ошибке);
});

Этот код инициализирует локальный сервер GraphQL с помощью библиотеки Apollo Server. Затем он устанавливает соединение с базой данных MongoDB с заданным URI соединения.

Обратите внимание, как код передает два аргумента новому экземпляру ApolloServer: typeDefs и резолверы. Они определяют типы данных и операции, которые может выполнять GraphQL API.

После настройки подключения к базе данных MongoDB сервер начинает прослушивать порт 5000.

Определите модель данных

Создайте новую папку в корневом каталоге папки вашего проекта и назовите ее модели. В этой папке создайте новые имена файлов dataModel.js и добавьте в него следующий код:

константа {модель, схема} = требовать('мангуста');

константа схема сотрудника = новый Схема({
имя: Нить,
отделение: Нить,
зарплата: Нить,
});

модуль.экспорт = модель('Сотрудник', схема сотрудника);

Определить схему GraphQL

Схема GraphQL определяет структуру данных, которые вы можете запрашивать с помощью API GraphQL. Схема также описывает запросы и изменения, которые может выполнять API. Вы можете использовать запросы для получения данных и мутации для их изменения.

В корневом каталоге вашего проекта создайте новую папку и назовите ее графql. В эту папку добавьте два файла: typeDefs.js и разрешители.js

Добавьте приведенный ниже код в файл typeDefs.js:

константа {gql} = требовать("аполлон-сервер");

константа typeDefs = gql`
введите Сотрудник {
я сделал!
имя: Нить
отделение: Нить
зарплата: Нить
}
ввод СотрудникВвод {
имя: Нить
отделение: Нить
зарплата: Нить
}
введите запрос {
getEmployee (id: ID): Номер сотрудникавозвращаться Сотрудник по идентификатору
сотрудники: [Сотрудник] #возвращаться множество из Сотрудники
}
тип Мутация {
createEmployee (employeeInput: EmployeeInput): Сотрудник
updateEmployee (id: ID, сотрудникВвод: СотрудникВвод): логический
deleteEmployee (идентификатор: ID): логический
}
`;

модуль.exports = typeDefs;

Этот код выше использует gql Функция, предоставляемая пакетом apollo-server, для создания схемы GraphQL для данных Employee.

Схема состоит из четырех основных элементов: типы данных для информации о сотрудниках, типы ввода, запросы и изменения, которые может выполнять API.

Определите Resolvers для GraphQL API

Преобразователь — это функция GraphQL, которая определяет данные, которые будут передаваться, когда клиент отправляет запрос API для получения данных. По сути, его основная роль заключается в извлечении необходимых данных из указанного источника данных и возврате их клиенту.

Добавьте приведенный ниже код в разрешители.js файл в графql папка. В этом случае распознаватели указываются в объектах Query и Mutation.

Объект Query определяет два метода: сотрудники и getEmployee. Эти методы отвечают за извлечение данных о сотрудниках из базы данных по запросу клиента.

константа Сотрудник= требовать("../models/employeesModel");

// Резолверы GraphQL
константа резольверы = {
Запрос: {
сотрудники: асинхронный () => {
пытаться {
константа сотрудники = Ждите Сотрудник. найти ({});
возвращаться сотрудники;
} ловить (ошибка) {
консоль.error (ошибка);
бросатьновыйОшибка(«Не удалось получить сотрудников»);
}
},
получитьEmployee: асинхронный (родитель, аргументы) => {
пытаться {
константа сотрудник = Ждите Сотрудник.findById (args.id);
возвращаться сотрудник;
} ловить (ошибка) {
консоль.error (ошибка);
бросатьновыйОшибка(«Не удалось получить сотрудника по идентификатору»);
}
},
},

Объект Mutation имеет три метода: создатьEmployee, updateEmployee, и deleteEmployee. Эти методы вносят изменения в данные, хранящиеся в базе данных MongoDB.

 Мутация: {
асинхронный createEmployee(_, { сотрудникВвод: {имя, отдел, зарплата} }) {
константа новыйСотрудник = новый Сотрудник({
имя: имя,
отдел: отдел,
зарплата: зарплата
});

константа ответ = Ждите новыйСотрудник.сохранить();
консоль.log (новый сотрудник);

возвращаться {
идентификатор: ответ._id,
...ответ._doc
}
},

асинхронный updateEmployee(_, {id, сотрудникВвод: {имя, отдел, зарплата}}) {
константа обновленоСотрудник = Ждите Сотрудник.updateOne(
{ _идентификатор: идентификатор },
{имя, отдел, зарплата}
);

если (! обновленный сотрудник) {
бросатьновыйОшибка(`Сотрудник с идентификатором: ${идентификатор} не найдено`);
}

возвращатьсяистинный; // Возвращаем логическое значение, указывающее на успешное обновление
},

асинхронный deleteEmployee (_, {id}) {
константа удаленный сотрудник = Ждите Сотрудник.deleteOne({ _идентификатор: идентификатор });

если (!deletedEmployee || deleteEmployee.deletedCount 0) {
бросатьновыйОшибка(`Сотрудник с удостоверением личности ${идентификатор} не найдено`);
}

возвращатьсяистинный; // Возвращаем логическое значение, указывающее на успешное удаление
},
 },
};

модуль.exports = резольверы;

Наконец, запустите эту команду, чтобы раскрутить сервер:

узел index.js

Как только он установит соединение с базой данных, сервер запустится на порту 5000.

Вы можете протестировать функциональность GraphQL API, выполнив HTTP-запросы из игровой площадки GraphQL в своем браузере.

Например, вы можете использовать создатьEmployee мутация для добавления новых данных о сотрудниках в базу данных MongoDB.

Популярность GraphQL в сообществе разработчиков

GraphQL набирает популярность в сообществе разработчиков как альтернативный подход к разработке API для популярной архитектуры REST.

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