При создании API-интерфейсов GraphQL с помощью NestJS крайне важно иметь четко определенную схему, которая точно описывает доступные данные и операции. В этой статье мы рассмотрим различные методы и приемы описания схемы GraphQL в NestJS, а также приведем примеры кода.
- Подход «сначала схема».
Подход «сначала схема» предполагает определение схемы GraphQL с использованием языка определения схемы GraphQL (SDL), а затем реализацию преобразователей. Вот пример:
# schema.graphql
type User {
id: ID!
name: String!
email: String!
}
type Query {
getUser(id: ID!): User!
}
// user.resolver.ts
import { Query, Resolver, Args, ID } from '@nestjs/graphql';
@Resolver()
export class UserResolver {
@Query('getUser')
getUser(@Args('id', { type: () => ID }) id: string) {
// Logic to fetch the user by ID
}
}
- Подход «сначала код».
При подходе «сначала код» вы определяете схему GraphQL с помощью декораторов и классов TypeScript. Вот пример:
import { ObjectType, Field, ID } from '@nestjs/graphql';
@ObjectType()
export class User {
@Field((type) => ID)
id: string;
@Field()
name: string;
@Field()
email: string;
}
import { Query, Resolver, Args } from '@nestjs/graphql';
import { User } from './user.model';
@Resolver((of) => User)
export class UserResolver {
@Query((returns) => User)
getUser(@Args('id', { type: () => String }) id: string) {
// Logic to fetch the user by ID
}
}
- Интеграция TypeORM.
NestJS обеспечивает бесшовную интеграцию с TypeORM, позволяя создавать описания схемы GraphQL на основе ваших сущностных моделей. Вот пример:
import { ObjectType, Field, ID } from '@nestjs/graphql';
import { Entity, Column, PrimaryGeneratedColumn } from 'typeorm';
@Entity()
@ObjectType()
export class User {
@PrimaryGeneratedColumn('uuid')
@Field((type) => ID)
id: string;
@Column()
@Field()
name: string;
@Column()
@Field()
email: string;
}
Аннотируя класс сущности декораторами @Entityи @ObjectType, NestJS автоматически генерирует необходимое описание схемы для GraphQL API.
Описание схем GraphQL в NestJS необходимо для создания надежных и самодокументируемых API. В этой статье мы рассмотрели различные методы, включая подходы «сначала схема» и «сначала код», а также интеграцию TypeORM. Используя эти методы, вы можете создавать четко определенные схемы, которые обеспечивают эффективную разработку API в NestJS.