使用 `openapi-to-graphql` 构建的 TypeDef 在 Fastify 中公开 GraphQL 的问题
Issue Exposing GraphQL In Fastify With TypeDefs Built With `openapi-to-graphql`
我有一个工作的 Fastify REST 服务器公开了一个符合标准的 OpenAPI 合约,我希望通过 Apollo 额外添加 GraphQL 支持。
https://www.npmjs.com/package/apollo-server-fastify
我完成了上述模块的设置说明,一切看起来都很简单,直到需要定义连接点所需的 TypeDef 和 Resolver 信息。不想手动重新创建映射,我决定利用以下包:
https://www.npmjs.com/package/openapi-to-graphql-cli
具体来说,我运行以下命令:
openapi-to-graphql spec-2.0.json --operationIdFieldNames --save spec.graphql
那 运行 没有抱怨,吐出在我看来是我的 API 的完整 TypeDef 集。希望这就是所有需要的,我像这样连接起来:
const apolloServer = new ApolloServer({
typeDefs: gql`${fs.readFileSync('spec.graphql', 'utf-8')}`,
tracing: true,
playground: true
})
fastifyInstance.register(apolloServer.createHandler())
当我导航到新的 /graphql
端点时,呈现了 GraphQL Playground,并且查询 window 中的 Intellisense/AutoComplete 功能似乎有效 - 它标记了语法错误,列出了我的操作和属性等。但是,每当我执行命令时,我最终都会得到类似于以下内容的空结果:
{
"data": {
"operationNameGoesHere": null
}
}
我很茫然。显然有些东西没有正确连接默认解析器,将 GraphQL 查询连接到 REST 端点,但我不知道如何排除故障。
作为完整性检查,我将我的一个操作的基本解析器硬编码为始终 return true,并且 did 在 GraphQL Playground 中工作,所以我 认为 除了 GraphQL 到 REST 的连接外,其余设置都很好。
如有任何见解,我们将不胜感激。
您提供了类型定义,但没有解析器。解析器实际上是在指导您的模式如何解析各个字段。您正在使用的包不是适合您要执行的操作的工具。相反,您可以使用 openapi-to-graphql,它允许您创建可执行模式:
const { schema } = await createGraphQLSchema(oas)
const apolloServer = new ApolloServer({
schema,
})
您可能还想看看 GraphQL Mesh。
我有一个工作的 Fastify REST 服务器公开了一个符合标准的 OpenAPI 合约,我希望通过 Apollo 额外添加 GraphQL 支持。
https://www.npmjs.com/package/apollo-server-fastify
我完成了上述模块的设置说明,一切看起来都很简单,直到需要定义连接点所需的 TypeDef 和 Resolver 信息。不想手动重新创建映射,我决定利用以下包:
https://www.npmjs.com/package/openapi-to-graphql-cli
具体来说,我运行以下命令:
openapi-to-graphql spec-2.0.json --operationIdFieldNames --save spec.graphql
那 运行 没有抱怨,吐出在我看来是我的 API 的完整 TypeDef 集。希望这就是所有需要的,我像这样连接起来:
const apolloServer = new ApolloServer({
typeDefs: gql`${fs.readFileSync('spec.graphql', 'utf-8')}`,
tracing: true,
playground: true
})
fastifyInstance.register(apolloServer.createHandler())
当我导航到新的 /graphql
端点时,呈现了 GraphQL Playground,并且查询 window 中的 Intellisense/AutoComplete 功能似乎有效 - 它标记了语法错误,列出了我的操作和属性等。但是,每当我执行命令时,我最终都会得到类似于以下内容的空结果:
{
"data": {
"operationNameGoesHere": null
}
}
我很茫然。显然有些东西没有正确连接默认解析器,将 GraphQL 查询连接到 REST 端点,但我不知道如何排除故障。
作为完整性检查,我将我的一个操作的基本解析器硬编码为始终 return true,并且 did 在 GraphQL Playground 中工作,所以我 认为 除了 GraphQL 到 REST 的连接外,其余设置都很好。
如有任何见解,我们将不胜感激。
您提供了类型定义,但没有解析器。解析器实际上是在指导您的模式如何解析各个字段。您正在使用的包不是适合您要执行的操作的工具。相反,您可以使用 openapi-to-graphql,它允许您创建可执行模式:
const { schema } = await createGraphQLSchema(oas)
const apolloServer = new ApolloServer({
schema,
})
您可能还想看看 GraphQL Mesh。