Schematy w GraphQL

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.