GraphQL — это то, что следует из названия, способ организации или построения графика языка запросов. Когда разработчик отправляет запрос GraphQL в API, он получает именно то, что он просит. Это относительно новая идея в мире запросов API. GraphQL был выпущен Facebook в 2012 году, но только в последние пару лет он начал набирать огромную скорость и стал применяться среди разработчиков. Итак, с чего начать? Возьмем пример «Hello World». Это будет в файле сервера, таком как index.js.

const { graphql, buildSchema } = require('graphql');

const schema = buildSchema(`
  type Query {
    hello: String
  }
`);

const root = {
  hello: () => {
    return 'Hello world!';
  },
};

graphql(schema, '{ hello }', root).then((response) => {
  console.log(response);
});

Давайте разберем приведенный выше файл построчно.

Строка 1 отделяет graphql и buildSchema от требования «graphql», предоставляя вам доступ к этим функциям.

Строки 3–7 строят схему на языке схем GraphQL, определяя тип параметров, принимаемых для запроса к схеме. В этом примере ключ приветствия передается со значением типа string.

Строки 9–13 создают функцию разрешения для конечной точки, заданной для запроса. В этом случае функция разрешения возвращает строку «Hello World!».

Строки 15–17 запускают запрос «{hello}», а затем распечатывают ответ от асинхронной функции.

Если вы запустите node index.js в терминале, вы получите результат.

{ data: { hello: 'Hello world!' } }

На практике вы захотите запустить запрос GraphQl с сервера API, а не из командной строки. Давайте посмотрим, как мы можем работать в Express с сервером GraphQL.

var express = require('express');
var graphqlHTTP = require('express-graphql');
var { buildSchema } = require('graphql');

// Construct a schema, using GraphQL schema language
var schema = buildSchema(`
  type Query {
    hello: String
  }
`);

// The root provides a resolver function for each API endpoint
var root = {
  hello: () => {
    return 'Hello world!';
  },
};

var app = express();
app.use('/graphql', graphqlHTTP({
  schema: schema,
  rootValue: root,
  graphiql: true,
}));
app.listen(4000);
console.log('Running a GraphQL API server at localhost:3000/graphql')

Приведенный выше код, по сути, будет делать то же самое, что и раньше, только используя экспресс-маршрутизацию. В этом случае при отправке запроса на ‘/graphql’ модуль graphqlHTTP позволяет вручную выдавать запросы.

Давайте рассмотрим пример с использованием SWAPI API Facebook, API, который я использовал во время двухдневного проекта MVP, ориентированного на предоставление данных о релевантной информации StarWars.

//request
{
  hero {
    name
    height
    mass
  }
}
//response
{
  "hero": {
    "name": "Luke Skywalker",
    "height": 1.72,
    "mass": 77
  }
}

Моя любимая часть GraphQL заключается в том, что когда разработчик структурирует запрос API, он получает только те данные, которые он ЗАПРОСИЛ. В этом случае у нас есть доступ к конкретным характеристикам героя из звездных войн. В записи Люка Скайуокера есть гораздо больше, чем имя, рост и масса. Однако, если мне нужны только эти точки данных... это ВСЕ, что я получу. Иногда в большом API-запросе слишком много информации, я столкнулся с этой проблемой лично, переводя картинку в текст с помощью API Watson. GraphQL позволяет вернуть то, что вы хотите, в том формате, в котором вы его запросили... что также чрезвычайно полезно.

Все больше компаний начинают принимать запросы запросов GraphQL. На сайте GraphQL перечислены около 100 компаний, которые активно используют Graph для обработки своих запросов к API, наиболее заметными из которых являются Facebook, Github и Pinterest.

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