Поиск…


замечания

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

Когда следует использовать GraphQL?

GraphQL предназначен для API-интерфейсов, выходящих за пределы HTTP, для любого вида приложений, но он наиболее эффективен, когда данные нормализуются с помощью очень взаимосвязанных коллекций | Таблицы | Узлы. Язык запросов GraphQL (GQL) предназначен для проецирования взаимосвязанных данных очень интуитивным и гибким способом.

Реализации

Сам GraphQL является Spec и реализован рядом различных языков программирования. Это самые популярные поддерживаемые языки

Библиотеки клиентов

Выполнение запросов с клиентской стороны может быть выполнено с помощью любого HTTP-клиента, но библиотеки на стороне клиента могут быть очень полезными.

Инструменты Dev

  • graphiql / ɡrafək (ə) l / - Интерактивная встроенная графическая среда GraphQL.
  • libgraphqlparser - парсер языка запросов GraphQL в C ++ с API-интерфейсами C и C ++.
  • GraphQL Language Service - интерфейс для создания языковых служб GraphQL для IDE (диагностика, автозаполнение и т. Д.).

Версии

Версия Дата выхода
v0.5.0 2016-04-08
v0.6.0 2016-05-10
v0.6.1 2016-07-07
v0.6.2 2016-07-21
v0.7.0 2016-08-26
v0.7.1 2016-09-29
v0.7.2 2016-10-10
v0.8.0 2016-11-10
v0.8.1 2016-11-11
v0.8.2 2016-11-16

Установка и внедрение сервера

GraphQL.js

GraphQL.js - эталонная реализация JavaScript для GraphQL. Вы можете установить его через npm:

  • Инициализируйте npm в своем проекте, если вы еще этого не сделали: npm init
  • Установите GraphQL.js из npm: npm install --save graphql

Пример сервера

var { graphql, 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!';
  },
};

// Run the GraphQL query '{ hello }' and print out the response
graphql(schema, '{ hello }', root).then((response) => {
  console.log(response);
});

Альтернативные серверные альтернативы

Язык запросов GraphQL (GQL)

Вместо определения конечных точек URL для каждого ресурса данных в GraphQL вы определяете одну конечную точку, которая принимает запросы GraphQL. В отличие от традиционных языков запросов базы данных, язык запросов (GQL) GraphQL представляет собой проекцию данных, возвращаемых запросом на уровень корня. Схема GraphQL будет определять модели данных и запросы и мутации корневого уровня. GQL выполняет эти запросы и определяет, какие данные должны возвращаться.

Запрос для всех титулов фильмов из схемы «Звездных войн»

Запрос данных Star Wars для allFilms с проекцией только заголовка Запрос GraphiQL

Запрос жителям планеты на фильм Звездных войн «Новая надежда»

введите описание изображения здесь Запрос GraphiQL

Обратите внимание на то, как корневой запрос film() принимает параметр id в фильме «Новая надежда», а проекция из GQL возвращает название, планеты, связанные с фильмом, а затем резидентные имена планет. Просмотрите сайт Star Wars GraphiQL, чтобы экспериментировать с запросами в GraphQL.

Определение схемы

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

Тип объекта схемы

Тип Person имеет два поля, один - стандартный тип Scalar, а другой - отношение к списку других типов Person, которые являются «друзьями». Связывание других типов - вот что делает GraphQL настолько мощным. Теперь в языке запросов GUQL (GQL) клиент может перемещать график друзей без какого-либо дополнительного кода или расширенного запроса.

type Person {
  id: ID
  name: String
  friends: [Person]
}

Запрос схемы

Запрос person ищет одного человека по его идентификатору. Это точка входа в ваши данные для клиентов, использующих GQL.

type Query {   
  person(id: ID!): Person
}

Друзья Друга друга друга друга друга друга друга друга

Теперь, когда у нас есть тип Person и запрос root для человека, мы можем найти человека и столько же разлуки, что мы хотим от сети друзей человека.

query {
  person(id: 'nick'){
    id
    name
    friends{
      id
      name
      friends{
        id
        name
        friends{
          id
          name
        }
      }
    }
  }
}


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow