Подробное руководство по описанию схемы GraphQL в NestJS

При создании API-интерфейсов GraphQL с помощью NestJS крайне важно иметь четко определенную схему, которая точно описывает доступные данные и операции. В этой статье мы рассмотрим различные методы и приемы описания схемы GraphQL в NestJS, а также приведем примеры кода.

  1. Подход «сначала схема».
    Подход «сначала схема» предполагает определение схемы 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
  }
}
  1. Подход «сначала код».
    При подходе «сначала код» вы определяете схему 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
  }
}
  1. Интеграция 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.