Apollo服务器文档仅提供一种定义GraphQL模式typeDefs的方法,即使用splash:go
标记。但是,我看到了使用gql
文件的替代方法。
这些方法之一已过时吗?
使用一种方法或另一种方法是否有优点或缺点?
为什么即使支持Apollo Server文档也没有提到schema.gql
文件类型?
答案 0 :(得分:1)
ApolloServer在幕后使用makeExecutableSchema
中的graphql-tools
从提供的类型定义和解析器映射实际生成服务使用的架构。您传递给typeDefs
的{{1}}可以是经过解析的makeExecutableSchema
对象(这是DocumentNode
标签产生的对象),也可以是字符串,在这种情况下,它们将为您解析。您也可以传入一个数组。
如果您在一个或多个gql
文件(或.gql
或其他文件)中包含类型定义,则通常仅使用.graphql
之类的文件内容即可字符串并将其用作您的fs.read
参数。 从技术上讲是好的,它将与使用已解析的typeDefs
对象一样好。
仅 的问题是,与DocumentNode
不同,graphql-tools
明确地does not support this approach。这反映在模块的TypeScript定义中。虽然现在将纯字符串用作typeDefs可以使用,但将来可能会导致某些意外行为,因此请谨慎操作。
除了上述内容外,还有一个实际的原因要为架构使用单独的文件-由于存在支持这些文件的编辑器插件,因此更容易利用语法突出显示和代码完成功能。还需要指出的是,如果您碰巧用babel来转换代码,还可以利用babel-plugin-import-graphql之类的东西将文件导入为已解析的DocumentNodes。