GraphQL - Схема

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

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

В этой главе мы используем сервер Apollo для выполнения запросов GraphQL. ВmakeExecutableSchema Функция в graphql-tools помогает связать схему и преобразователи.

Синтаксис функции makeExecutableSchema

В makeExecutableSchemaфункция принимает единственный аргумент {} типа Object. Синтаксис для использования этой функции приведен ниже -

import { makeExecutableSchema } from 'graphql-tools';

const jsSchema = makeExecutableSchema({
   typeDefs,
   resolvers, // optional
   logger, // optional
   allowUndefinedInResolve = false, // optional
   resolverValidationOptions = {}, // optional
   directiveResolvers = null, // optional
   schemaDirectives = null,  // optional
   parseOptions = {},  // optional
   inheritResolversFromInterfaces = false  // optional
});

Sr. No. Параметр и описание
1

typeDefs

Это обязательный аргумент. Он представляет запрос GraphQL в виде строки UTF-8.

2

Resolvers

Это необязательный аргумент (по умолчанию пустой объект). У этого есть функции, которые обрабатывают запрос.

3

logger

Это необязательный аргумент, и его можно использовать для вывода ошибок на консоль сервера.

4

parseOptions

Это необязательный аргумент, который позволяет настроить синтаксический анализ при указании typeDefs в виде строки.

5

allowUndefinedInResolve

Это верно по умолчанию. Если установлено значение false, ваши функции разрешения будут выдавать ошибки, если они возвращают значение undefined.

6

resolverValidationOptions

Это необязательный аргумент, он принимает объект с логическими свойствами.

7

inheritResolversFromInterfaces

Это необязательный аргумент, который принимает логический аргумент для проверки наследования объекта распознавателей.

Иллюстрация

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

Шаг 1 - Загрузите и установите необходимые зависимости для проекта

Создайте папку с именем schema-app. Измените свой каталог на schema-app из терминала. Затем выполните шаги с 3 по 5, описанные в главе «Настройка среды», чтобы завершить загрузку и установку.

Шаг 2 - Создайте схему

Добавить schema.graphql файл в папке проекта, schema-app и добавьте следующий код -

type Query {
   greeting:String
   students:[Student]
}

type Student {
   id:ID!
   firstName:String
   lastName:String
   password:String
   collegeId:String
}

Корнем схемы будет тип запроса. В запросе есть два поля - приветствие и студенты, которые возвращают строку и список студентов соответственно. Студент объявлен как объектный тип, поскольку он содержит несколько полей. Поле ID объявлено как не допускающее значения NULL.

Шаг 3 - Создайте резолвер

Создать файл resolvers.js в папке проекта и добавьте следующий код -

const db = require('./db')
const Query = {
   greeting:() => {
      return "hello from  TutorialsPoint !!!"
   },
   students:() => db.students.list()
}

module.exports = {Query}

Здесь приветствие и студенты - решатели, которые обрабатывают запрос. students resolver functionвозвращает список студентов из уровня доступа к данным. Чтобы получить доступ к функциям преобразователя вне модуля, объект запроса должен быть экспортирован с использованиемmodule.exports.

Шаг 4 - Запустите приложение

Создайте файл server.js и обратитесь к шагу 8 в главе «Настройка среды». Следующим шагом будет выполнение команды npm start в терминале. Сервер будет работать на 9000 порте. Здесь мы используем GraphiQL в качестве клиента для тестирования приложения. Откройте браузер и введите URL-адрес,http://localhost:9000/graphiql.

Введите в редакторе следующий запрос -

{
   greeting
   students {
      id
      firstName
      lastName
   }
}

Запрос отобразит вывод, как показано ниже -

Note- Мы можем заменить student.json вызовом RESTful API для получения данных о студентах или даже реальной базы данных, такой как MySQL или MongoDB. GraphQL становится тонкой оболочкой исходного уровня приложения для повышения производительности.