0

私は 3 つのマイクロサービスで NestJS を使用してから、graphQL フェデレーションを使用して単一の graphQL エンドポイントを提供しています。現在の問題は、各マイクロサービスが、そのマイクロサービスに属していないものも含め、すべてのオブジェクト タイプを公開していることです。スキーマ変換を使用して型定義を除外したいと考えています。私はこれを部分的にしか機能させていません。

GraphQLFederationModule.forRoot({
      autoSchemaFile: join(process.cwd(), 'schema.gql'),
      debug: true,
      introspection: true,
      useGlobalPrefix: true,
      transformSchema: (schema: GraphQLSchema): GraphQLSchema => {
        // works > user not inluded  `'{"query":"query IntrospectionQuery {\n  __schema {\n    queryType {\n      name\n    }\n  ......`
        // NOT working `{"query": "query __ApolloGetServiceDefinition__ { _service { sdl } }"}`
        const filter = new FilterTypes(type => {
          return type.name != 'User';
        });
        return filter.transformSchema(schema);
      },
      schemaTransforms: [
        (schema: GraphQLSchema): GraphQLSchema => {
          //never gets called
          console.log('schema', schema);
          return schema;
        },
      ]
    }),

したがって、上記の例では、次のことが起こります。

  • Playground がマイクロサービスからスキーマを直接クエリする場合、スキーマには User タイプが含まれません
  • schema.gql ファイルには、まだ User タイプが含まれています。
  • NestJs ゲートウェイは{"query": "query __ApolloGetServiceDefinition__ { _service { sdl } }"}grpgql エンドポイントで以下を呼び出しますが、これにはまだ User タイプが含まれています

スキーマを一貫して変換する方法があるとよいでしょう。誰もそれを行う方法を知っていますか?

4

0 に答える 0