【问题标题】:Convert GraphQL shorthand notation to respective object?将 GraphQL 速记符号转换为相应的对象?
【发布时间】:2016-09-26 00:37:30
【问题描述】:

我正在研究一个 GraphQL 服务器设置,它可以解析从字符串传递给它的类型,我正在寻找一种将字符串转换为适当对象的解决方案。比如这里的字符串传入:

type User { id: String, name: String }

我的函数将返回运行此代码的等效项:

new graphql.GraphQLObjectType({
  name: 'User',
  fields: {
    id: { type: graphql.GraphQLString },
    name: { type: graphql.GraphQLString },
  }
});

这里的关键是不可知论,所以我也可以传入 say、interface 和其他简写,让它返回适当的对象。我已经使用graphql_language.parse(str) 函数从graphql/language 模块bu 实现了抽象语法树,但我不确定从这里去哪里。

【问题讨论】:

  • 我很好奇。你有什么场景需要字符串到 GraphQL 类型转换?
  • 我有兴趣构建一个允许类型本身的 CRUD 而无需修改服务器上的代码的系统。

标签: graphql graphql-js


【解决方案1】:

GitHub 上的参考 GraphQL-JS 实现已经有一个函数 buildASTSchema,它采用解析的类型模式并创建一组 JavaScript 对象。因此,了解如何做到这一点的最佳方法是查阅 GitHub 上的源代码:https://github.com/graphql/graphql-js/blob/master/src/utilities/buildASTSchema.js

或者,也许您的工具可以使用该功能构建。由于该存储库由核心 GraphQL 团队维护,因此您可以确信它会随着规范的新增内容保持最新状态。

从评论编辑:如果您尝试从类型语言字符串生成可执行的 GraphQL 架构/服务器,那么您可以使用 graphql-tools 包中的 generateSchema 函数,如下所述:@ 987654322@

【讨论】:

  • 这看起来对我很有用!如果在接下来的几天里没有更好的答案,这将是我接受的一个。谢谢!
  • 补充 Stubailo 的答案:graphql-tools 正是这样做(以及更多)来构建一个对象,而不是一个可执行文件。这是有问题的行:github.com/apollostack/graphql-tools/blob/…
  • 哇@helfer,这对我更有用!也许你应该把它放在一个单独的答案中,或者 Stubailo 可以将它编辑到他的。
猜你喜欢
  • 1970-01-01
  • 2017-03-03
  • 2019-04-04
  • 1970-01-01
  • 2012-10-24
  • 1970-01-01
  • 2011-12-09
  • 2011-10-05
相关资源
最近更新 更多