From a86d3d0f972bc663541927edfcac7e72453b0ff6 Mon Sep 17 00:00:00 2001 From: Lee Byron Date: Wed, 18 Apr 2018 18:27:41 -0400 Subject: [PATCH] RFC: SchemaExtension This adds new grammar to the GraphQL SDL: ```graphql extend schema { mutation: MutationType } ``` This feels like the missing piece of the type system extension framework. In addition to extending types in a type system, the top level schema should be extendable as well. --- spec/Appendix B -- Grammar Summary.md | 10 ++++++++- spec/Section 3 -- Type System.md | 31 ++++++++++++++++++++++----- 2 files changed, 35 insertions(+), 6 deletions(-) diff --git a/spec/Appendix B -- Grammar Summary.md b/spec/Appendix B -- Grammar Summary.md index 56b7d1676..8be963e78 100644 --- a/spec/Appendix B -- Grammar Summary.md +++ b/spec/Appendix B -- Grammar Summary.md @@ -187,11 +187,19 @@ Directive[Const] : @ Name Arguments[?Const]? TypeSystemDefinition : - SchemaDefinition - TypeDefinition - - TypeExtension - DirectiveDefinition + - TypeSystemExtension + +TypeSystemExtension : + - SchemaExtension + - TypeExtension SchemaDefinition : schema Directives[Const]? { OperationTypeDefinition+ } +SchemaExtension : + - extend schema Directives[Const]? { OperationTypeDefinition+ } + - extend schema Directives[Const] + OperationTypeDefinition : OperationType : NamedType Description : StringValue diff --git a/spec/Section 3 -- Type System.md b/spec/Section 3 -- Type System.md index 22137b82e..a35f5ac72 100644 --- a/spec/Section 3 -- Type System.md +++ b/spec/Section 3 -- Type System.md @@ -8,8 +8,8 @@ are valid. TypeSystemDefinition : - SchemaDefinition - TypeDefinition - - TypeExtension - DirectiveDefinition + - TypeSystemExtension The GraphQL language includes an [IDL](https://en.wikipedia.org/wiki/Interface_description_language) used to @@ -27,6 +27,18 @@ Note: The type system definition language is used throughout the remainder of this specification document when illustrating example type systems. +## Type System Extensions + +TypeSystemExtension : + - SchemaExtension + - TypeExtension + +Type system extensions are used to represent a GraphQL type system which has been +extended from some original type system. For example, this might be used by a +local service to represent data a GraphQL client only accesses locally, or by a +GraphQL service which is itself an extension of another GraphQL service. + + ## Schema SchemaDefinition : schema Directives[Const]? { RootOperationTypeDefinition+ } @@ -139,6 +151,16 @@ type Query { } ``` +### Schema Extension + +SchemaExtension : + - extend schema Directives[Const]? { OperationTypeDefinition+ } + - extend schema Directives[Const] + +Schema extensions are used to represent a schema which has been extended from +an original schema. For example, this might be used by a GraphQL service which +adds additional operation types, or additional directives to an existing schema. + ## Descriptions @@ -261,10 +283,9 @@ TypeExtension : - EnumTypeExtension - InputObjectTypeExtension -Type extensions are used to represent a GraphQL type system which has been -extended from some original type system. For example, this might be used by a -local service to represent data a GraphQL client only accesses locally, or by a -GraphQL service which is itself an extension of another GraphQL service. +Type extensions are used to represent a GraphQL type which has been extended +from some original type. For example, this might be used by a local service to +represent additional fields a GraphQL client only accesses locally. ## Scalars