Graphql 中的模式和文档有什么区别?
what's difference between schema and documents in Graphql?
Graphql 中的模式和文档有什么区别?
架构是这样的:
type Query {
fo: String
}
但是文档是这样的:
query SomeQuery {
foo {
bar
}
}
规范真的很混乱https://graphql.github.io/graphql-spec/June2018/#sec-Language.Document
我总是使用模式,但对于 graphql-code-generator 中的客户端类型生成,它需要文档文件。 https://graphql-code-generator.com/docs/getting-started/documents-field
文档实际上是任何包含有效 GraphQL 语法的字符串。根据spec,一个文档包含一个或多个定义,其中一个定义可以是:
一个操作定义
query UsersQuery {
users {
id
email
}
}
片段定义
fragment UserFragment on User {
id
email
}
类型系统定义
type User {
id: ID!
email: String!
}
类型系统扩展
extend type User {
name: String
}
操作和片段定义被称为可执行定义。发送到 GraphQL 服务的文档必须只包含可执行定义。类型系统定义和扩展用于描述模式——这就是我们通常称它们为模式定义语言 (SDL) 的原因。模式是 GraphQL 服务的 "collective type system capabilities"——它基本上是类型和指令的集合,代表您的 GraphQL 服务可以做的一切。
模式可以使用类型系统定义来描述,但是说类型定义是模式并不准确,因为模式本身也包括实际的字段解析逻辑还有。
Graphql 中的模式和文档有什么区别?
架构是这样的:
type Query {
fo: String
}
但是文档是这样的:
query SomeQuery {
foo {
bar
}
}
规范真的很混乱https://graphql.github.io/graphql-spec/June2018/#sec-Language.Document
我总是使用模式,但对于 graphql-code-generator 中的客户端类型生成,它需要文档文件。 https://graphql-code-generator.com/docs/getting-started/documents-field
文档实际上是任何包含有效 GraphQL 语法的字符串。根据spec,一个文档包含一个或多个定义,其中一个定义可以是:
一个操作定义
query UsersQuery {
users {
id
email
}
}
片段定义
fragment UserFragment on User {
id
email
}
类型系统定义
type User {
id: ID!
email: String!
}
类型系统扩展
extend type User {
name: String
}
操作和片段定义被称为可执行定义。发送到 GraphQL 服务的文档必须只包含可执行定义。类型系统定义和扩展用于描述模式——这就是我们通常称它们为模式定义语言 (SDL) 的原因。模式是 GraphQL 服务的 "collective type system capabilities"——它基本上是类型和指令的集合,代表您的 GraphQL 服务可以做的一切。
模式可以使用类型系统定义来描述,但是说类型定义是模式并不准确,因为模式本身也包括实际的字段解析逻辑还有。