Мы начинаем новую серию статей о последней версии GraphQL. Здесь мы создали приложение с React в интерфейсе и GraphQL вместо REST API.

Эта серия была вдохновлена ​​этим уроком youtube от freecodecamp. Мы будем использовать следующие технологии.

Начнем с нашего приложения. Откройте свой терминал и создайте в нем каталог response-graphql, а затем каталог server. В каталоге сервера выполните npm init, чтобы создать файл package.json. Нажмите Enter для всего, чтобы выбрать вариант по умолчанию.

Далее мы установим экспресс.

Теперь откройте редактор кода и создайте новый файл app.js в каталоге server. Содержание того же ниже.

const express = require('express');

const app = express();

app.listen(4000, () => {
    console.log('Listening at port 4000');
});

После этого перейдите в свой терминал и запустите сервер с помощью узла app.js.

Но мы не будем запускать экспресс-сервер по узлам, а вместо этого будем запускать пакет npm под названием nodemon. Этот пакет отслеживает любые изменения в коде нашего сервера и перезапускает сервер.

Мы снова запустим наш сервер с помощью nodemon app.js

Затем мы установим еще два пакета graphql и express-graphql.

Теперь создайте новую папку schema внутри сервера, а затем новый файл schema.js внутри нее.

В schema.js поместите приведенный ниже код. Здесь мы сначала определяем тип BookType, а затем запрос под названием RootQuery для его запроса.

const graphql = require('graphql');

const { GraphQLObjectType, GraphQLString, GraphQLSchema } = graphql;

const BookType = new GraphQLObjectType({
    name: 'Book',
    fields: ( ) => ({
        id: { type: GraphQLString },
        name: { type: GraphQLString },
        genre: { type: GraphQLString }
    })
});

const RootQuery = new GraphQLObjectType({
    name: 'RootQueryType',
    fields: {
        book: {
            type: BookType,
            args: { id: { type: GraphQLString } },
            resolve(parent, args){
                // code from Database

            }
        }
    }
});

module.exports = new GraphQLSchema({
    query: RootQuery
});

Теперь мы будем использовать то же самое в нашем app.js

const express = require('express');
const graphqlHTTP = require('express-graphql');
const schema = require('./schema/schema');

const app = express();

app.use('/graphql', graphqlHTTP({
    schema
}));

app.listen(4000, () => {
    console.log('Listening at port 4000');
});

Затем мы добавим фиктивные данные в наш schema.js, поскольку наша база данных еще не готова. А также внутри нашего решения мы будем использовать find для возврата книги, идентификатор которой был передан в качестве аргументов.

const graphql = require('graphql');

const { GraphQLObjectType, GraphQLString, GraphQLSchema } = graphql;

// Dummy data
var books = [
    { name: 'Name of the Wind', genre: 'Fantasy', id: '1' },
    { name: 'Two States', genre: 'Drama', id: '2' },
    { name: 'The Long Earth', genre: 'Sci-Fi', id: '3' },
];

const BookType = new GraphQLObjectType({
    name: 'Book',
    fields: ( ) => ({
        id: { type: GraphQLString },
        name: { type: GraphQLString },
        genre: { type: GraphQLString }
    })
});

const RootQuery = new GraphQLObjectType({
    name: 'RootQueryType',
    fields: {
        book: {
            type: BookType,
            args: { id: { type: GraphQLString } },
            resolve(parent, args){
                // code from Database - right now dummy data
                return books.find(item => item.id === args.id);

            }
        }
    }
});

module.exports = new GraphQLSchema({
    query: RootQuery
});

Затем мы воспользуемся замечательным инструментом graphiql, чтобы проверить наш запрос, поскольку наш интерфейс еще не готов. Нам нужно будет сначала настроить его в

const express = require('express');
const graphqlHTTP = require('express-graphql');
const schema = require('./schema/schema');

const app = express();

app.use('/graphql', graphqlHTTP({
    schema,
    graphiql: true
}));

app.listen(4000, () => {
    console.log('Listening at port 4000');
});

Затем перейдите по адресу http: // localhost: 4000 / graphql в браузере, и вы увидите инструмент graphiql.

Нажмите Документы в правом верхнем углу, и вы получите документацию по запросам, доступным для этого сервера.

Теперь мы можем запросить у сервера GraphQL книгу с идентификатором 2, и он вернет ее. Нам нужно обновить запрос в редакторе и нажать кнопку play.

То же самое для идентификатора 3, но не нужно указывать идентификатор в операторе возврата.

Если мы запросим несуществующий идентификатор, мы получим null

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

Часть-2 Вы можете найти здесь.