GraphQL-validator
Kontrollera ett GraphQL-schema för syntaxproblem och se en uppdelning av typer, fält, enums och direktiv
Indata
Validering
Vad är GraphQL-validatorn?
Ett schema som kommer tillbaka från en federation-composer, en kodgenerator eller en handredigering under en code review har nästan alltid minst ett syntaxproblem vid första genomgången. En vilsen }, en oavslutad beskrivningssträng, en enum-kropp som blev kapad när någon klistrade in halva skärmen SDL i en chatt — och plötsligt sprängs uppstarten av din Apollo Server med ett parsningsfel som pekar på rad 1, vilket sällan är där det riktiga problemet ligger. Den här validatorn går igenom SDL token för token och pekar på den verkliga raden.
Den kontrollerar strukturella regler från GraphQL-specifikationen från oktober 2021: varje {, ( och [ behöver en matchande stängare av rätt sort; beskrivningar skrivna som """...""" måste avslutas; citerade strängar inom argument måste stängas på samma rad. Validatorn verifierar INTE semantik — den talar inte om för dig att Query saknas eller att ett fält refererar till en odeklarerad typ. För det, kör schemat genom referensimplementationen graphql-js. Det den här sidan gör bra är syntaxgenomgången och statistikblocket, så att du med en blick ser om schemat du just klistrade in har 14 typer eller 4, 187 fält eller 12.
Allt körs i din webbläsare. Ingen uppladdning, inget schema sparas någonstans. Klistra in, validera, kopiera.
Så använder du GraphQL-validatorn
Tre snabba steg. Knapparna nedan motsvarar de faktiska knapparna på sidan.
Klistra in, ladda upp eller hämta ett exempel
Klistra in ett GraphQL-schema i den vänstra Indata-panelen — valideringen körs automatiskt en bråkdel av en sekund efter att du slutat skriva, så det finns ingen Validate-knapp. Klicka på Ladda upp för en .graphql-, .graphqls- eller .gql-fil, eller tryck Exempel för att hämta ett realistiskt e-handels-Order-schema. En typisk inklistring ser ut så här:
type Order { id: ID! placedAt: DateTime! customer: Customer! items: [OrderItem!]! status: OrderStatus! } enum OrderStatus { PENDING PAID SHIPPED }Både scheman i serverstil (med extend type Query) och fristående typfiler fungerar. Kommentarer (#) och blocksträngsbeskrivningar ("""...""") hanteras precis som GraphQL learn-schema-dokumentationen beskriver.
Läs statistikblocket
Den högra panelen visar en grön banner om schemat parsas rent, en röd om inte — och oavsett vilket får du en uppdelning av hur många type-, interface-, enum-, input-, union-, scalar- och directive-definitioner schemat deklarerar, plus totalt antal fält, argument och beskrivningar. Användbart för att sanity-checka en federation-merge eller jämföra två revisioner av samma schema. Räkningarna speglar det som Relays GraphQL-specifikation kallar de strukturella delarna av en definition.
Fixa och klistra in på nytt
Om schemat är ogiltigt talar bannern om för dig den exakta raden för den obalanserade klammern eller den oavslutade strängen. Fixa det, klistra in igen, se bannern bli grön. Kopiera-knappen till höger ger dig en liten JSON-statistikrapport som du kan släppa in i en PR-beskrivning eller ett chattmeddelande — bra när du vill visa en kollega "ja schemat är okej, här är statistiken" utan att dela själva SDL:en.
När du faktiskt skulle använda detta
Sanity-check före merge
Innan du mergar en federation-gateway-ändring eller en schema-stitching-uppdatering, klistra in det sammansatta schemat här. Om klammerbalansen är skev eller en beskrivning är oavslutad ser du det här på två sekunder istället för i en CI-failure tio minuter senare. Passar bra ihop med kommandot rover subgraph check för den semantiska sidan.
Diffa två revisioner
Klistra in version A, anteckna statistiksiffrorna (28 typer, 142 fält, 6 enums). Klistra in version B, jämför. Om fältcount har hoppat upp 40 men bara en ny typ lagts till har förmodligen någon duplicerat ett fragment. Statistikblocket är mycket snabbare än att skrolla genom en diff på 2000 rader.
Onboarda en ny konsult
Ge dem schemafilen, peka dem på den här sidan och säg "om det blir rött är din inklistring trasig; om fältcount plötsligt är 800 lägre har du bara kopierat halva." Sparar fram-och-tillbaka-frågandet "är det här allt?" innan de ens börjar skriva resolvers.
Klistra in från chatt
Slack och Discord älskar att förstöra backticks och citattecken när de bryter långa meddelanden, så ett schema som någon klistrade in i en tråd förlorar ofta en eller två stängande klamrar. Släpp in det här först för att få veta innan du öppnar det i din IDE.
Vanliga frågor
Validerar den semantik eller bara syntax?
Bara syntax — klammerbalans, strängavslutning och en statistikgenomgång över tokenströmmen. Den kontrollerar INTE att Query existerar, att refererade typer är definierade, att argument matchar sina direktivdefinitioner eller att en fälttyp är giltig. För full semantisk validering, använd referensbiblioteket graphql-js eller din servers uppstartskontroller.
Skickas mitt schema till en server?
Nej. Valideringen körs helt i din webbläsare. Inget laddas upp, inget loggas. Tryggt att klistra in interna eller opublicerade scheman.
Vilka syntaxproblem fångar den faktiskt?
Omatchade { / ( / [ med radnumret där öppnaren satt, felmatchade stängare som ) där } väntades, oavslutade "strings" eller """block strings""", och vilsekomna tecken som inte hör till GraphQL-tokengrammatiken.
Varför visar mitt schema 0 typer när det tydligt har typer?
Statistikräknaren räknar bara en definition när både dess nyckelord (type, interface osv.) OCH dess kroppsklamrar finns på plats. Om du klistrade in ett schema som är avhugget mitt i en typ stannar räkningen för den typen på 0 tills du avslutar kroppen. Validator-bannern blir också röd i det fallet och pekar på den omatchade öppnaren.
Förstår den blocksträngsbeskrivningar?
Ja. """An order placed by a customer.""" känns igen som en beskrivnings-token och räknas i Beskrivningar-statistiken. Validatorn tvingar inte var beskrivningar får dyka upp — det är ett stilval — men räkningen ger dig en snabb avläsning av hur dokumenterat schemat är.
Hur stort schema kan jag klistra in?
Vad som helst som din webbläsare bekvämt kan rendera. Scheman med några hundra typer och flera tusen fält valideras gott och väl under en sekund. Förbi 5 MB börjar Ace-editorn själv bli långsam, vilket är flaskhalsen — inte validatorn.
Andra GraphQL-verktyg
Validering är bara en del av att jobba med GraphQL. Dessa verktyg sköter resten: