GraphQL输入类型重复数据删除

时间:2018-04-10 11:03:30

标签: graphql

说我有这个:

type Page {
  id: ID!
  title: String!
  body: String!
  comments: [Comment]
}

type Comment {
   id: ID!
   text: String!   
   someOtherField: String!
   optional: String
}

mutation AddPage (input: AddPageInput): Page!

input AddPageInput {
  title: String!
  body: String
  comment: AddPageCommentInput
}

input AddPageCommentInput {
   text: String!   
   someOtherField: String!
   optional: String
}

mutation AddComment (input: AddCommentInput): Comment!

input AddCommentInput {
   forPageId: ID!
   text: String!   
   someOtherField: String!
   optional: String
}

我想对AddPageCommentInput进行重复数据删除,因为除了AddCommentInput外,它与forPageId具有相同的字段。

我尝试做的是让AddPage解析器只需将AddPageCommentInput委托给AddComment解析器(保存Page并扩展后输入forPageId

继承(手动键入定义)是确保事物一致的唯一方法吗?

修改的 我没有这些类型,只是尝试为问题提供背景信息。

更有说服力的问题是:"我有什么选择来模仿输入的继承?"

2 个答案:

答案 0 :(得分:0)

你可以通过稍微改造一下(并在此过程中使其更清晰)来破坏问题:

input CommentInput {
   text: String!   
   someOtherField: String!
   optional: String
}

input AddPageInput {
  title: String!
  body: String
  comment: CommentInput
}

input AddCommentToPageInput {
   pageId: ID!
   comment: CommentInput!
}

type AddCommentToPagePayload {
    page: Page!
    comment: Comment!
}

mutation AddPage(input: AddPageInput!): Page!
mutation AddCommentToPage(input: AddCommentToPageInput!): AddCommentToPagePayload!

答案 1 :(得分:0)

以下是一个建议:您可以从forPageId中取出AddCommentInput字段,并将其用作第二个参数。这样您就可以放弃AddPageCommentInput并在两个地方使用AddCommentInput

代码看起来像这样:

mutation AddPage (input: AddPageInput): Page!

input AddPageInput {
  title: String!
  body: String
  comment: AddCommentInput
}

mutation AddComment (forPageId: ID!, input: AddCommentInput): Comment!

input AddCommentInput {
   text: String!   
   someOtherField: String!
   optional: String
}