Перейти к основному содержимому

GraphQL-схема

GraphQL-схема — набор GraphQL-типов, созданных на основе компонентов модели данных проекта.

После публикации модели данных сервис доступа к хранилищу данных storagedata формирует GraphQL-схему согласно сущностям, заданным в модели данных проекта.

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

Структурные GraphQL-типы

Структурными GraphQL-типами являются следующие:

  • Класс: описывает структуру с атрибутами класса модели данных, включая наследуемые атрибуты, а также служебные атрибуты _class_name и _type_discr.

    Имя этого GraphQL-типа формируется согласно шаблону <псевдоним проекта>_<псевдоним класса>. Например, если в модели данных проекта с псевдонимом Stock создан класс с псевдонимом Product, GraphQL-тип класс будет иметь имя Stock_Product.

    Атрибуты _class_name и _type_discr идентифицируют класс модели данных при использовании цепочек наследования и позволяют однозначно определить класс, к которому относится определенный экземпляр класса. С помощью этих атрибутов в результате запроса данных родительского класса можно определить, к какому дочернему классу относится возвращенный экземпляр. Значением _class_name является псевдоним класса, а значением _type_discr является внутренний идентификатор класса.

    Атрибуты _class_name и _type_discr не входят в состав стандарта GraphQL.

  • Интерфейс: описывает структуру с атрибутами интерфейса модели данных, включая наследуемые атрибуты, а также служебный атрибут с именем _<псевдоним класса>. Значение _<псевдоним класса> соответствует псевдониму класса, экземпляр которого реализует интерфейс.

    Имя этого GraphQL-типа формируется согласно шаблону <псевдоним проекта>_<псевдоним интерфейса>. Например, если в модели данных проекта с псевдонимом Stock создан интерфейс с псевдонимом IAccountable, GraphQL-тип интерфейс будет иметь имя Stock_IAccountable.

  • Пользовательский тип: описывает структуру с атрибутами пользовательского типа, созданного в модели данных проекта.

    Имя этого GraphQL-типа формируется согласно шаблону <псевдоним проекта>_<псевдоним пользовательского типа>. Например, если в модели данных проекта с псевдонимом Stock создан пользовательский тип с псевдонимом CDictionary, GraphQL-тип пользовательский тип будет иметь имя Stock_CDictionary.

GraphQL-типы для выборки данных

Для выборки данных создаются следующие GraphQL-типы:

  • Запрос: описывает выборку экземпляров класса модели данных согласно заданным условиям.

    Имя этого GraphQL-типа соответствует имени GraphQL-типа класс. Имя этого GraphQL-типа для примера выше будет stock_product.

    Этот GraphQL-тип может иметь параметры, которые позволяют делать следующее:

    • skip: пропускать указанное количество экземпляров класса;
    • take: извлекать указанное количество экземпляров класса;
    • where: фильтровать экземпляры класса;
    • order: сортировать экземпляры класса.

    Эти параметры имеют следующие типы данных:

    • skip и take: тип Int.
    • where: тип условия фильтрации с именем <псевдоним проекта>_<псевдоним класса>FilterInput. Этот тип содержит все атрибуты класса модели данных для выборки данных.
    • order: тип параметры сортировки с именем <псевдоним проекта>_<псевдоним класса>SortInput. Этот тип содержит все атрибуты класса модели данных для сортировки данных.

    GraphQL-тип запрос также имеет сегмент коллекции выходных данных, который описывает результирующий набор данных и является структурой с именем <псевдоним проекта>_<псевдоним класса>CollectionSegment. Эта структура содержит следующие элементы:

    • pageInfo: содержит информацию о постраничном выводе в виде структуры из элементов типа Bool hasNextPage и hasPreviousPage.
    • items: описывает коллекцию результирующих наборов данных и соответствует GraphQL-типу класс или GraphQL-типу интерфейс (см. Структурные GraphQL-типы).
    • totalCount: возвращает общее количество объектов в результате запроса.
  • Запрос по идентификатору: возвращает результирующий набор данных.

    Единственным параметром этого типа является идентификатор экземпляра запрашиваемого класса.

    Имя этого GraphQL-типа записывается строчными буквами и формируется согласно шаблону get<псевдоним проекта>_<псевдоним интерфейса>. Например, если в модели данных проекта с псевдонимом Stock создан класс с псевдонимом Product, GraphQL-тип запрос по идентификатору будет иметь имя get_stock_product.

GraphQL-типы для изменения данных

Для изменения данных создаются следующие GraphQL-типы:

  • Входные данные мутации: содержит все атрибуты класса модели данных и используется для передачи аргументов в мутации для этого класса.

    Имя этого GraphQL-типа формируется согласно шаблону <псевдоним проекта>_<псевдоним класса>DataInput. Например, если в модели данных проекта с псевдонимом Stock создан класс с псевдонимом Product, GraphQL-тип входные данные мутации будет иметь имя Stock_ProductDataInput.

  • Мутация одиночного добавления: описывает добавление одного экземпляра класса модели данных.

    Имя этого GraphQL-типа записывается строчными буквами и формируется согласно шаблону add_<псевдоним проекта>_<псевдоним класса>. Например, если в модели данных проекта с псевдонимом Stock создан класс с псевдонимом Product, GraphQL-тип мутация одиночного добавления будет иметь имя add_stock_product.

    Аргументом для этого GraphQL-типа является тип входные данные мутации. В зависимости от типа уникального идентификатора класса модели данных выходные данные этого GraphQL-типа могут быть следующие:

    • Int: MutationIdResultOfInt32;
    • Long: MutationIdResultOfInt64;
    • GUID: MutationIdResultOfGUID.

    Выходные данные этого GraphQL-типа содержат следующие элементы:

    • insertedId: идентификатор добавленного экземпляра класса;
    • countObjectsModified: количество добавленных экземпляров класса;
    • operation: update;
    • objectName: псевдоним класса, к которому применена операция.
  • Мутация множественного добавления: описывает добавление множества экземпляров класса модели данных.

    Имя этого GraphQL-типа записывается строчными буквами и формируется согласно шаблону bulkadd_<псевдоним проекта>_<псевдоним класса>. Например, если в модели данных проекта с псевдонимом Stock создан класс с псевдонимом Product, GraphQL-тип мутация множественного добавления будет иметь имя bulkadd_stock_product.

    Аргументом для этого GraphQL-типа является тип входные данные мутации. В зависимости от типа уникального идентификатора класса модели данных выходные данные этого GraphQL-типа могут быть следующие:

    • Int: MutationIdResultOfInt32;
    • Long: MutationIdResultOfInt64;
    • GUID: MutationIdResultOfGUID.

    Выходные данные этого GraphQL-типа содержат следующие элементы:

    • insertedId: массив идентификаторов добавленных экземпляров класса;
    • countObjectsModified: количество добавленных экземпляров класса;
    • operation: update;
    • objectName: псевдоним класса, к которому применена операция.
  • Мутация одиночного изменения: описывает изменение одного экземпляра класса модели данных.

    Имя этого GraphQL-типа записывается строчными буквами и формируется согласно шаблону update_<псевдоним проекта>_<псевдоним класса>. Например, если в модели данных проекта с псевдонимом Stock создан класс с псевдонимом Product, GraphQL-тип мутация одиночного изменения будет иметь имя update_stock_product.

    Аргументом для этого GraphQL-типа является тип входные данные мутации.

    Выходные данные MutationResult этого GraphQL-типа содержат следующие элементы:

    • countObjectsModified: количество измененных экземпляров класса;
    • operation: update;
    • objectName: псевдоним класса, к которому применена операция.
  • Мутация множественного изменения: описывает изменение множества экземпляров класса модели данных.

    Имя этого GraphQL-типа записывается строчными буквами и формируется согласно шаблону bulkupdate_<псевдоним проекта>_<псевдоним класса>. Например, если в модели данных проекта с псевдонимом Stock создан класс с псевдонимом Product, GraphQL-тип мутация множественного изменения будет иметь имя bulkupdate_stock_product.

    Аргументом для этого GraphQL-типа является тип входные данные мутации.

    Выходные данные MutationResult этого GraphQL-типа содержат следующие элементы:

    • countObjectsModified: количество измененных экземпляров класса;
    • operation: update;
    • objectName: псевдоним класса, к которому применена операция.
  • Мутация удаления: описывает удаление экземпляров класса модели данных.

    Имя этого GraphQL-типа записывается строчными буквами и формируется согласно шаблону delete_<псевдоним проекта>_<псевдоним класса>. Например, если в модели данных проекта с псевдонимом Stock создан класс с псевдонимом Product, GraphQL-тип мутация удаления будет иметь имя delete_stock_product.

    Аргументом для этого GraphQL-типа является тип входные данные мутации и условие where с типом фильтрации <псевдоним проекта>_<псевдоним класса>FilterInput.

    Выходные данные MutationResult этого GraphQL-типа содержат следующие элементы:

    • countObjectsModified: количество удаленных экземпляров класса;
    • operation: delete;
    • objectName: псевдоним класса, к которому применена операция.