GraphQL-validator
Tjek et GraphQL-skema for syntaksproblemer og se en opdeling af typer, felter, enums og direktiver
Input
Validering
Hvad er GraphQL-validatoren?
Et skema der kommer tilbage fra en federation-composer, en kodegenerator eller en håndredigering under et code review har næsten altid mindst ét syntaksproblem ved første gennemgang. En forvildet }, en uafsluttet beskrivelses-streng, en enum-krop der blev hugget af da nogen indsatte en halv skærm SDL i en chat — og pludselig sprænger opstarten af din Apollo Server med en parser-fejl der peger på linje 1, hvilket sjældent er der hvor det rigtige problem er. Denne validator går SDL'en igennem token for token og peger på den rigtige linje.
Den tjekker strukturelle regler fra GraphQL-specifikationen fra oktober 2021: hver {, ( og [ har brug for en matchende lukker af den rigtige slags; beskrivelser skrevet som """...""" skal afsluttes; strenge i anførselstegn inde i argumenter skal lukke på samme linje. Validatoren tjekker IKKE semantik — den fortæller dig ikke at Query mangler eller at et felt refererer til en udeklareret type. Til det skal du køre skemaet gennem reference-implementeringen graphql-js. Det denne side gør godt er syntaks-gennemgangen og stat-blokken, så du med ét blik ser om skemaet du lige har indsat har 14 typer eller 4, 187 felter eller 12.
Det hele kører i din browser. Ingen upload, intet skema gemmes nogen steder. Indsæt, validér, kopiér.
Sådan bruger du GraphQL-validatoren
Tre hurtige trin. Knapperne nedenfor matcher de faktiske knapper på siden.
Indsæt, upload eller hent et eksempel
Indsæt et GraphQL-skema i det venstre Input-panel — valideringen kører automatisk en brøkdel af et sekund efter du holder op med at skrive, så der er ingen Validate-knap. Klik på Upload for en .graphql-, .graphqls- eller .gql-fil, eller tryk Eksempel for at hente et realistisk e-handels-Order-skema. En typisk indsætning ser sådan her ud:
type Order { id: ID! placedAt: DateTime! customer: Customer! items: [OrderItem!]! status: OrderStatus! } enum OrderStatus { PENDING PAID SHIPPED }Både skemaer i serverstil (med extend type Query) og selvstændige type-filer virker. Kommentarer (#) og blok-streng-beskrivelser ("""...""") håndteres på samme måde som GraphQL learn-schema-dokumentationen beskriver.
Læs stat-blokken
Den højre panel viser et grønt banner hvis skemaet parses pænt, et rødt hvis ikke — og uanset hvad får du en opdeling af hvor mange type-, interface-, enum-, input-, union-, scalar- og directive-definitioner skemaet erklærer, plus det samlede antal felter, argumenter og beskrivelser. Brugbart til at sanity-tjekke et federation-merge eller sammenligne to revisioner af det samme skema. Tællingerne afspejler det som Relay GraphQL-specifikationen kalder de strukturelle dele af en definition.
Ret og indsæt igen
Hvis skemaet er ugyldigt, fortæller banneret dig den præcise linje for den ubalancerede klamme eller uafsluttede streng. Ret det, indsæt det tilbage, se banneret blive grønt. Kopiér-knappen til højre giver dig en lille JSON-stat-rapport som du kan smide i en PR-beskrivelse eller en chat-besked — praktisk når du vil vise en kollega "ja skemaet er fint, her er stat'sne" uden at dele selve SDL'en.
Hvornår du faktisk ville bruge dette
Sanity-tjek før merge
Før du merger en federation-gateway-ændring eller en schema-stitching-opdatering, indsæt det sammensatte skema her. Hvis klamme-balancen er skæv eller en beskrivelse er uafsluttet, ser du det her på to sekunder i stedet for i et CI-fail ti minutter senere. Passer godt med kommandoen rover subgraph check til den semantiske side.
Diff af to revisioner
Indsæt version A, notér stat-tallene (28 typer, 142 felter, 6 enums). Indsæt version B og sammenlign. Hvis felttallet er hoppet 40 op men der kun er tilføjet én ny type, har nogen sandsynligvis duplikeret et fragment. Stat-blokken er meget hurtigere end at scrolle gennem en 2000-linjers diff.
Onboarding af en ny konsulent
Giv dem skema-filen, peg dem på denne side og sig "hvis det bliver rødt, er din indsætning ødelagt; hvis felttallet pludselig er 800 lavere, har du kun kopieret halvdelen". Sparer frem-og-tilbage-spørgsmålet "er det her det hele?" før de overhovedet begynder at skrive resolvers.
Indsæt fra chat
Slack og Discord elsker at smadre backticks og citationstegn når de wrapper lange beskeder, så et skema som nogen indsatte i en tråd mister ofte en eller to lukke-klammer. Smid det her ind først for at finde ud af det før du åbner det i din IDE.
Almindelige spørgsmål
Validerer den semantik eller bare syntaks?
Bare syntaks — klamme-balance, streng-afslutning og en stat-walk over token-strømmen. Den tjekker IKKE at Query findes, at refererede typer er defineret, at argumenter matcher deres direktiv-definitioner, eller at en felttype er gyldig. Til fuld semantisk validering, brug reference-biblioteket graphql-js eller din servers opstartstjek.
Bliver mit skema sendt til en server?
Nej. Valideringen kører helt og holdent i din browser. Intet uploades, intet logges. Sikkert at indsætte interne eller upublicerede skemaer.
Hvilke syntaksproblemer fanger den faktisk?
Umatchede { / ( / [ med linjenummeret hvor åbneren sad, fejlmatchede lukkere som ) hvor } var ventet, uafsluttede "strings" eller """block strings""", og forvildede tegn som ikke er en del af GraphQL-token-grammatikken.
Hvorfor viser mit skema 0 typer når det tydeligvis har typer?
Stat-tælleren tæller kun en definition når både dens nøgleord (type, interface osv.) OG dens krops-klammer er til stede. Hvis du indsatte et skema der er hugget af midt i en type, bliver tællingen for den type på 0 indtil du afslutter kroppen. Validator-banneret er også rødt i det tilfælde og peger på den umatchede åbner.
Forstår den blok-streng-beskrivelser?
Ja. """An order placed by a customer.""" genkendes som en beskrivelses-token og tælles i Beskrivelser-stat'en. Validatoren håndhæver ikke hvor beskrivelser må optræde — det er et stilvalg — men tællingen giver dig en hurtig aflæsning af hvor dokumenteret skemaet er.
Hvor stort et skema kan jeg indsætte?
Hvad end din browser komfortabelt kan rendere. Skemaer med et par hundrede typer og flere tusind felter validerer langt under et sekund. Forbi 5 MB begynder Ace-editoren selv at blive langsom, og det er flaskehalsen — ikke validatoren.
Andre GraphQL-værktøjer
Validering er kun én del af at arbejde med GraphQL. Disse værktøjer klarer resten: