GraphQL - Schemat
Schemat GraphQL jest podstawą każdej implementacji serwera GraphQL. Opisuje funkcje dostępne dla aplikacji klienckich, które się z nim łączą. Możemy użyć dowolnego języka programowania, aby stworzyć schemat GraphQL i zbudować wokół niego interfejs.
Środowisko uruchomieniowe GraphQL definiuje ogólny schemat oparty na wykresie do publikowania możliwości usługi danych, którą reprezentuje. Aplikacje klienckie mogą wysyłać zapytania do schematu w ramach swoich możliwości. Takie podejście oddziela klientów od serwerów i umożliwia niezależne rozwijanie i skalowanie.
W tym rozdziale używamy serwera Apollo do wykonywania zapytań GraphQL. PlikmakeExecutableSchema funkcja w graphql-tools pomaga w powiązaniu schematu i resolwerów.
Składnia funkcji makeExecutableSchema
Plik makeExecutableSchemafunkcja przyjmuje pojedynczy argument {} typu Object. Składnia użycia tej funkcji jest podana poniżej -
import { makeExecutableSchema } from 'graphql-tools';
const jsSchema = makeExecutableSchema({
typeDefs,
resolvers, // optional
logger, // optional
allowUndefinedInResolve = false, // optional
resolverValidationOptions = {}, // optional
directiveResolvers = null, // optional
schemaDirectives = null, // optional
parseOptions = {}, // optional
inheritResolversFromInterfaces = false // optional
});
Sr.No. | Parametr i opis |
---|---|
1 | typeDefs To jest wymagany argument. Reprezentuje zapytanie GraphQL jako ciąg znaków UTF-8. |
2 | Resolvers To jest argument opcjonalny (domyślnie pusty obiekt). Zawiera funkcje obsługujące zapytanie. |
3 | logger Jest to argument opcjonalny i może służyć do drukowania błędów na konsoli serwera. |
4 | parseOptions Jest to argument opcjonalny i umożliwia dostosowanie analizy składniowej podczas określania typeDefs jako ciągu. |
5 | allowUndefinedInResolve Tak jest domyślnie. Ustawienie wartości false powoduje, że funkcje rozpoznawania zwracają błędy, jeśli zwracają wartość undefined. |
6 | resolverValidationOptions To jest argument opcjonalny i akceptuje obiekt z właściwościami logicznymi. |
7 | inheritResolversFromInterfaces Jest to argument opcjonalny i akceptuje argument logiczny w celu sprawdzenia dziedziczenia obiektów mechanizmu rozpoznawania nazw. |
Ilustracja
Stwórzmy prostą aplikację, aby zrozumieć ten schemat. Spowoduje to utworzenie schematu odpytywania listy uczniów z serwera. Dane studenta zostaną zapisane w płaskim pliku i użyjemy modułu węzła o nazwienotarealdb sfałszować bazę danych i czytać z pliku płaskiego.
Krok 1 - Pobierz i zainstaluj wymagane zależności dla projektu
Utwórz folder o nazwie schema-app. Zmień katalog na aplikację schematu z poziomu terminala. Następnie wykonaj kroki od 3 do 5 opisane w rozdziale Konfiguracja środowiska, aby zakończyć pobieranie i proces instalacji.
Krok 2 - Utwórz schemat
Dodaj schema.graphql plik w folderze projektu, schema-app i dodaj następujący kod -
type Query {
greeting:String
students:[Student]
}
type Student {
id:ID!
firstName:String
lastName:String
password:String
collegeId:String
}
Katalog główny schematu będzie typu Query. Zapytanie ma dwa pola - powitanie i Studenci, które zwraca odpowiednio ciąg znaków i listę uczniów. Student jest zadeklarowany jako typ obiektu, ponieważ zawiera wiele pól. Pole ID jest zadeklarowane jako nie dopuszcza wartości null.
Krok 3 - Utwórz resolver
Utwórz plik resolvers.js w folderze projektu i dodaj następujący kod -
const db = require('./db')
const Query = {
greeting:() => {
return "hello from TutorialsPoint !!!"
},
students:() => db.students.list()
}
module.exports = {Query}
Tutaj powitanie i uczniowie są osobami tłumaczącymi, które obsługują zapytanie. students resolver functionzwraca listę studentów z warstwy dostępu do danych. Aby uzyskać dostęp do funkcji przelicznika poza modułem, obiekt Query należy wyeksportować za pomocąmodule.exports.
Krok 4 - Uruchom aplikację
Utwórz plik server.js i zapoznaj się z krokiem 8 w rozdziale Konfiguracja środowiska. Następnym krokiem jest wykonanie polecenia npm start w terminalu. Serwer będzie działał na porcie 9000. Tutaj używamy GraphiQL jako klienta do testowania aplikacji. Otwórz przeglądarkę i wpisz adres URL,http://localhost:9000/graphiql.
Wpisz następujące zapytanie w edytorze -
{
greeting
students {
id
firstName
lastName
}
}
Zapytanie wyświetli dane wyjściowe, jak pokazano poniżej -
Note- Możemy zastąpić plik Students.json wywołaniem RESTful API w celu pobrania danych uczniów lub nawet prawdziwej bazy danych, takiej jak MySQL lub MongoDB. GraphQL staje się cienkim opakowaniem wokół oryginalnej warstwy aplikacji, aby poprawić wydajność.