Apollo Server的gql标记和schema.gql文件有什么区别?

时间:2019-07-18 19:32:35

标签: javascript typescript graphql apollo apollo-server

Apollo服务器文档仅提供一种定义GraphQL模式typeDefs的方法,即使用splash:go标记。但是,我看到了使用gql文件的替代方法。

这些方法之一已过时吗?

使用一种方法或另一种方法是否有优点或缺点?

为什么即使支持Apollo Server文档也没有提到schema.gql文件类型?

1 个答案:

答案 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。