Какие знаешь виды сущностей GraphQL схемы

Ответ

GraphQL схема включает несколько основных сущностей:

  1. Типы (Types) – базовые строительные блоки. Например, объектные типы (type User { id: ID! name: String }), скаляры (String, Int, ID), перечисления (enum Role { ADMIN USER }).

  2. Интерфейсы (Interfaces) – абстрактные типы, определяющие набор полей, которые должны реализовывать другие типы (interface Node { id: ID! }).

  3. Юнионы (Unions) – объединяют несколько типов (union SearchResult = User | Post).

  4. Запросы (Queries) – операции для получения данных (type Query { user(id: ID!): User }).

  5. Мутации (Mutations) – операции для изменения данных (type Mutation { createUser(name: String!): User }).

  6. Подписки (Subscriptions) – для реальных обновлений (type Subscription { newMessage: Message }).

  7. Директивы (Directives) – аннотации для изменения поведения полей (@skip(if: Boolean)).

Пример:

type Query {
  getUser(id: ID!): User
}

type User implements Node {
  id: ID!
  name: String!
  posts: [Post!]!
}

interface Node {
  id: ID!
}

Ответ 18+ 🔞

А, ну вот, слушай, GraphQL схема, блядь. Это как конструктор, только для данных, ёпта. Сущностей там дохера, но главные вот эти, держи:

  1. Типы (Types) – это как кирпичи, основа основ. Вот, например, объектный тип – type User { id: ID! name: String }. Или скаляры – String, Int, ID, ну, примитивы, блядь. Ещё есть перечисления – enum Role { ADMIN USER }, типа выбор из списка, всё чётко.

  2. Интерфейсы (Interfaces) – ну, абстракция, ёпта. Типа договор: "вот эти поля у тебя должны быть, а дальше делай что хошь". interface Node { id: ID! }. Если тип его реализует – обязан id иметь, иначе пидарас.

  3. Юнионы (Unions) – это когда "или-или". Объединяют несколько типов в кучу: union SearchResult = User | Post. Нашёл что-то – а там либо юзер, либо пост, нихуя не понятно сразу, надо угадывать.

  4. Запросы (Queries) – это чтобы данные получить, сука. type Query { user(id: ID!): User }. Тыкаешь сюда – отдаёт тебе что надо. Без этого нихуя не работает.

  5. Мутации (Mutations) – а это чтобы данные поменять, создать, удалить. type Mutation { createUser(name: String!): User }. Тыкаешь сюда – что-то в базе шевелится, блядь. Осторожно, ебать.

  6. Подписки (Subscriptions) – для реального времени, ёбана. type Subscription { newMessage: Message }. Подписался – и тебе прут уведомления, как в телеге, только без спама.

  7. Директивы (Directives) – такие аннотации, примочки. @skip(if: Boolean) или @include. Наклеил на поле – и оно либо появляется, либо исчезает, как хитрая жопа. Магия, блядь.

А вот тебе пример, чтобы вообще всё встало на свои места, в рот меня чих-пых:

type Query {
  getUser(id: ID!): User
}

type User implements Node {
  id: ID!
  name: String!
  posts: [Post!]!
}

interface Node {
  id: ID!
}

Видишь? Query – это входная дверь. User – объект, который ещё и контракт Node выполняет, потому что id у него есть. Всё просто, как три копейки, если не выёбываться.