我在后端使用Spring和Netflix的DGS库进行GraphQL。我们的应用程序有多个模块(多级项目),每个模块负责一件事。因此,我想根据该模块的业务逻辑将GQL模式拆分为多个文件(假设我们有一些包,比如cars, people, animals和父模块app,其中包含主SpringBootApp类),所以我只想对路径上的一个特定包进行突变和查询,而不是其他包。(我不想看到cars在animal包中发生突变)
问题是我不能在项目中有多个Mutation类型的定义,所以我尝试放置extend type Mutation,但是当我运行我的测试时,它失败了,因为他们不知道父模式,因为唯一的cars模式是复制的,而不是父模式。
我还尝试创建一些Gradle任务,该任务将复制模式并从文件中删除extend关键字,这是可行的,但这不是最好的解决方案。
另一种选择可能是为UseMutation、CarMutation等突变创建一种新类型,但不确定这是否是正确的方法。
您还有其他的想法吗?如何工作和处理这种模式分离?非常感谢。
发布于 2021-12-27 00:04:42
您想要做的可能是有一个名为schema的文件夹,您的所有模式定义都在其中。
您可能有,例如在car.js中
extend type Mutation{
someRandomMutation : String !
}
extend type Query{
someRandomQuery : Int!
}然后,在您的index.js中,您必须首先为扩展它们的所有这些部分定义Mutation和Query类型:
import car from './car'
import people from './people'
const linkSchema=gql`
scalar Date
scalar Upload
type Query{
_:Boolean
}
type Mutation{
_:Boolean
}
type Subscription{
_:Boolean
}
`
export default [car , people , linkSchema]然后,在服务器的index.js (或任何初始化阿波罗服务器的地方):
import typeDefs from './schema'
const schema = makeExecutableSchema({ typeDefs, resolvers });
const server = new ApolloServer({
schema,
....
});https://stackoverflow.com/questions/70374943
复制相似问题