Ответ
GraphQL схема включает несколько основных сущностей:
-
Типы (Types) – базовые строительные блоки. Например, объектные типы (
type User { id: ID! name: String }), скаляры (String,Int,ID), перечисления (enum Role { ADMIN USER }). -
Интерфейсы (Interfaces) – абстрактные типы, определяющие набор полей, которые должны реализовывать другие типы (
interface Node { id: ID! }). -
Юнионы (Unions) – объединяют несколько типов (
union SearchResult = User | Post). -
Запросы (Queries) – операции для получения данных (
type Query { user(id: ID!): User }). -
Мутации (Mutations) – операции для изменения данных (
type Mutation { createUser(name: String!): User }). -
Подписки (Subscriptions) – для реальных обновлений (
type Subscription { newMessage: Message }). -
Директивы (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 схема, блядь. Это как конструктор, только для данных, ёпта. Сущностей там дохера, но главные вот эти, держи:
-
Типы (Types) – это как кирпичи, основа основ. Вот, например, объектный тип –
type User { id: ID! name: String }. Или скаляры –String,Int,ID, ну, примитивы, блядь. Ещё есть перечисления –enum Role { ADMIN USER }, типа выбор из списка, всё чётко. -
Интерфейсы (Interfaces) – ну, абстракция, ёпта. Типа договор: "вот эти поля у тебя должны быть, а дальше делай что хошь".
interface Node { id: ID! }. Если тип его реализует – обязанidиметь, иначе пидарас. -
Юнионы (Unions) – это когда "или-или". Объединяют несколько типов в кучу:
union SearchResult = User | Post. Нашёл что-то – а там либо юзер, либо пост, нихуя не понятно сразу, надо угадывать. -
Запросы (Queries) – это чтобы данные получить, сука.
type Query { user(id: ID!): User }. Тыкаешь сюда – отдаёт тебе что надо. Без этого нихуя не работает. -
Мутации (Mutations) – а это чтобы данные поменять, создать, удалить.
type Mutation { createUser(name: String!): User }. Тыкаешь сюда – что-то в базе шевелится, блядь. Осторожно, ебать. -
Подписки (Subscriptions) – для реального времени, ёбана.
type Subscription { newMessage: Message }. Подписался – и тебе прут уведомления, как в телеге, только без спама. -
Директивы (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 у него есть. Всё просто, как три копейки, если не выёбываться.