Javascript 表示GraphQL模式的最佳方法

Javascript 表示GraphQL模式的最佳方法,javascript,graphql,Javascript,Graphql,我开始使用graphQl查询语言,我使用graphQl模式定义语言作为字符串类型来定义类型,但我看到其他开发人员使用GraphQLObjectType函数,graphQl的JavaScript引用实现使用该函数来存储有关模式的信息,我对定义模式的最佳方式感到困惑,我需要知道在什么情况下可以使用GraphQLObjectType const queryType = new GraphQLObjectType({ name: "Query", fields: {

我开始使用graphQl查询语言,我使用graphQl模式定义语言作为字符串类型来定义类型,但我看到其他开发人员使用GraphQLObjectType函数,graphQl的JavaScript引用实现使用该函数来存储有关模式的信息,我对定义模式的最佳方式感到困惑,我需要知道在什么情况下可以使用GraphQLObjectType

const queryType = new GraphQLObjectType({
  name: "Query",
  fields: {
    posts: {
      type: postType
    },
    author: {
      name: "author",
      type: authorType,
      arguments: { id: { type: new GraphQLNonNull(GraphQLInt) } }
    }
  }
});
或GraphQL模式定义语言


编辑:对不起,我的回答有点太仓促了

因此,实际上,在定义模式时,您可以这样做:

var schema = buildSchema(`
  type User {
    id: String
    name: String
  }
 
  type Query {
    user(id: String): User
  }
`);
或者使用GraphQLObjectType等以编程方式构建模式。 这取决于您的用例,但如果我的模式变得冗长,我也希望必须单独管理每个对象。更一般地说,这就是它的含义:

如果您想从其他内容(如数据库模式)自动创建GraphQL模式,这一点尤其有用。对于创建和更新数据库记录之类的内容,您可能有一种通用格式。这对于实现诸如联合类型之类的特性也很有用,因为联合类型不能清晰地映射到ES6类和模式语言

这里有一些澄清:这不是一个或另一个。GraphQL模式定义语言用于以与语言无关的方式讨论GraphQL模式。您不能按原样使用它,它只是用于描述您的模式。由于您使用的是Javascript(我假设),因此必须使用该语言库提供的内容来构建模式

什么是GraphQLObjectType

引述:

GraphQL模式最基本的组件是对象类型,它只表示一种可以从服务中获取的对象,以及它有哪些字段。。。这是一个带有一些字段的类型。模式中的大多数类型都是对象类型

顾名思义,这就是你用来描述一个物体的东西。用于描述字符串字段等的GraphQLString

GraphQL服务可以用任何语言编写。由于我们不能依赖特定的编程语言语法(如JavaScript)来讨论GraphQL模式,因此我们将定义自己的简单语言。我们将使用GraphQL模式语言-它类似于查询语言,并允许我们以一种与语言无关的方式讨论GraphQL模式


编辑:对不起,我的回答有点太仓促了

因此,实际上,在定义模式时,您可以这样做:

var schema = buildSchema(`
  type User {
    id: String
    name: String
  }
 
  type Query {
    user(id: String): User
  }
`);
或者使用GraphQLObjectType等以编程方式构建模式。 这取决于您的用例,但如果我的模式变得冗长,我也希望必须单独管理每个对象。更一般地说,这就是它的含义:

如果您想从其他内容(如数据库模式)自动创建GraphQL模式,这一点尤其有用。对于创建和更新数据库记录之类的内容,您可能有一种通用格式。这对于实现诸如联合类型之类的特性也很有用,因为联合类型不能清晰地映射到ES6类和模式语言

这里有一些澄清:这不是一个或另一个。GraphQL模式定义语言用于以与语言无关的方式讨论GraphQL模式。您不能按原样使用它,它只是用于描述您的模式。由于您使用的是Javascript(我假设),因此必须使用该语言库提供的内容来构建模式

什么是GraphQLObjectType

引述:

GraphQL模式最基本的组件是对象类型,它只表示一种可以从服务中获取的对象,以及它有哪些字段。。。这是一个带有一些字段的类型。模式中的大多数类型都是对象类型

顾名思义,这就是你用来描述一个物体的东西。用于描述字符串字段等的GraphQLString

GraphQL服务可以用任何语言编写。由于我们不能依赖特定的编程语言语法(如JavaScript)来讨论GraphQL模式,因此我们将定义自己的简单语言。我们将使用GraphQL模式语言-它类似于查询语言,并允许我们以一种与语言无关的方式讨论GraphQL模式


最好的办法在很大程度上取决于你们的情况。然而,我认为使用模式定义提供了值得考虑的好处

这是语言不可知论。如果您需要与其他人共享此模式,或者在其他工具或组件中使用它,那么使用SDL将更容易实现。 组合块比较容易。您可以在单独的文件中定义接口和类型,并根据需要将它们拉到一起。 它更简洁。在我看来,这让你在6个月后再看时更容易理解。我还认为这使得它更容易扩展和修改。 基于这些原因,我相信SDL是最好的方式。但是,在JavaScript中,这两种方法都是有效的,因此如果您对编写代码感到更舒服,那么上述注意事项就不重要了
对你来说,坚持对你有用的东西

最好的方法将在很大程度上取决于您的环境。然而,我认为使用模式定义提供了值得考虑的好处

这是语言不可知论。如果您需要与其他人共享此模式,或者在其他工具或组件中使用它,那么使用SDL将更容易实现。 组合块比较容易。您可以在单独的文件中定义接口和类型,并根据需要将它们拉到一起。 它更简洁。在我看来,这让你在6个月后再看时更容易理解。我还认为这使得它更容易扩展和修改。
基于这些原因,我相信SDL是最好的方式。但是,在JavaScript中,这两种方法都是有效的,因此,如果您更愿意编写代码,并且上面的考虑对您来说并不重要,那么请坚持使用适合您的方法

谢谢,我知道GraphQL可以用任何语言编写,目前我使用javascript,上面两种方法都可以,所以我很困惑,实际上,我没有抓住要点。很抱歉我会尽快编辑我的答案。我编辑了我的答案谢谢,我知道GraphQL可以用任何语言编写,目前我使用javascript,上面两种方法都可以,因此我很困惑,事实上,我没有抓住要点。很抱歉我将尽快编辑我的答案。我编辑了我的答案。两者都是有效的,模式优先于代码优先。。选择您的首选项两者都有效,模式优先于代码优先。。选择您的首选项Clear,谢谢,我正在使用SDL,我将继续使用它Clear,谢谢,我正在使用SDL,我将继续使用它