使用 Apollo Server 时如何生成 schema.graphql 文件?

Posted

技术标签:

【中文标题】使用 Apollo Server 时如何生成 schema.graphql 文件?【英文标题】:How do I generate the schema.graphql file when using Apollo Server? 【发布时间】:2020-10-10 11:12:00 【问题描述】:

使用 Apollo Server 编写 GraphQL 服务器时,如何在服务器上运行命令生成schema.graphql 文件供客户端使用?注意:我没有使用 Apollo 客户端,我使用的是 Relay。

我知道我可以运行 GraphQL 游乐场并从那里下载它,但我想要一个可以自动化的命令行。

当使用 GraphQL Ruby 时,我正在搜索类似于 rake graphql:schema:dump 的内容,您可以在服务器上运行它以生成 schema.graphql

【问题讨论】:

【参考方案1】:

您可以为此使用 Apollo CLI。首先安装它:

npm install -g apollo

然后运行这个命令如docs:

apollo client:download-schema --endpoint=URL_OF_YOUR_ENDPOINT schema.graphql

该命令将根据用于输出文件的扩展名在 SDL 中生成自省结果或模式。

您的 ApolloServer 实例不会公开它创建的架构,但您也可以直接针对该实例运行自省查询:

const  getIntrospectionQuery, buildClientSchema, printSchema  = require('graphql')
const  ApolloServer  = require('apollo-server')

const apollo = new ApolloServer( ... )
const  data  = await apollo.executeOperation( query: getIntrospectionQuery() )
const schema = buildClientSchema(data)
console.log(printSchema(schema))

如果您将现有的 GraphQLSchema 实例传递给 Apollo Server,您也可以直接在其上调用 printSchema

【讨论】:

我没有使用 Apollo 客户端...如果服务器正在运行,那不是几乎没有 curl/wget 吗? 我不确定您使用的客户端是如何影响这一点的。您要求运行 CLI 命令以在 SDL 中获取服务器的模式,这是执行此操作的一种方法。你不能只使用 curl ,因为那只会返回自省结果。您需要一种方法将其转换为 GraphQLSchema 对象,然后将其打印出来。还有其他方法可以做到这一点,但您特别要求使用 CLI 命令。 我在服务器上执行 CLI 命令,该命令将从定义的类型生成 schema.graphql,而无需下载任何内容。我更新了我的问题以指定这一点。对不起。 查看编辑。如果你想从命令行运行它,你需要把它变成一个 npm 脚本。 这对联合模式有效吗?

以上是关于使用 Apollo Server 时如何生成 schema.graphql 文件?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Apollo Server 清除设置的 cookie

Apollo-Server,如何与 SailsJS 一起使用?

在 sequelize 和 apollo-server 中从目标解析源关联时理解“包含”

apollo-server-express:如何解决内部订阅问题?

在 Apollo-Server v2 中间件之后如何使用 Express 中间件?

如何使用 apollo-server 进行缓存