title: When to use GraphQLID instead of GraphQLInt?
body: <p>It is not clear when to use <a href="http://graphql.org/docs/api-reference-type-system/#graphqlid" rel="noreferrer"><code>GraphQLID</code></a> instead of <a href="http://graphql.org/docs/api-reference-type-system/#graphqlint" rel="noreferrer"><code>GraphQLInt</code></a>.</p>
  
  <p>Consider the following schema:</p>
  
  <pre><code>type User {
    id: Int!
    firstName: String!
    lastName: String!
  }
  
  type Query {
    user (id: ID!): User
  }
  </code></pre>
  
  <p>In case of <code>Query.user</code>, it seem to make no difference whether to use <code>GraphQLID</code> or <code>GraphQLInt</code>.</p>
  
  <p>In case of <code>User.id</code>, using <code>GraphQLID</code> will cast the input to string. Using <code>GraphQLInt</code> will ensure that the input is an integer.</p>
  
  <p>This makes the query and type system inconsistent.</p>
  
  <p>The <a href="/questions/tagged/graphql-js" class="post-tag" title="show questions tagged &#39;graphql-js&#39;" rel="tag">graphql-js</a>  <a href="http://graphql.org/docs/api-reference-type-system/#graphqlid" rel="noreferrer">spec</a> simply says:</p>
  
  <blockquote>
    <p>A <code>GraphQLScalarType</code> that represents an ID.</p>
  </blockquote>
  
  <p>Is this an implementation detail (e.g. should GraphQL client cast <code>GraphQLID</code> to an integer when it can), or is it expected that <code>ID</code> is always a string in <a href="/questions/tagged/graphql" class="post-tag" title="show questions tagged &#39;graphql&#39;" rel="tag">graphql</a>?</p>