본문으로 건너뛰기

GraphQL 리졸버의 서명 생성기 — Numio

GraphQL 스키마에서 resolver 타입 시그니처를 생성합니다. TypeScript(기본값, typescript-resolvers), Flow(flow-resolvers), Java(java-resolvers)를 지원합니다. TypeScript 출력에는 스키마 타입마다 타입이 지정된 resolver 객체 하나를 가진 Resolvers 맵이 포함됩니다.

Apollo Server나 graphql-yoga에 전달하는 resolvers 객체에 타입을 지정해 parent, args, 반환값을 검사합니다.

GraphQL Schema

이럴 때 사용하세요

  • Apollo Server나 graphql-yoga에 전달하는 resolvers 객체에 타입을 지정해 parent, args, 반환값을 검사합니다.
  • JAVA Resolvers Signature 옵션으로 타입별 graphql-java DataFetcher 인터페이스를 얻습니다.

사용 방법

  1. GraphQL Schema 편집기에 스키마를 붙여 넣습니다.
  2. 출력 드롭다운에서 TypeScript Resolvers Signature, Flow Resolvers Signature, JAVA Resolvers Signature 중 하나를 선택합니다.
  3. 출력을 복사합니다. TypeScript라면 resolver 맵에 생성된 Resolvers 타입을 지정합니다.

GraphQL 스키마

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

type User {
  id: ID!
  name: String
}

Resolver 시그니처

import { GraphQLResolveInfo } from "graphql"
…
export type QueryResolvers<
  ContextType = any,
  ParentType extends
    ResolversParentTypes["Query"] = ResolversParentTypes["Query"],
> = {
  user?: Resolver<
    Maybe<ResolversTypes["User"]>,
    ParentType,
    ContextType,
    RequireFields<QueryUserArgs, "id">
  >
}

export type UserResolvers<
  ContextType = any,
  ParentType extends
    ResolversParentTypes["User"] = ResolversParentTypes["User"],
> = {
  id?: Resolver<ResolversTypes["ID"], ParentType, ContextType>
  name?: Resolver<Maybe<ResolversTypes["String"]>, ParentType, ContextType>
  __isTypeOf?: IsTypeOfResolverFn<ParentType, ContextType>
}
…

세부 정보 및 제한 사항

QueryResolvers 같은 생성 타입은 ContextType = any입니다. 필수 인자는 RequireFields로 타입이 지정되고, 객체 resolver에는 선택적인 __isTypeOf가 포함됩니다.

스키마만 사용합니다. resolver 시그니처는 operation에 의존하지 않으므로 이 페이지에는 Documents 편집기가 없습니다.

Java 옵션은 package com.example.graphql의 public class Resolvers 안에 DataFetcher 메서드로 된 public interface를 출력합니다. 모든 처리는 브라우저 Web Worker에서 실행됩니다.

FAQ

직접 만든 context 타입을 지정하려면 어떻게 하나요?

페이지에는 mapper나 contextType 옵션이 없습니다. 생성된 resolver 타입은 모두 ContextType을 받으므로 Resolvers<MyContext>처럼 제네릭으로 context 타입을 전달하세요.

resolver 필드가 모두 선택 사항인 이유는 무엇인가요?

GraphQL 서버는 부모 객체의 프로퍼티를 읽는 기본 resolver로 대체하므로, typescript-resolvers는 기본적으로 모든 필드 resolver를 선택 사항으로 표시합니다.

Java 옵션은 ID 필드의 타입을 어떻게 지정하나요?

ID 타입과 객체 타입 필드는 DataFetcher<Object>를 반환하고, String 필드는 DataFetcher<String>이 됩니다.

사양 및 참고 자료