Как создать GraphQL API с сервером Apollo и MongoDB

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

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

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

Что такое GraphQL API?

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

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

Как создать GraphQL API с сервером Apollo и MongoDB. Изображение 1

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

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

Настроить базу данных MongoDB

Для начала создайте базу данных MongoDB. Затем скопируйте строку URL-адреса подключения к базе данных MongoDB.

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

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

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

mkdir graphql-API-mongoDB компакт-диск graphql-API-mongoDB

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

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

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

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

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

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

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

Настроить сервер Аполлон

Откройте index.js и добавьте следующий код:

const { ApolloServer } = require(‘apollo-server’); const mongoose = require(‘мангуст’); const typeDefs = require(«./graphql/typeDefs»); const resolvers = require(«./graphql/resolvers»); const server = new ApolloServer({ typeDefs, resolvers }); const MONGO_URI = ‘mongodb://localhost:27017’; mongoose .connect(MONGO_URI, {useNewUrlParser: true, useUnifiedTopology: true, }) .then(() => { console.log(`Db Connected`); return server.listen({port: 5000}); }) . then((res) => { console.log(`Сервер работает по адресу ${res.url}`); }) .catch(err => { console.log(err.message); });

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

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

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

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

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

const {модель, схема} = require(‘мангуст’); const employeeSchema = new Schema({ имя: строка, отдел: строка, зарплата: строка, }); module.exports = модель («Сотрудник», Схема сотрудника);

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

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

В корне проекта создайте новую папку и назовите ее graphql. В эту папку добавьте 2 файла: typeDefs.js и resolvers.js.

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

const {gql} = require(«apollo-server»); const typeDefs = gql` type Employee { id: ID! имя: Строка отдел: Строка зарплата: Строка } input EmployeeInput { имя: Строка отдел: Строка зарплата: Строка } type Query { getEmployee(id: ID): Сотрудник #return Сотрудник по идентификатору сотрудников: (Сотрудник) #return массив Сотрудников } type Mutation { createEmployee(employeeInput: EmployeeInput): Employee updateEmployee(id: ID, employeeInput: EmployeeInput): Boolean deleteEmployee(id: ID): Boolean } `; модуль.экспорт = typeDefs;

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

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

Определить распознаватели для GraphQL API

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

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

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

const Employee= require(«./models/employeesModel»); // Резолверы GraphQL const resolvers = { Query: { employee: async () => { try { const employee = await Employee.find({}); вернуть сотрудников; } поймать (ошибка) { console.error(ошибка); выбросить новую ошибку («Не удалось получить сотрудников»); } }, getEmployee: async (parent, args) => { try { const employee = await Employee.findById(args.id); вернуть работника; } поймать (ошибка) { console.error(ошибка); выдать новую ошибку («Не удалось получить сотрудника по идентификатору»); } }, },

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

Мутация: { async createEmployee (_, { employeeInput: { имя, отдел, зарплата } }) { const newEmployee = новый сотрудник ({ имя: имя, отдел: отдел, зарплата: зарплата }); константный ответ = ожидание newEmployee.save(); console.log (новый сотрудник); return { id: response._id, .response._doc } }, async updateEmployee (_, {id, employeeInput: {имя, отдел, зарплата}}) { const updatedEmployee = await Employee.updateOne( { _id: id }, { имя, отдел, зарплата }); if (!updatedEmployee) { throw new Error(`Сотрудник с идентификатором: ${id} не найден`); } вернуть истину; // Возвращаем логическое значение, указывающее на успешное обновление }, async deleteEmployee (_, {id}) { const deleteEmployee = await Employee.deleteOne({ _id: id }); if (!deletedEmployee || deleteEmployee.deletedCount === 0) { throw new Error(`Сотрудник с идентификатором ${id} не найден`); } вернуть истину; // Возвращаем логическое значение, указывающее на успешное удаление }, }, }; module.exports = резольверы;

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

узел index.js

После установления соединения с базой данных этот сервер запустится на порту 5000.

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

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

Как создать GraphQL API с сервером Apollo и MongoDB. Изображение 2

Выше показано, как создать GraphQL API с помощью Apollo Server и MongoDB. Надеюсь, статья будет вам полезна.

Похожие записи

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *