graphqldomain
#
This extension provides a Sphinx domain for describing GraphQL schemas.
In order to use this extension,
add graphqldomain
to the extensions
list in your conf.py file.
extensions = ["graphqldomain"]
Directives#
- .. gql:directive:: definition#
Describes a GraphQL directive defined in a schema.
The
definition
argument is the definition of the directive, using the format described in the GraphQL spec (https://spec.graphql.org/June2018/#sec-Type-System.Directives). However it should not include the following:The
Description
, which goes into the body of this directive.The
directive
keyword.
The
:argument <name>: <description>
field can be used to document the arguments (https://spec.graphql.org/June2018/#ArgumentsDefinition).For example:
.. gql:directive:: @slow(super: Boolean = false) on FIELD_DEFINITION | ARGUMENT_DEFINITION Indicates that the usage of this field or argument is slow, and therefore queries with this field or argument should be made sparingly. :argument super: Whether usage will be super slow, or just a bit slow.
This will be rendered as:
- directive @slow(super: Boolean = false) on FIELD_DEFINITION | ARGUMENT_DEFINITION#
Indicates that the usage of this field or argument is slow, and therefore queries with this field or argument should be made sparingly.
- Arguments:
super – Whether usage will be super slow, or just a bit slow.
- .. gql:enum:: definition#
Describes a GraphQL enum defined in a schema.
The
definition
argument is the definition of the enum, using the format described in the GraphQL spec (https://spec.graphql.org/June2018/#sec-Enums). However it should not include the following:The
Description
, which goes into the body of this directive.The
enum
keyword.The
EnumValuesDefinition
. Enum values can be described with thegql:enum:value
directive.
For example:
.. gql:enum:: CharacterCase The casing of a character.
This will be rendered as:
- enum CharacterCase#
The casing of a character.
- .. gql:enum:value:: definition#
Describes a GraphQL enum value defined on an enum in a schema.
The
definition
argument is the definition of the enum value, using the format described in the GraphQL spec (https://spec.graphql.org/June2018/#EnumValueDefinition). However it should not include the following:The
Description
, which goes into the body of this directive.
For example:
.. gql:enum:: CharacterCase The casing of a character. .. gql:enum:value:: UPPER Upper case. .. gql:enum:value:: LOWER Lower case.
This will be rendered as:
- .. gql:input:: definition#
Describes a GraphQL input object defined in a schema.
The
definition
argument is the definition of the input object, using the format described in the GraphQL spec (https://spec.graphql.org/June2018/#sec-Input-Objects). However it should not include the following:The
Description
, which goes into the body of this directive.The
input
keyword.The
InputFieldDefinition
. Input values can be described with thegql:input:value
directive.
For example:
.. gql:input:: Point2D A point in a 2D coordinate system.
This will be rendered as:
- input Point2D#
A point in a 2D coordinate system.
- .. gql:input:field:: definition#
Describes a GraphQL input field defined on an input in a schema.
The
definition
argument is the definition of the input field, using the format described in the GraphQL spec (https://spec.graphql.org/June2018/#InputValueDefinition). However it should not include the following:The
Description
, which goes into the body of this directive.
For example:
.. gql:input:: Point2D A point in a 2D coordinate system. .. gql:input:field:: x: Float The ``x`` coordinate of the point. .. gql:input:field:: y: Float The ``y`` coordinate of the point.
This will be rendered as:
- .. gql:interface:: definition#
Describes a GraphQL interface defined on a schema.
The
definition
argument is the definition of the interface, using the format described in the GraphQL spec (https://spec.graphql.org/June2018/#sec-Interfaces). However it should not include the following:The
Description
, which goes into the body of this directive.The
interface
keyword.The
FieldsDefinition
. Interface fields can be described with thegql:interface:field
directive.
For example:
.. gql:interface:: NamedEntity An entity with a name.
This will be rendered as:
- interface NamedEntity#
An entity with a name.
- .. gql:interface:field:: definition#
Describes a GraphQL interface field defined on an interface in a schema.
The
definition
argument is the definition of the interface field, using the format described in the GraphQL spec (https://spec.graphql.org/June2018/#FieldDefinition). However it should not include the following:The
Description
, which goes into the body of this directive.
The
:argument <name>: <description>
field can be used to document the arguments (https://spec.graphql.org/June2018/#ArgumentsDefinition).For example:
.. gql:interface:: NamedEntity An entity with a name. .. gql:interface:field:: name(lower: Boolean = false): String The name of the entity. :argument lower: Whether to lowercase the name or not.
This will be rendered as:
- .. gql:scalar:: definition#
Describes a GraphQL scalar type defined on a schema.
The
definition
argument is the definition of the scalar type, using the format described in the GraphQL spec (https://spec.graphql.org/June2018/#sec-Scalars). However it should not include the following:The
Description
, which goes into the body of this directive.The
scalar
keyword.
For example:
.. gql:scalar:: Url A string that represents a valid URL.
This will be rendered as:
- scalar Url#
A string that represents a valid URL.
- .. gql:schema:: definition#
Describes a GraphQL schema.
The
definition
argument is the definition of the schema, using the format described in the GraphQL spec (https://spec.graphql.org/June2018/#sec-Schema). However it should not include the following:The
schema
keyword.The
RootOperationTypeDefinition
, which is documented via theoptype
field.
In other words, you should only include the directives (https://spec.graphql.org/June2018/#Directives).
The
:optype <type> (query|mutation|subscription):
field can be used to document the Root Operation Types (https://spec.graphql.org/June2018/#sec-Root-Operation-Types). If anoptype
field is specified without a type then it will default to the usual default Operation TypesQuery
,Mutation
, orSubscription
.Options
- :name:#
An arbitrary identifier given to the schema for use by Sphinx in cross-references and URLs to this schema. This can be useful for documenting multiple schemas in the same documentation, but isn’t necessary when documenting a single schema. Defaults to
__gqlschema__
.
For example:
.. gql:schema:: @mydirective :name: myschema An example schema. :optype MyQueryType query: :optype mutation: :optype MySubscriptionType subscription: .. gql:type:: MyQueryType Types and other definitions are usually grouped under a schema. .. gql:directive:: @mydirective on SCHEMA
This will be rendered as:
- schema @mydirective#
An example schema.
- Operation types:
query:
MyQueryType
mutation:
Mutation
subscription:
MySubscriptionType
- type MyQueryType#
Types and other definitions are usually grouped under a schema.
- directive @mydirective on SCHEMA#
- .. gql:type:: definition#
Describes a GraphQL object type defined on a schema.
The
definition
argument is the definition of the object type, using the format described in the GraphQL spec (https://spec.graphql.org/June2018/#sec-Objects). However it should not include the following:The
Description
, which goes into the body of this directive.The
type
keyword.The
FieldsDefinition
. Interface fields can be described with thegql:type:field
directive.
For example:
.. gql:type:: Person implements NamedEntity A human person.
This will be rendered as:
- type Person implements NamedEntity#
A human person.
- .. gql:type:field:: definition#
Describes a GraphQL field defined on an object type in a schema.
The
definition
argument is the definition of the type field, using the format described in the GraphQL spec (https://spec.graphql.org/June2018/#FieldDefinition). However it should not include the following:The
Description
, which goes into the body of this directive.The
type
keyword.The
FieldsDefinition
. Interface fields can be described with thegql:interface:value
directive.
The
:argument <name>: <description>
field can be used to document the arguments (https://spec.graphql.org/June2018/#ArgumentsDefinition).For example:
.. gql:type:: Person implements NamedEntity A human person. .. gql:type:field:: age: Int How old the person is in years. .. gql:type:field:: picture(format: String = "jpg"): Url :argument format: The desired file format of image.
This will be rendered as:
- type Person implements NamedEntity#
A human person.
- age: Int#
How old the person is in years.
- .. gql:union:: definition#
Describes a GraphQL union defined on a schema.
The
definition
argument is the definition of the union, using the format described in the GraphQL spec (https://spec.graphql.org/June2018/#sec-Unions). However it should not include the following:The
Description
, which goes into the body of this directive.The
union
keyword.
For example:
.. gql:union:: Centre = Person | Point2D A possible centre of the universe.
This will be rendered as:
Roles#
All GraphQL directives have a role with the same name that can be used to
refer to those objects.
For example a GraphQL type
defined with the gql:type
directive
can be referred to using the gql:type
role.
- :gql:directive:#
Refers to a GraphQL directive defined with the
gql:directive
rST directive.
- :gql:enum:value:#
Refers to a GraphQL enum value defined with the
gql:enum:value
rST directive.
- :gql:input:field:#
Refers to a GraphQL input field defined with the
gql:input:field
rST directive.
- :gql:interface:#
Refers to a GraphQL interface defined with the
gql:interface
rST directive.
- :gql:interface:field:#
Refers to a GraphQL interface field defined with the
gql:interface:field
rST directive.
- :gql:scalar:#
Refers to a GraphQL scalar defined with the
gql:scalar
rST directive.
- :gql:schema:#
Refers to a GraphQL schema defined with the
gql:schema
rST directive.
- :gql:type:field:#
Refers to a GraphQL type field defined with the
gql:type:field
rST directive.
Using Schema Names In Roles#
If you are documenting a single schema and therefore choose not to use the
:name:
option to name your gql:schema
,
using the schema name in roles is never required.
For example:
.. gql:schema::
.. gql:type:: MyType1
This can link to :gql:type:`MyType2`
or :gql:type:`__gqlschema__.MyType2`,
but both are rendered the same.
.. gql:type:: MyType2
This can link to :gql:type:`MyType2`
or :gql:type:`__gqlschema__.MyType2`,
but both are rendered the same.
This will be rendered as:
Advanced#
If you have more complex documentation that uses the
:name:
option to name one or more gql:schema
definitions,
then using the schema name in roles is often required to eliminate
a role ever having ambiguous targets
(e.g. if two schemas defined a MyType
type, a gql:type
to MyType
could link to the MyType
type from either schema).
Roles used inside a schema definition can skip prepending the schema name. Roles used outside a schema must prepend the schema name for named schemas.
For example:
.. gql:schema::
:name: roleschema1
.. gql:type:: RoleType1
This can link to :gql:type:`RoleType2`
or :gql:type:`roleschema1.RoleType2`.
.. gql:type:: RoleType2
This can link to :gql:type:`roleschema1.RoleType2`
but cannot link to :gql:type:`RoleType2`.
This will be rendered as:
- schema #
- type RoleType1#
This can link to
RoleType2
orroleschema1.RoleType2
.
- type RoleType2#
This can link to
roleschema1.RoleType2
but cannot link toRoleType2
.