如何将 HotChocolate 中的模式打印为 GraphQL SDL

Mic*_*aib 5 relay graphql hotchocolate

如果使用 Relay 进行开发,可以直接使用 Hot Chocolate GraphQL 服务器打印 GraphQL SDL。有没有办法做到这一点?

schema {
  query: Query
}

type Query {
  sayHello: String
}
Run Code Online (Sandbox Code Playgroud)

Mic*_*aib 10

Hot Chocolate Server 提供了将模式打印为 GraphQL SDL 的简单方法。

  1. 你可以通过调用打印任何架构ToStringISchema

    这是一种更加程序化的方法,但在测试或控制台工具中仅打印模式非常有用。很高兴知道这里的任何语法节点都允许您以这种方式打印。所以,即使你想打印一个解析过的查询,你也可以ToString通过它来获取它的 GraphQL 语言字符串表示。

  2. 对于像 Relay 这样的东西,在端点上有可用的模式来下载它是非常有用的。Hot Chocolate 服务器在所有版本中都提供了一个 GraphQL SDL 端点。

    版本 10 及更早版本: http://localhost:5000/graphql/schema

    版本 11 及更新版本: http://localhost:5000/graphql?sdl

    graphql路由上托管 GraphQL 端点时,此 URL 应该是有效的。

  • hotchocolate 是否提供了无需运行服务器即可提取 SDL 的内置方法? (5认同)
  • 对于 CI/CD 系统来说非常有用,因为它能够在构建时获得此信息而无需运行服务器..尽管也许这只是我的恐龙大脑 (5认同)
  • 对于 HC 13,您从哪里获取 ISchema? (2认同)

Tho*_*mas 5

如果要在 CI/CD 中生成架构,可以添加一个 CLI 参数来生成架构但不启动应用程序。就像是:

在Program.cs中:

if (args.Any(c => c == "--generate-schema"))
{
  builder.Services.AddGraphQL().InitializeOnStartup();
  var app = builder.Build();
  var executor = host.Services.GetRequiredService<IRequestExecutorResolver>().GetRequestExecutorAsync().Result;
  var schema = executor.Schema.Print();
  File.WriteAllText("schema.graphql", schema);
  return;
}
Run Code Online (Sandbox Code Playgroud)