使用 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 文件?的主要内容,如果未能解决你的问题,请参考以下文章