Type name: type name | literature | Britannica

Что означает тип имени?

Чувства

  1. Знак или отпечаток чего-либо; печать; печатный знак; Эмблема. «Вера в теннис и высокие чулки, Короткие бриджи с волдырями и эти типов путешествий.» [ Shak. ]
  2. Форма или характер впечатлены; стиль; внешний вид. «Твой отец тип короля Неаполя.» [ Shak. ]
  3. Фигура или изображение чего-то грядущего; знак; знак; символ; — соответствует антитип « тип больше не является типом , когда типизированная вещь становится действительно выставленной.» [ Юг. ]
  4. То, что обладает характерными качествами или воплощает их; представитель.
    1. [ Biol ]
      Общая форма или структура, характерная для ряда индивидуумов; следовательно, идеальное изображение вида, рода или другой группы, сочетающее в себе существенные признаки; животное или растение, обладающее или иллюстрирующее основные характеристики вида, рода или другой группы.
      Также группа или подразделение животных, имеющих определенное типичное или характерное строение тела, сохраняющееся внутри группы.
      «Со времен Кювье и Бэра… все животное царство повсеместно считалось делимым на небольшое число основных отделов или типов «. [ Геккель. ]
    2. [ Изобразительное искусство ]
      Исходный объект или класс объектов, сцена, лицо или концепция, которые становятся предметом копии; особенно рисунок лицевой стороны медали или монеты.
    3. [ Chem ]
      Простое соединение, используемое в качестве модели или образца, с которым удобно рассматривать другие соединения, и из которого они могут быть фактически или теоретически получены.
  5. [ Typog ]
    1. Рельефная буква, цифра, ударение или другой символ, отлитый из металла или вырезанный из дерева, используемый в печати.
    2. Такие буквы или знаки вообще или все их количество, используемое в печати, упоминаются вместе; любое количество или масса таких букв или символов, как бы они ни были расположены.

      1 Американский 9 Буржуа 11/2 немецкий 2 Saxon 10 Long Primer 21/2 Норвежский 3 Бриллиант 11 Маленькая Пика 31/2 Рубин 12 Пика 4 Эксельсиор 41/2 Diamond 14 английский 5 Жемчуг 16 Колумбийский 51/2 Агат 6 Несравнимый 18 Отличный учебник для начинающих 7 Миньон 8 Бревье 20 Парагон Диаграмма «баллов», по которым размеры Type градуируются в «Бальной системе».
      1 Американский 9 Буржуа 11/2 немецкий 2 Saxon 10 Long Primer 21/2 Норвежский 3 Бриллиант 11 Маленькая Пика 31/2 Рубин 12 Пика 4 Эксельсиор 41/2 Diamond 14 английский 5 Жемчуг 16 Колумбийский 51/2 Агат 6 Несравнимый 18 Отличный учебник для начинающих 7 Миньон 8 Бревье 20 Парагон Диаграмма «баллов», по которым размеры Type градуируются в «Бальной системе».

Примечание: ☞ Основными типами, используемыми для выражения простейших и наиболее важных химических отношений, являются соляная кислота, HCl; вода, н3О; аммиак, Кh4; и метан, гл.5.

Примечание: ☞ Типы в основном изготавливаются путем литья металла в форму, хотя некоторые из более крупных размеров изготавливаются из клена, красного дерева или самшита. В разрезе а — тело; б — лицо или часть, с которой сделан оттиск; c, плечо или верхняя часть тела; г, надрезов иногда делается два или более), призванный помочь наборщику отличить низ лица от верха; д, канавка, выполненная в процессе отделки, — каждый тип в виде литого с прикрепленным к днищу корпуса жиклером или небольшим куском металла (образованным излишек металла, залитого в форму), который при отламывании , оставляет шероховатость, которую необходимо удалить. Тонкие линии вверху и внизу буквы технически называются 9.0008 керифы

, а когда часть лица выступает над телом, как в букве f , проекция называется керн . Шрифт, составляющий обычный книжный шрифт, состоит из латинских ЗАГЛАВНЫХ прописных и строчных букв, а также курсивных ЗАГЛАВНЫХ и строчных букв с сопутствующими цифрами, точками и реперными знаками, всего около двухсот знаков. Включая различные современные стили фантазийного шрифта, создается около трех-четырех сотен разновидностей лица. Помимо обычного римского и Italic , некоторые из наиболее важных разновидностей: Староанглийское. Черное письмо. Старый стиль. Французский Эльзевир. Жирный.Старинный. Кларендон.Готика. Пишущая машинка.Скрипт. Самое маленькое обычно используемое тело — это алмаз; затем следуют в порядке размера: жемчуг, агат, нонпарель, миньон, бревиер, буржуа (или двухстрочный ромб), длинный праймер (или двухстрочный жемчуг), маленькая пика (или двухстрочный агат), пика (или двухстрочный агат). однострочный нонпарель), английский (или двухстрочный миньон), колумбийский (или двухстрочный бревир), большой букварь (или двухстрочный буржуазный), парагон (или двухстрочный длинный букварь), двойная малая пика (или двухстрочный).
строчный малый пика), двойной пика (или двухстрочный пика), двойной английский (или двухстрочный английский), двойной большой букварь (или двухстрочный большой букварь), двойной парагон (или двухстрочный парагон), канон (или двухстрочная двойная пика). Выше этого размеры называются пика с пятью линиями, пика с шестью линиями, пика с семью линиями и так далее, поскольку они сделаны в основном из дерева. Следующие алфавиты показывают различные размеры до большого букваря. Блестящий. . АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЫЭЮЯ Алмаз. . АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЫЭЮЯ Жемчуг. . . АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЫЭЮЯ Агат. . . АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЫЭЮЯ Непарный . . . АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЫЭЮЯ Миньон. . . АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЫЭЮЯ Бревье. . . АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЫЭЮЯ Буржуа. . АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЫЭЮЯ Длинная грунтовка. . . АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЫЭЮЯ Маленькая пика.
. АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЫЭЮЯ Пика. . . . . АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЫЭЮЯ Английский . . . АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЫЭЮЯ Колумбийский . . . АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЫЭЮЯ Отличный праймер. . . АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЫЭЮЯ Предыдущий отчет соответствует обозначениям, используемым американскими литейщиками, но по существу верен для Англии.
Агат
, однако, называется рубином в Англии, где также используется размер, промежуточный между нонпарейлом и миньоном, называемый изумрудом .

Этимология: F. тип ; ср. Это. типо , от л. typus фигура, изображение, форма, тип, характер, Гр. опечатка знак удара, отпечаток, форма знака, образец, от корня опечатка бить, ударять; ср. скр. туп

Основы схемы GraphQL — Apollo GraphQL Docs

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

В этой статье описываются основные строительные блоки схемы и способы ее создания для вашего сервера GraphQL.

Спецификация GraphQL определяет удобочитаемый язык определения схемы (или SDL ), который вы используете для определения схемы и ее сохранения в виде строки.

Here’s a short example schema that defines two object types : Book and Author :

schema.graphql

  

1

type Book {

2

title: String

3

автор: Автор

6

type Author {

7

name: String

8

books: [Book]

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

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

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

Большинство типов схемы, которые вы определяете, имеют одно или несколько поля :

 

1

# Тип книги имеет два поля: название и автор

2

Тип : String # возвращает String

4

author: Author # возвращает Author

Каждое поле возвращает данные указанного типа. Тип возвращаемого значения поля может быть скаляром, объектом, перечислением, объединением или интерфейсом (все это описано ниже).

Поля списка

Поле может возвращать список, содержащий элементы определенного типа. Вы указываете поля списка квадратными скобками [] , например:

 

1

тип Автор {

2

имя: Строка

3

книги: [Книги] 9 # Список книг0005

Обнуляемость поля

По умолчанию любое поле в вашей схеме может возвращать null вместо указанного типа. Вы можете потребовать, чтобы конкретное поле не возвращало null с восклицательным знаком ! , например:

 

1

type Author {

2

name: String! # Невозможно вернуть null

3

books: [Book]

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

Обнуляемость и списки

С полем списка восклицательный знак ! может появиться в любой комбинации двух мест :

 

1

тип Автор {

2

книги: [Забронировать!]! # Этот список не может быть нулевым, И его список *items* не может быть нулевым

  • If ! отображается как внутри в квадратных скобках, возвращаемый список не может включать элементов , которые равны нулю .
  • Если ! появляется за пределами квадратных скобок, сам список не может быть нулевым .
  • В любом случае допустимо, чтобы поле списка возвращало пустой список .

Каждое определение типа в схеме GraphQL принадлежит к одной из следующих категорий:

  • Скаляр
  • Объект
    • Сюда входят три специальных типа корневой операции : Запрос , Мутация и
      Подписка
      .
  • Ввод
  • Enum
  • Union
  • Интерфейс

Каждый из них описан ниже.

Скалярные типы

Скалярные типы аналогичны примитивным типам в вашем любимом языке программирования. Они всегда разрешаются к конкретным данным.

Скалярные типы GraphQL по умолчанию:

  • Int : 32-битное целое число со знаком
  • Float : A signed double-precision floating-point value
  • String : A UTF‐8 character sequence
  • Boolean : true or false
  • ID (serialized as a Строка ): уникальный идентификатор, который часто используется для повторной выборки объекта или в качестве ключа для кеша. Хотя он сериализован как String , ID не предназначен для чтения человеком.

Эти примитивные типы охватывают большинство вариантов использования. Для более конкретных случаев использования вы можете создавать собственные скалярные типы.

Типы объектов

Большинство типов, которые вы определяете в схеме GraphQL, являются типами объектов. Тип объекта содержит набор полей, каждое из которых имеет свой тип.

Два типа объектов могут включать друг друга в качестве полей, как в случае с нашей ранее приведенной схемой:

 

1

type Book {

2

Название: Строка

3

Автор: Автор

6

Тип Автор {

7

Имя: Строка

8

Книги: [Book]

9

8

: [Book]

7.

Каждый тип объекта в вашей схеме автоматически имеет поле с именем __typename (его не нужно определять). Поле __typename возвращает имя типа объекта в виде строки (например, Книга 9). 0135 или Автор ).

Клиенты GraphQL используют объект __typename для многих целей, например, чтобы определить, какой тип был возвращен полем, которое может возвращать несколько типов (т. е. объединение или интерфейс). Клиент Apollo использует __typename при кэшировании результатов, поэтому он автоматически включает __typename в каждый объект каждого запроса.

Поскольку __typename всегда присутствует, этот запрос допустим для любого сервера GraphQL:

 

1

Query UniversalQuery {

2

__typeName

Запрос Тип

TOPERERERERERERERERERERERESTERS Тип. клиенты выполняются против вашего сервера.

Каждое поле типа Query определяет имя и тип возвращаемого значения для другой точки входа. Тип Query для нашего примера схемы может выглядеть следующим образом:

 

1

Тип запроса {

2

Книги: [Книга]

3

Авторы: [Автор]

Этот Запрос Тип. Каждое поле возвращает список соответствующего типа.

При использовании API на основе REST книги и авторы, вероятно, будут возвращаться разными конечными точками (например, /api/books и /api/authors ). Гибкость GraphQL позволяет клиентам запрашивать оба ресурса одним запросом.

Структурирование запроса

Когда ваши клиенты создают запросы для выполнения по вашему графу, эти запросы соответствуют форме типов объектов, которые вы определяете в своей схеме.

На основе нашего примера схемы клиент может выполнить следующий запрос, который запрашивает список всех названий книг и список всех имен авторов:

 

1

книг {

6

авторов {

Затем наш сервер ответит на запрос результатами, соответствующими структуре запроса, например:

 

2

"data": {

3

"books": [

5 5 "title 9 ": "Город стекла"

9

"авторы": [

11

"имя": "Пол Остер"

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

Потому что тип нашей схемы Книга имеет Автор Поле типа Автор , клиент мог бы вместо этого структурировать свой запрос, как SO:

 

1

Query Getbooks {

2 9005

1117

  • 1717171111717 17171717

    7117117

    7117171717

    .

    автор {

  • И снова наш сервер выдаст результаты, соответствующие структуре запроса:

     

    2

    "данные": {

    3

    "книги": [ 5

    05

    "название": "Город из стекла",

    6

    "автор": {

    7

    "имя": "Пол Остер"

    Мутация

    5 тип

    9 аналогичен по структуре и назначению типу Query . В то время как тип Query определяет точки входа для операций чтения , тип Mutation определяет точки входа для операций записи .

    Каждое поле из Тип мутации определяет сигнатуру и тип возврата другой точки входа. Тип Mutation для нашей примерной схемы может выглядеть следующим образом: единственная доступная мутация, addBook . Мутация принимает два аргумента ( заголовок и автор ) и возвращает вновь созданный Книга объект. Как и следовало ожидать, этот объект Book соответствует структуре, которую мы определили в нашей схеме.

    Структурирование мутации

    Подобно запросам, мутации соответствуют структуре определений типов вашей схемы. Следующая мутация создает новую книгу и запрашивает определенные поля созданного объекта в качестве возвращаемого значения:

     

    1

    . Сьюз") {

    4

    автор {

    Как и в случае запросов, наш сервер будет отвечать на эту мутацию с результатом, который соответствует структуре мутации, например:

     

    2

    "данные": {

    3 5 " addBook": {

    4

    "title": "Лис в носках",

    5

    "автор": {

    6

    "name": "Доктор Сьюз"

    Одна мутация может включать несколько полей верхнего уровня Mutation 9Тип 0135. Обычно это означает, что операция будет выполнять несколько внутренних операций записи (как минимум по одной для каждого поля). Чтобы предотвратить состояние гонки, поля Mutation верхнего уровня разрешаются последовательно в том порядке, в котором они перечислены (все остальные поля могут разрешаться параллельно).

    Узнайте больше о разработке мутаций

    Подписка

    тип

    См. Подписки.

    Типы ввода

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

    Определение типа ввода аналогично типу объекта, но в нем используется Вход Ключевое слово:

     

    1

    Вход Blogpostcontent {

    2

    Титул: Строка

    3

    11115

    Титул: Строка

    3

    1111111

    119

    1

    1916

    6

    6

    1

    11 гг. Каждое поле типа ввода может быть только скаляром, перечислением или другим типом ввода :

     

    1

    input BlogPostContent {

    2

    Название: Строка

    3

    Тело: Строка

    4

    Media: [MediaDetails!]

    7

    Входные средства MediaDetails {

    8

    Формат: MediaFormat!

    9

    url: Строка!

    12

    enum MediaFormat {

    После определения типа ввода любое количество различных полей объекта может принимать этот тип в качестве аргумента:

     

    1

    type Mutation {

    2

    createBlogPost(content: BlogPostContent!): Post

    3

    updateBlogPost(id: ID!, content: BlogPostContent!): Post

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

    Будьте осторожны при использовании одного и того же типа ввода для полей Query и Mutation . Во многих случаях аргументы обязательные для мутации являются необязательными для соответствующего запроса. Возможно, вы захотите создать отдельные типы ввода для каждого типа операции.

    Типы перечисления

    Перечисление похоже на скалярный тип, но его допустимые значения определены в схеме. Вот пример определения:

     

    1

    enum AllowedColor {

    Перечисления наиболее полезны в ситуациях, когда пользователь должен выбирать из заданного списка вариантов. Дополнительным преимуществом является автозаполнение значений перечисления в таких инструментах, как Apollo Studio Explorer.

    Перечисление может появляться везде, где допустим скаляр (в том числе в качестве аргумента поля), поскольку они сериализуются как строки:

     

    1

    type Query {

    2

    FavoriteColor: AllowedColor # enum return value

    3

    avatar(borderColor: AllowedColor): String # аргумент перечисления

    Тогда запрос может выглядеть так:

     

    1

    query GetAvatar {

    2

    avatar(borderColor: 0 RED) 6

    Внутренние значения (расширенные)

    Иногда серверная часть принудительно устанавливает другое значение для перечисления внутри, чем в общедоступном API. Вы можете установить для каждого значения перечисления соответствующее внутреннее значение в карте распознавателя, которую вы предоставляете серверу Apollo.

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

    В следующем примере используются шестнадцатеричные коды цвета для каждого внутреннего значения AllowedColor :

     

    1

    Const Resolvers = {

    2

    ALLECTCOLOR: {

    3

    Красный: '#F00',

    4

    Зеленый: '#0F0',

    5

    : '#0F0',

    5

    : '#0F0',

    5

    . #00f',

    7

    // ...другие определения преобразователя...

    Эти внутренние значения вообще не меняют общедоступный API. Резолверы сервера Apollo принимают эти значения вместо значений схемы, как показано ниже:

     

    1

    const resolvers = {

    2

    Alpercolor: {

    3

    RED: '#F00',

    4

    Зеленый: '#0F0',

    5

    Синий: '#00F',

    79005

    QUERY. : {

    8

    FavoriteColor: () => '#f00',

    9

    avatar: (parent, args) => {

    10

    // args.borderColor is '#f00 #0f0' или '#00f'

    Типы соединений и интерфейсов

    См. Объединения и интерфейсы.

    По мере того, как ваша организация растет и развивается, ваш график растет и развивается вместе с ней. В новых продуктах и ​​функциях представлены новые типы схем и поля. Чтобы отслеживать эти изменения с течением времени, вы должны поддерживать определение схемы в системе управления версиями.

    Большинство дополнительных изменений схемы безопасны и обратно совместимы. Однако изменения, которые удаляют или изменяют существующее поведение , могут нарушать изменения для одного или нескольких существующих клиентов. Все следующие изменения схемы являются потенциально критическими изменениями:

    • Удаление типа или поля
    • Переименование типа или поля
    • Добавление значения NULL в поле
    • Удаление аргументов поля

    Инструмент управления графиком, такой как Apollo Studio помогает понять, повлияет ли потенциальное изменение схемы на кого-либо из ваших активных клиентов. Studio также предоставляет метрики производительности на уровне полей, отслеживание истории схемы и расширенную безопасность с помощью безопасных списков операций.

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

    В следующем фрагменте кода показано, как использовать как однострочные строковые литералы, так и многострочные блоки:

     

    1

    «Описание типа»

    2

    type MyObjectType {

    4 5 field

    5

    Поддерживает **многострочное** описание для вашего [API](http://example.com)!

    7

    myField: Строка!

    9

    otherField(

    10

    «Описание аргумента»

    11

    arg: Int

    ) автозаполнение имен полей вместе с описаниями, когда они предоставлены. Кроме того, Apollo Studio отображает описания наряду с информацией об использовании полей и производительности при использовании своих функций отчетности по метрикам и информирования клиентов.

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

    • Имена полей должны использовать camelCase . Многие клиенты GraphQL написаны на JavaScript, Java, Kotlin или Swift, и все они рекомендуют camelCase для имен переменных.
    • Названия типов следует использовать Дело Паскаля . Это соответствует тому, как классы определяются в упомянутых выше языках.
    • Имена Enum должны использовать PascalCase .
    • Значения Enum должны использовать ALL_CAPS , потому что они похожи на константы.

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

    Схема GraphQL наиболее эффективна, когда она разработана для нужд клиентов, которые будут выполнять с ней операции. Хотя ты может структурировать ваши типы, чтобы они соответствовали структуре ваших серверных хранилищ данных, вам это не обязательно! Поля одного типа объекта могут быть заполнены данными из любого количества различных источников. Разработайте схему на основе того, как данные используются, а не на основе того, как они хранятся.

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

    Пример управляемой запросом схемы

    Допустим, мы создаем веб-приложение, в котором перечислены предстоящие события в нашей области. Мы хотим, чтобы приложение показывало название, дату и место каждого события, а также прогноз погоды для него.

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

    7

    погода {

    8

    температура

    9

    описание

    Поскольку мы знаем, что это структура данных, которые были бы полезны для нашего клиента, это может дать информацию о структуре нашей схемы:

    55 1

    тип Запрос {

    2

    предстоящие события: [Событие!]!

    5

    тип Событие {

    6

    имя: Строка!

    7

    Дата: Строка!

    8

    местоположение: Местоположение

    11

    тип Местоположение {

    12

    имя: Строка!

    13

    Погода: Weatherinfo

    16

    Тип Weatherinfo {

    17

    Температура: Float

    18

    Описание: Строка

    Как упоминалось, каждый из этих типов может быть заполнена данными. источник данных (или несколько источников данных ). Например, Событие типа имя и дата могут быть заполнены данными из нашей серверной базы данных, тогда как тип WeatherInfo может быть заполнен данными из стороннего API погоды.

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

    Схема, которая поддерживает обновление электронной почты из Пользователь будет включать следующее:

     

    1

    type Mutation {

    2

    # Эта мутация принимает параметры идентификатора и электронной почты и отвечает пользователем

    3

    !): User

    6

    type User {

    7

    id: ID!

    8

    имя: Строка!

    9

    электронная почта: Строка!

    Затем клиент может выполнить мутацию схемы со следующей структурой:

     

    1

    мутация updateMyUser {

    2

    updateUserEmail(id: 1, электронная почта: "jane@example. com") {

    После того, как сервер GraphQL выполнит мутацию и сохранит новый адрес электронной почты для пользователя , он отвечает клиенту следующим образом:

     

    2

    "данные": {

    3

    "updateUserEmail": {

    4

    "id": "1",

  • 10 имя": "Джейн Доу",

    6

    "email": "[email protected]"

  • Хотя ответ на мутацию не обязательно должен включать измененный объект, это значительно повышает эффективность клиентского кода. Как и в случае с запросами, определение того, какие мутации будут полезны для ваших клиентов, помогает определить структуру вашей схемы.

    Структурирование ответов на мутации

    Одна мутация может модифицировать несколько типов или несколько экземпляров одного и того же типа . Например, мутация, которая позволяет пользователю «лайкать» сообщение в блоге, может увеличить лайков кол-во для поста и обновить список лайков для пользователя . Это делает менее очевидным, как должна выглядеть структура ответа на мутацию.

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

    Чтобы решить обе эти проблемы, мы рекомендуем определить интерфейс MutationResponse в вашей схеме вместе с набором типов объектов, которые реализуют этот интерфейс (по одному для каждой из ваших мутаций).

    Вот как может выглядеть интерфейс MutationResponse :

     

    1

    интерфейс MutationResponse {

    2

    код: Строка!

    3

    успех: логическое значение!

    4

    сообщение: Строка!

    А вот как может выглядеть объект, который реализует MutationResponse :

     

    1

    тип UpdateUserEmailMutationResponse реализует MutationResponse {

    2 код!

    3

    успех: логическое значение!

    4

    сообщение: Строка!

    5

    пользователь: Пользователь

    Наша мутация updateUserEmail указывает UpdateUserEmailMutationResponse

    в качестве типа возвращаемого значения (вместо User ), а структура его ответа будет следующей:

     

    2

    "data": {

    3

    "updateUserEmail": 1 : 1

    "код": "200",

    5

    "успех": правда,

    6

    "сообщение": "Эл. 8

    "id": "1",

    9

    "name": "Jane Doe",

    10

    "email": "[email protected]"

    Давайте разберем это поле по полям:

    • код представляет собой строку, статус передачи данных. Думайте об этом как о коде состояния HTTP.
    • success — логическое значение, указывающее, была ли мутация успешной. Это позволяет клиенту выполнить грубую проверку, чтобы узнать, были ли сбои.
    • сообщение — это удобочитаемая строка, описывающая результат мутации. Он предназначен для использования в пользовательском интерфейсе продукта.
    • пользователь добавляется реализующим типом UpdateUserEmailMutationResponse , чтобы вернуть клиенту только что обновленного пользователя.

    Если мутация изменяет нескольких типов (как в нашем предыдущем примере «лайка» сообщения в блоге), ее реализующий тип может включать отдельное поле для каждого измененного типа:

     

    1

    2

    код: Строка!

    3

    успех: логическое значение!

    4

    сообщение: Строка!

    5

    post: Post

    6

    user: User

    Поскольку наша гипотетическая мутация likePost изменяет поля как в Post , так и в объекте , эти поля включают 9 этих типов для User User .

    Добавить комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *