Załóżmy, że mamy pustą bazę, bez schematów, tzn. bez pustych tabel i zależności pomiędzy nimi. Nie ma końcówek.
Aby możliwa była praca bazy danych na tabelach, potrzebne jest dostarczenie schematu do bazy. Możliwe są następujące schematy:
type Greeting {
type: String
text: String!
}
Ten powyższy to zwykły typ. Co robi ? Tworzy tabelę „Greeting” o kolumnach „type” oraz „text”, nic więcej. Wartości w kolumnie „text” nie mogą być typu null.
type Message {
greeting: Greeting
}
Typ pierwszy może być potem użyty i zagnieżdżony gdzie indziej, jak powyżej.
W GraphQL są również specjalne typy, definiujące jakie zasoby baza ma wykorzystywać tj:
- końcówki będące zapytaniami do bazy danych (Query)
- końcówki służące do tworzenia, edycji oraz usunięcia danych w bazie danych (Mutation)
Na przykład:
type Query {
greet: Greeting!
sayBye: String!
}
tworzy końcówki greet oraz sayBye – obie są zapytaniami. Obie zwracają jakieś dane o podanych typach. Takie definicje pomogą bazie danych zaalokować odpowiednią przestrzeń w pamięci z której korzystają.
Innymi typami specjalnymi są typy Mutation, czyli tzw. mutacje. Mutacje służą do określenia końcówek, które tworzą, modyfikują lub usuwają dane w źródle danych.
Przykład poniżej:
type Mutation {
newNote(content: String!): Note!
}
Końcówka newNote tworzy notatkę typu Note (not-null) z zawartością w postaci content typu String. Zwraca notatkę typu Note, której jest zwrot jest wymagany w tej końcówce.