使用JavaScript构建GraphQL API:Node.js逐步教程

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

GraphQL API с JavaScript: пошаговое руководство



GraphQL — это язык запросов для API, который позволяет клиентам запрашивать только те данные, которые им действительно нужны. В отличие от REST, где структура ответа фиксирована, GraphQL обеспечивает гибкость и контроль. В этом руководстве мы создадим простой GraphQL API на Node.js с использованием популярной библиотеки Apollo Server.



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



1. Настройка окружения и установка зависимостей



Прежде чем писать код, убедитесь, что у вас установлен Node.js (версия 14 или выше). Создайте новую папку для проекта и инициализируйте npm:



mkdir graphql-tutorialcd graphql-tutorialnpm init -y


Теперь установите необходимые пакеты. Основные зависимости: express (веб-фреймворк), @apollo/server (сервер GraphQL), graphql (ядро GraphQL) и cors (для кросс-доменных запросов).



npm install express @apollo/server graphql cors


Создайте файл index.js — в нем будет весь код сервера.



2. Создание схемы GraphQL и резолверов



Схема — это описание типов данных и операций (запросы, мутации). Резолверы — функции, которые возвращают данные для каждого поля.



Добавим простую модель данных — список книг. Каждая книга имеет id, title, author и year.



Откройте index.js и напишите следующий код:



const { ApolloServer } = require('@apollo/server');const { startStandaloneServer } = require('@apollo/server/standalone');const express = require('express');const cors = require('cors');

// Имитация базы данныхlet books = [ { id: '1', title: 'Война и мир', author: 'Лев Толстой', year: 1869 }, { id: '2', title: 'Преступление и наказание', author: 'Федор Достоевский', year: 1866 }, { id: '3', title: 'Мастер и Маргарита', author: 'Михаил Булгаков', year: 1967 }];

// Определение схемы (Type Definitions)const typeDefs = `#graphql type Book { id: ID! title: String! author: String! year: Int }

type Query { books: [Book] book(id: ID!): Book }

type Mutation { addBook(title: String!, author: String!, year: Int): Book deleteBook(id: ID!): Book }`;

// Резолверыconst resolvers = { Query: { books: () => books, book: (parent, args) => books.find(book => book.id === args.id) }, Mutation: { addBook: (parent, args) => { const newBook = { id: String(books.length + 1), title: args.title, author: args.author, year: args.year }; books.push(newBook); return newBook; }, deleteBook: (parent, args) => { const index = books.findIndex(book => book.id === args.id); if (index === -1) return null; const deletedBook = books.splice(index, 1)[0]; return deletedBook; } }};

// Запуск сервераasync function startServer() { const app = express(); app.use(cors());

const server = new ApolloServer({ typeDefs, resolvers, });

const { url } = await startStandaloneServer(server, { listen: { port: 4000 }, });

console.log(`Сервер GraphQL запущен на ${url}`);}

startServer();


Разберем код:

  • typeDefs — определяет типы Book, Query (запросы) и Mutation (изменения).
  • resolvers — содержит функции для каждого поля. Для books возвращается весь массив, для book — фильтрация по id.
  • startStandaloneServer — запускает сервер на порту 4000.


3. Тестирование API через GraphQL Playground

博客

书籍推荐