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 становится тонкой оболочкой исходного уровня приложения для повышения производительности.