Tom*_*cek 5 spring graphql spring-graphql
如果我在 resources/graphql 文件夹中有以下两个模式,则使用 Spring-GraphQl:
架构1:
type Query {
bookById(id: ID): Book
}
type Book {
id: ID
name: String
pageCount: Int
author: Author
}
type Author {
id: ID
firstName: String
lastName: String
}
Run Code Online (Sandbox Code Playgroud)
模式2:
type Query {
personByName(name: String): Person
}
type Person {
id: ID
firstName: String
lastName: String
}
Run Code Online (Sandbox Code Playgroud)
Spring-GraphQL 似乎将它们合并到一个 GraphQL 模式文件中,并且 Spring-Boot Graphql 应用程序的启动以以下错误结束:
引起原因:graphql.schema.idl.errors.SchemaProblem:errors=['Query'类型[@1:1]尝试重新定义现有的'Query'类型[@1:1]]
当我将其更改为:
架构1:
type Query {
bookById(id: ID): Book
personByName(name: String): Person
}
Run Code Online (Sandbox Code Playgroud)
模式2:
type Book {
id: ID
name: String
pageCount: Int
author: Author
}
type Author {
id: ID
firstName: String
lastName: String
}
type Person {
id: ID
firstName: String
lastName: String
}
Run Code Online (Sandbox Code Playgroud)
它工作得很好,我可以使用 graphiql 调用这两个查询。graphql spring 如何与多个模式一起工作?看来 spring-graphql 将文件合并到一个模式中,因此每个文件的多个查询类型会破坏应用程序。
感谢您的回答。
Spring GraphQL 正在加载配置位置下的所有模式资源,并使用TypeDefinitionRegistry::merge它们创建单个模式。
我认为重新定义任何类型(甚至是Query一个类型)都应该引发错误,否则这可能会隐藏重要问题和冲突的模式定义。这就是 GraphQL JavaTypeDefinitionRegistry正在做的事情。
您可以像这样组织架构文件:
graphql/schema.graphqls
type Query {
}
// add common directives, scalars, etc
Run Code Online (Sandbox Code Playgroud)
graphql/books.graphqls
extend type Query {
bookById(id: ID): Book
}
type Book {
id: ID
name: String
pageCount: Int
author: Author
}
type Author {
id: ID
firstName: String
lastName: String
}
Run Code Online (Sandbox Code Playgroud)
graphql/person.graphqls
extend type Query {
personByName(name: String): Person
}
type Person {
id: ID
firstName: String
lastName: String
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1915 次 |
| 最近记录: |