【问题标题】:What's the difference between Apollo Server's gql tag and a schema.gql file?Apollo Server 的 gql 标签和 schema.gql 文件有什么区别?
【发布时间】:2019-11-27 19:15:29
【问题描述】:

Apollo Server 文档只提供了一种定义 GraphQL 模式 typeDefs 的方法,即使用 gql 标签。但是,我看到了使用schema.gql 文件的替代方法。

这些方法之一是否已过时?

使用一种方法或另一种方法有什么优点或缺点吗?

为什么 Apollo Server 文档不提及 .gql 文件类型,即使它受支持?

【问题讨论】:

    标签: javascript typescript graphql apollo apollo-server


    【解决方案1】:

    ApolloServer 在后台使用来自graphql-toolsmakeExecutableSchema 从您提供的类型定义和解析器映射中实际生成服务使用的模式。传递给makeExecutableSchematypeDefs 可以是已解析的DocumentNode 对象(这是gql 标记产生的),也可以是字符串,在这种情况下,它们将为您解析。你也可以传入一个数组。

    如果您的类型定义在一个或多个 .gql 文件(或 .graphql 或其他)中,您通常只是使用类似 fs.read 的东西将文件内容作为字符串并将其用作您的typeDefs 参数。这技术上很好,并且与使用已解析的 DocumentNode 对象一样好。

    唯一的问题是,与graphql-tools 不同,apollo-server 明确为does not support this approach。这反映在模块的 TypeScript 定义中。虽然现在使用纯字符串作为 typeDefs 是可行的,但这样做可能会在未来导致一些意外行为,因此请谨慎使用。

    除了上述之外,还有一个实际的原因是为您的架构使用单独的文件 - 因为有支持这些文件的编辑器插件,所以更容易利用语法突出显示和代码完成功能。还要注意指出,如果您碰巧使用 babel 转译您的代码,也可以利用 babel-plugin-import-graphql 之类的东西将您的文件导入为已解析的 DocumentNodes。

    【讨论】:

    • 好的,所以.gql / .graphql 文件方法确实已经过时了。我希望 Apollo Server 文档提到这一点。感谢您的信息!
    猜你喜欢
    • 2020-02-23
    • 2011-08-13
    • 2021-12-22
    • 2021-03-24
    • 2023-03-13
    • 2010-12-28
    • 2012-08-15
    • 2012-12-27
    • 1970-01-01
    相关资源
    最近更新 更多