86 lines
		
	
	
	
		
			1.4 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			86 lines
		
	
	
	
		
			1.4 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
---
 | 
						|
tags: [graphql]
 | 
						|
---
 | 
						|
 | 
						|
# Schema Definition Language
 | 
						|
 | 
						|
SDL is the formal name for the syntax of GraphQL schemas.
 | 
						|
 | 
						|
## Types
 | 
						|
 | 
						|
A schema is a collection of object types that contain fields. Each field has a
 | 
						|
type of its own. A field's type can be a primitive/scalar value (such as an
 | 
						|
`Int` or a `String`), or it can be another object type (just like a custom type
 | 
						|
in TS).
 | 
						|
 | 
						|
A schema's type can be non-nullable which is to say, a required field. We
 | 
						|
indicate this with `!`.
 | 
						|
 | 
						|
A type for a field can be a collection/array of a given type.
 | 
						|
 | 
						|
The following example indicates these properties:
 | 
						|
 | 
						|
```gql
 | 
						|
type Person {
 | 
						|
  age: Int
 | 
						|
  name: String
 | 
						|
  pets: [Pet]!
 | 
						|
}
 | 
						|
 | 
						|
type Pet {
 | 
						|
  species: String
 | 
						|
  name: String
 | 
						|
  age: Int
 | 
						|
}
 | 
						|
```
 | 
						|
 | 
						|
## Queries
 | 
						|
 | 
						|
A query is also a schema type but of a special sort.
 | 
						|
 | 
						|
> The fields of this type are entry points into the rest of the schema. These
 | 
						|
> are the top-level fields that the client can query for.
 | 
						|
 | 
						|
For example if we had this type:
 | 
						|
 | 
						|
```graphql
 | 
						|
type Track {
 | 
						|
  id: ID!
 | 
						|
    author: Author!
 | 
						|
  thumbnail: String
 | 
						|
  length: Int
 | 
						|
  modulesCount: Int
 | 
						|
}
 | 
						|
```
 | 
						|
 | 
						|
We could define a type to access a give `Track` as follows:
 | 
						|
 | 
						|
```graphql
 | 
						|
type Query {
 | 
						|
  tracksForHomePage: [Track!]!
 | 
						|
}
 | 
						|
```
 | 
						|
 | 
						|
Then use this type as the basis for a query:
 | 
						|
 | 
						|
```
 | 
						|
 | 
						|
```
 | 
						|
 | 
						|
## Descriptions
 | 
						|
 | 
						|
Descriptions are comments that allow you to document your Schema
 | 
						|
 | 
						|
Single line:
 | 
						|
 | 
						|
```gql
 | 
						|
"Single line comment"
 | 
						|
```
 | 
						|
 | 
						|
```gql
 | 
						|
"""
 | 
						|
Multi
 | 
						|
line
 | 
						|
comment
 | 
						|
"""
 | 
						|
```
 |