title: graphql, how to design input type when there are "add" and "update" mutation?
body: <p>Here are my requirements: </p>
  
  <ol>
  <li><p>"add" mutation, every field(or called scalar) of <code>BookInput</code> input type should have additional type modifiers "!" to validate the non-null value. Which means when I add a book, the argument must have <code>title</code> and <code>author</code> field, like <code>{title: "angular", author: "novaline"}</code></p></li>
  <li><p>"update" mutation, I want to update a part of fields of the book, don't want to update whole book(MongoDB document, And, I don't want front-end to pass graphql server a whole big book mutation argument for saving bandwidth). Which means the book argument can be <code>{title: "angular"}</code> or <code>{title: "angular", author: "novaline"}</code>.</p></li>
  </ol>
  
  <p>Here are my type definitions:</p>
  
  <pre class="lang-js prettyprint-override"><code>const typeDefs = `
    input BookInput {
      title: String!
      author: String!
    }
  
    type Book {
      id: ID!
      title: String!
      author: String!
    }
  
    type Query {
      books: [Book!]!
    }
  
    type Mutation{
      add(book: BookInput!): Book
      update(id: String!, book: BookInput!): Book
    }
  `;
  </code></pre>
  
  <p>For now, "add" mutation works fine. But "update" mutation cannot pass the non-null check if I pass <code>{title: "angular"}</code> argument</p>
  
  <p>Here is a mutation which does not pass the non-null check, lack of "author" field for <code>BookInput</code> input type.</p>
  
  <pre><code>mutation {
    update(id: "1", book: {title: "angular"}) {
      id
      title
      author
    }
  }
  </code></pre>
  
  <p>So, graphql will give me an error: </p>
  
  <pre><code>{
    "errors": [
      {
        "message": "Field BookInput.author of required type String! was not provided.",
        "locations": [
          {
            "line": 2,
            "column": 24
          }
        ]
      }
    ]
  }
  </code></pre>
  
  <p>How do I design the <code>BookInput</code> input type? Don't want to define <code>addBookInput</code> and <code>updateBookInput</code>. It's duplicated.</p>