Walidator GraphQL
Sprawdź schemat GraphQL pod kątem problemów ze składnią i zobacz zestawienie typów, pól, enumów i dyrektyw
Wejście
Walidacja
Czym jest Walidator GraphQL?
Schemat, który wraca z federation composera, generatora kodu albo edycji ręcznej w trakcie code review prawie zawsze ma w pierwszym przebiegu przynajmniej jeden problem ze składnią. Zabłąkane }, niezakończony ciąg opisu, ciało enuma ucięte, gdy ktoś wkleił pół ekranu SDL do czatu — i zanim się obejrzysz, start Twojego Apollo Server wybucha błędem parsera wskazującym linię 1, która rzadko jest miejscem prawdziwego problemu. Ten walidator przechodzi po SDL token po tokenie i wskazuje właściwą linię.
Sprawdza reguły strukturalne ze specyfikacji GraphQL z października 2021: każdy {, ( i [ potrzebuje dopasowanego zamknięcia odpowiedniego rodzaju; opisy zapisane jako """...""" muszą być zakończone; ciągi w cudzysłowach wewnątrz argumentów muszą zamykać się w tej samej linii. Walidator NIE sprawdza semantyki — nie powie Ci, że brakuje Query ani że pole odwołuje się do niezadeklarowanego typu. Do tego przepuść schemat przez referencyjną implementację graphql-js. To, co ta strona robi dobrze, to przebieg składniowy i blok statystyk, dzięki czemu od razu widzisz, czy schemat, który właśnie wkleiłeś, ma 14 typów czy 4, 187 pól czy 12.
Wszystko działa w Twojej przeglądarce. Bez wysyłania, bez zapisywania schematu gdziekolwiek. Wklej, zwaliduj, skopiuj.
Jak używać Walidatora GraphQL
Trzy szybkie kroki. Przyciski poniżej odpowiadają faktycznym przyciskom na tej stronie.
Wklej, wgraj lub załaduj przykład
Wklej schemat GraphQL do lewego panelu Wejście — walidacja uruchamia się automatycznie ułamek sekundy po tym, jak przestaniesz pisać, więc nie ma przycisku Validate. Kliknij Wgraj dla pliku .graphql, .graphqls lub .gql, albo naciśnij Przykład, aby załadować realistyczny schemat e-commerce Order. Typowe wklejenie wygląda tak:
type Order { id: ID! placedAt: DateTime! customer: Customer! items: [OrderItem!]! status: OrderStatus! } enum OrderStatus { PENDING PAID SHIPPED }Działają zarówno schematy w stylu serwerowym (z extend type Query), jak i samodzielne pliki typów. Komentarze (#) i opisy w postaci ciągów blokowych ("""...""") są obsługiwane tak, jak opisuje to dokumentacja learn-schema GraphQL.
Czytaj blok statystyk
Prawy panel pokazuje zielony banner, jeśli schemat parsuje się czysto, czerwony, jeśli nie — i tak czy inaczej dostajesz zestawienie, ile definicji type, interface, enum, input, union, scalar i directive deklaruje schemat, plus łączną liczbę pól, argumentów i opisów. Przydatne do sprawdzenia poprawności merge'a federation albo porównania dwóch wersji tego samego schematu. Zliczenia odzwierciedlają to, co specyfikacja GraphQL Relay nazywa strukturalnymi częściami definicji.
Popraw i wklej ponownie
Jeśli schemat jest niepoprawny, banner mówi Ci dokładną linię niezbalansowanego nawiasu lub niezakończonego ciągu. Popraw, wklej z powrotem, patrz, jak banner robi się zielony. Przycisk Kopiuj po prawej daje Ci mały raport JSON ze statystykami, który możesz wrzucić do opisu PR-a albo wiadomości na czacie — przydatne, gdy chcesz pokazać koledze z zespołu „tak, schemat jest ok, oto statystyki" bez udostępniania samego SDL.
Kiedy faktycznie tego użyjesz
Sprawdzenie poprawności przed merge'em
Zanim zmergujesz zmianę w gateway-u federation albo aktualizację schema-stitchingu, wklej tutaj złożony schemat. Jeśli balans nawiasów się rozjedzie albo opis nie zostanie zakończony, zobaczysz to tu w dwie sekundy zamiast w błędzie CI dziesięć minut później. Dobrze pasuje do polecenia rover subgraph check dla strony semantycznej.
Diff dwóch wersji
Wklej wersję A, zanotuj liczby ze statystyk (28 typów, 142 pola, 6 enumów). Wklej wersję B i porównaj. Jeśli liczba pól skoczyła o 40, ale dodano tylko jeden nowy typ, ktoś prawdopodobnie zduplikował fragment. Blok statystyk jest dużo szybszy niż przewijanie diff-a na 2000 linii.
Onboarding nowego kontraktora
Daj mu plik schematu, wskaż tę stronę i powiedz „jeśli zrobi się czerwony, twoje wklejenie jest popsute; jeśli liczba pól nagle spadnie o 800, skopiowałeś tylko połowę." Oszczędza wymianę „czy to wszystko?" jeszcze zanim zacznie pisać resolvery.
Wklejanie z czatu
Slack i Discord uwielbiają masakrować backticki i znaki cudzysłowu, gdy zawijają długie wiadomości, więc schemat, który ktoś wkleił do wątku, często traci jeden lub dwa nawiasy zamykające. Wrzuć go najpierw tutaj, żeby się dowiedzieć, zanim otworzysz go w IDE.
Najczęstsze pytania
Czy waliduje semantykę, czy tylko składnię?
Tylko składnię — balans nawiasów, zakończenie ciągów i przejście statystyk po strumieniu tokenów. NIE sprawdza, czy Query istnieje, czy referowane typy są zdefiniowane, czy argumenty pasują do swoich definicji dyrektyw, ani czy typ pola jest poprawny. Do pełnej walidacji semantycznej użyj referencyjnej biblioteki graphql-js albo sprawdzeń startowych Twojego serwera.
Czy mój schemat jest wysyłany na serwer?
Nie. Walidacja odbywa się w całości w Twojej przeglądarce. Nic nie jest wysyłane, nic nie jest logowane. Bezpiecznie wklejać schematy wewnętrzne lub niepubliczne.
Jakie problemy ze składnią faktycznie wyłapie?
Niedopasowane { / ( / [ z numerem linii, w której był otwierający, źle dopasowane zamknięcia jak ) tam, gdzie spodziewane było }, niezakończone "strings" lub """block strings""" oraz zabłąkane znaki, które nie są częścią gramatyki tokenów GraphQL.
Dlaczego mój schemat pokazuje 0 typów, choć wyraźnie ma typy?
Licznik statystyk liczy definicję dopiero wtedy, gdy obecne są zarówno jej słowo kluczowe (type, interface itd.), JAK I nawiasy ciała. Jeśli wkleiłeś schemat ucięty w środku typu, licznik dla tego typu pozostaje na 0, dopóki nie skończysz ciała. Banner walidatora w takim przypadku też będzie czerwony i wskaże niedopasowany otwierający.
Czy rozumie opisy w postaci ciągów blokowych?
Tak. """An order placed by a customer.""" jest rozpoznawane jako token opisu i liczone w statystyce Opisy. Walidator nie wymusza, gdzie mogą pojawiać się opisy — to wybór stylistyczny — ale licznik daje Ci szybki obraz, jak udokumentowany jest schemat.
Jak duży schemat mogę wkleić?
Tyle, ile Twoja przeglądarka jest w stanie komfortowo wyrenderować. Schematy z kilkuset typami i kilkoma tysiącami pól walidują się znacznie poniżej sekundy. Powyżej 5 MB sam edytor Ace zaczyna zwalniać i to on jest wąskim gardłem — nie walidator.
Inne narzędzia GraphQL
Walidacja to tylko jeden element pracy z GraphQL. Te narzędzia obsłużą resztę: