Моделирование данных Graphql: расширение типов и интерфейсов - PullRequest
0 голосов
/ 01 марта 2019

Это очень простой вопрос, но как вы называете расширенный тип или интерфейс?

Все документы указывают на использование extend type Person для добавления полей на основе Person.

Я быожидайте, что это будет работать так

Employee extend type Person {
   salary: Int!
}

Но документация предполагает, что это так:

extend type Person{
   salary: Int!
}

Итак, как мне запросить зарплату сотрудника?Что делать, если есть несколько добавочных номеров Person, например Employee и Renter?Я думаю, что мне может мешать традиционное мышление, но я ожидаю, что расширение приведет к чему-то названному и запрашиваемому.

1 Ответ

0 голосов
/ 01 марта 2019

Ключевое слово extend эффективно используется для изменения существующего типа в схеме.Это чаще всего используется в двух сценариях:

1.Объединение нескольких строк, представляющих одну схему. Вы можете разбить свою схему на несколько файлов, разделенных по доменам.Затем вы можете сделать что-то вроде:

#base.graphql
type Query {
  viewer: User
}

# user.graphql
extend type Query {
  users: [User!]!
}

# post.graphql
extend type Query {
  post: [Post!]!
}

В результате получается схема, которая по сути такая же, как:

type Query {
  viewer: User
  users: [User!]!
  post: [Post!]!
}

2.Расширение от базовой схемы. У вас может быть несколько схем, построенных поверх какой-либо базовой схемы.Или вы можете соединять удаленные схемы .В этих сценариях мы часто хотим добавить поля, специфичные для нашей новой схемы, которые не существуют в базовых типах.Это также может быть использовано для реализации директив, которые отсутствуют в базовой схеме:

extend type SomeType @customDirective

Ключевое слово extend может изменять только существующие типы;это не средство для наследования.Фактически, GraphQL не поддерживает наследование типов. Интерфейсы обеспечивают уровень абстракции над существующими типами, но типы, реализующие интерфейс, не наследуют никаких полей от этого интерфейса.Это невозможно сделать, если вы не используете какую-либо библиотеку, например graphql-s2s .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...