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ść.