在阅读Apollo Server文档时,建议对突变使用突变响应界面:
为了提供整个架构的一致性,我们建议 引入一个
MutationResponse
接口,可以在 模式中的每个突变响应并启用事务性 除正常突变响应外,还应返回的信息 对象。
https://www.apollographql.com/docs/apollo-server/essentials/schema.html
我了解界面在以下情况下的好处:用例中,您有一个事件界面,然后又有不同类型的事件,例如音乐会,会议等。我的理解是,该界面将使您例如,使用单个查询搜索所有事件,并返回多种类型的事件。
我很困惑为什么应该将一个接口用于突变反应,以及与标准反应类型相比有什么好处?
答案 0 :(得分:3)
与联合一样,接口是一种抽象类型,它允许字段返回多种类型之一。根据规格:
当期望使用许多对象类型之一时,产生接口的字段很有用,但应保证某些字段。
但是,接口还强制实现类型具有一组特定的字段和参数。确切的规则可以在规范中找到here,但可以归结为:
通过创建一个接口并使用多种类型的接口,您可以有效地创建一个安全网,以帮助确保相关类型之间结构的一致性。假设我们实现了Apollo文档中建议的某些响应类型,而没有接口:
type UpdateUserMutationResponse {
code: String!
success: Boolean!
message: String!
user: User
}
type UpdatePostMutationResponse {
code: String!
success: Boolean!
message: String
post: Post
}
这些类型的定义一目了然-我们有code
,success
和message
的字段,以及与该响应相关的其他任何字段。但是,我们有一个类型,并且意外地使message
上的UpdatePostMutationResponse
字段为空。尽管这可能是无害的,但是如果我们确实在解析器中忽略了该消息,则可能直到后来才被忽略(希望在质量检查中,但可能在生产中!)。
但是,如果我们让这些类型实现MutationResponse
接口,则可以确保即使有这样的不一致,我们的架构也不会建立。
通过这种方式,即使我们从未使用MutationResponse
作为字段的返回类型,我们仍然可以从使用接口中受益。