@amaster507 I think your understanding is close, but [ID!] is not about emptiness of the array but the nullability of the elements of that array. Same for fields, actually…
type Foo { bar: String! }
Means you can expect a Foo to always have a String value for bar.
type Foo { bar: String }
Means it might be a String, or null