Какие знаешь виды сущностей GraphQL схемы
Разбор вопроса «Какие знаешь виды сущностей GraphQL схемы» для Frontend Developer: что проверяет интервьюер, ключевые тезисы, практические примеры и частые ошибки.
Вопрос
Какие знаешь виды сущностей GraphQL схемы
Профессия
Frontend Developer
Что хочет услышать интервьюер
Интервьюер хочет убедиться, что кандидат понимает основные сущности GraphQL схемы и их назначение. Важно показать знание не только базовых типов (Query, Mutation), но и более продвинутых концепций, таких как интерфейсы, юнионы и директивы.
Ключевые тезисы
- Типы (Types) — основные строительные блоки GraphQL схемы, описывающие структуру данных (например, User, Post).
- Запросы (Queries) — определяют операции для получения данных (аналоги GET в REST).
- Мутации (Mutations) — описывают операции для изменения данных (аналоги POST/PUT/DELETE в REST).
- Подписки (Subscriptions) — позволяют получать обновления данных в реальном времени через WebSocket.
- Интерфейсы (Interfaces) — абстрактные типы, которые определяют набор полей, которые должны быть реализованы другими типами.
- Юнионы (Unions) — аналогичны интерфейсам, но не требуют общих полей, позволяя объединять разные типы.
- Директивы (Directives) — инструменты для кастомизации выполнения запросов (например, @skip, @include).
- Скалярные типы (Scalars) — примитивные типы данных (Int, String, Boolean и т.д.), включая возможность создания кастомных скаляров.
Подробный ответ
GraphQL схема состоит из нескольких ключевых сущностей, которые определяют структуру данных и операции с ними. Основные строительные блоки — это типы (Types), которые описывают структуру данных, например, User или Post. Запросы (Queries) позволяют получать данные, аналогично GET-запросам в REST. Мутации (Mutations) используются для изменения данных, подобно POST, PUT, DELETE в REST. Подписки (Subscriptions) обеспечивают получение обновлений в реальном времени через WebSocket. Интерфейсы (Interfaces) и юнионы (Unions) помогают создавать абстрактные типы и объединять разные типы данных. Директивы (Directives) позволяют кастомизировать выполнение запросов, а скалярные типы (Scalars) представляют примитивные данные, такие как Int, String, Boolean, и могут быть расширены кастомными скалярами.
Практические примеры
Пример 1
Пример определения типа (Type) в GraphQL схеме:
type User {
id: ID!
name: String!
email: String!
posts: [Post!]!
}Здесь определен тип User с обязательными полями id, name, email и списком постов.
Пример 2
Пример подписки (Subscription):
type Subscription {
newPost: Post!
}Эта подписка позволяет клиенту получать уведомления о новых постах в реальном времени.
Пример 3
Пример интерфейса (Interface):
interface Node {
id: ID!
}
type User implements Node {
id: ID!
name: String!
}Интерфейс Node требует, чтобы все типы, которые его реализуют, имели поле id.
Частые ошибки
- Путаница между интерфейсами (Interfaces) и юнионами (Unions). Интерфейсы требуют общих полей, а юнионы просто объединяют типы без обязательных полей.
- Игнорирование использования директив (Directives) для оптимизации запросов, например, @skip или @include для условного получения данных.
Связанные темы
- REST API и его сравнение с GraphQL
- Работа с WebSocket для реализации подписок (Subscriptions)
- TypeScript и его интеграция с GraphQL для типизации запросов и мутаций
Follow-up вопросы
Можешь привести пример определения типа (Type) в GraphQL схеме?
Уровень: basic
Пример определения типа User в GraphQL: type User { id: ID!, name: String!, email: String! }. Здесь User — это тип с обязательными полями id, name и email (восклицательный знак обозначает non-nullable).
Как работают подписки (Subscriptions) в GraphQL и чем они отличаются от запросов?
Уровень: intermediate
Подписки в GraphQL позволяют получать данные в реальном времени через WebSocket. В отличие от запросов (Queries), которые выполняются один раз, подписки остаются активными и отправляют обновления при изменениях данных на сервере.
Зачем нужны интерфейсы (Interfaces) в GraphQL и как их использовать?
Уровень: intermediate
Интерфейсы в GraphQL — это абстрактные типы, которые определяют набор обязательных полей для других типов. Например, интерфейс Node с полем id: ID! может быть реализован типами User и Post, обеспечивая единообразие структуры.
Как создать кастомный скалярный тип (Scalar) в GraphQL?
Уровень: advanced
Кастомный скалярный тип создается путем его объявления в схеме (например, scalar DateTime) и реализации логики парсинга/сериализации на сервере. Например, DateTime может представлять дату в формате ISO-8601.
В чем разница между юнионами (Unions) и интерфейсами (Interfaces)?
Уровень: advanced
Юнионы позволяют объединять разные типы без общих полей (например, union SearchResult = User | Post), тогда как интерфейсы требуют реализации определенных полей. Юнионы полезны, когда типы не связаны общей структурой.
Какие знаешь виды запросов REST
Разбор вопроса «Какие знаешь виды запросов REST» для Frontend Developer: что проверяет интервьюер, ключевые тезисы, практические примеры и частые ошибки.
Какие знаешь основные методы перебора объекта
Разбор вопроса «Какие знаешь основные методы перебора объекта» для Frontend Developer: что проверяет интервьюер, ключевые тезисы, практические примеры и частые ошибки.