directive @core(feature: String!) repeatable on SCHEMA directive @join__owner(graph: join__Graph!) on OBJECT directive @join__type( graph: join__Graph! key: String! resolvable: Boolean = true ) repeatable on OBJECT | INTERFACE directive @join__field( graph: join__Graph requires: String provides: String ) on FIELD_DEFINITION directive @join__graph(name: String!, url: String!) on ENUM_VALUE enum join__Graph { EMAILBOOK @join__graph(name: "emailbook", url: "http://example.com/emailbook") PHONEBOOK @join__graph(name: "phonebook", url: "http://example.com/phonebook") } type Person @join__type(graph: EMAILBOOK, key: "id") @join__type(graph: PHONEBOOK, key: "id") { age: Int! @join__field(graph: EMAILBOOK) @join__field(graph: PHONEBOOK) email: String! @join__field(graph: EMAILBOOK) firstName: String! @join__field(graph: EMAILBOOK) @join__field(graph: PHONEBOOK) id: ID! lastName: String! @join__field(graph: EMAILBOOK) @join__field(graph: PHONEBOOK) phoneNumber: String @join__field(graph: PHONEBOOK) } type Query { getPersonInfo(input: InputPerson!): Person @join__field(graph: EMAILBOOK) searchPerson(input: InputPerson!): [Person] @join__field(graph: PHONEBOOK) } input InputPerson { firstName: String! lastName: String! }