Graphql 中的架构和文档有什么区别?

Sae*_*tad 3 code-generation graphql

Graphql 中的架构和文档有什么区别?

架构是这样的:

type Query {
   fo: String
}
Run Code Online (Sandbox Code Playgroud)

但文件是这样的:

query SomeQuery {
  foo {
    bar
  }
}
Run Code Online (Sandbox Code Playgroud)

规范真的很混乱https://graphql.github.io/graphql-spec/June2018/#sec-Language.Document

我总是使用模式,但对于 graphql-code-generator 中的客户端类型生成,它需要文档文件。https://graphql-code-generator.com/docs/getting-started/documents-field

Dan*_*den 5

文档实际上是包含有效 GraphQL 语法的任何字符串。根据规范,文档包含一个或多个定义,其中定义可以是:

操作定义

query UsersQuery {
  users {
    id
    email
  }
}
Run Code Online (Sandbox Code Playgroud)

片段定义

fragment UserFragment on User {
  id
  email
}
Run Code Online (Sandbox Code Playgroud)

类型系统定义

type User {
  id: ID!
  email: String!
}
Run Code Online (Sandbox Code Playgroud)

类型系统扩展

extend type User {
  name: String
}
Run Code Online (Sandbox Code Playgroud)

操作和片段定义称为可执行定义。发送到 GraphQL 服务的文档必须只包含可执行定义。类型系统定义和扩展用于描述模式——这就是我们通常称它们为模式定义语言 (SDL) 的原因。模式是 GraphQL 服务的“集合类型系统功能”——它基本上是类型和指令的集合,代表您的 GraphQL 服务可以做的一切。

可以使用类型系统定义来描述模式,但说类型定义就是模式并不准确,因为模式本身也包括实际的字段解析逻辑。