GraphQL Doğrulayıcı
Bir GraphQL şemasını sözdizimi sorunları için kontrol edin ve türlerin, alanların, enum'ların ve directive'lerin dökümünü görün
Giriş
Doğrulama
GraphQL Doğrulayıcı nedir?
Bir federation composer'dan, bir kod üreticisinden veya code review sırasında elle yapılan bir düzenlemeden gelen şemada, ilk geçişte neredeyse her zaman en az bir sözdizimi sorunu vardır. Yanlış yere düşmüş bir }, kapatılmamış bir açıklama string'i, birinin SDL'in yarım ekranını bir sohbete kopyaladığında kesilen bir enum gövdesi — ve bir bakmışsınız Apollo Server başlangıcınız 1. satırı işaret eden bir parser hatasıyla havaya uçuyor; ki gerçek sorunun olduğu yer pek nadiren orasıdır. Bu doğrulayıcı SDL'i token token gezer ve gerçek satırı işaret eder.
Ekim 2021 GraphQL spesifikasyonundaki yapısal kuralları kontrol eder: her {, ( ve [ doğru türde eşleşen bir kapatıcıya ihtiyaç duyar; """...""" olarak yazılan açıklamalar sonlandırılmak zorundadır; argümanların içindeki tırnaklı string'ler aynı satırda kapanmak zorundadır. Doğrulayıcı semantik kontrol YAPMAZ — size Query'nin eksik olduğunu veya bir alanın bildirilmemiş bir türe referans verdiğini söylemez. Onun için, şemayı referans graphql-js uygulamasından geçirin. Bu sayfanın iyi yaptığı şey sözdizimi geçişi ve istatistik bloğu — böylece az önce yapıştırdığınız şemada 14 tür mü 4 tür mü olduğunu, 187 alan mı 12 alan mı olduğunu bir bakışta görebilirsiniz.
Her şey tarayıcınızda çalışır. Yükleme yok, hiçbir yerde saklanan şema yok. Yapıştır, doğrula, kopyala.
GraphQL Doğrulayıcı Nasıl Kullanılır
Üç hızlı adım. Aşağıdaki düğmeler bu sayfadaki gerçek düğmelerle eşleşir.
Yapıştırın, Yükleyin veya Bir Örnek Yükleyin
Soldaki Giriş paneline bir GraphQL şeması yapıştırın — yazmayı bıraktıktan saniyenin çok küçük bir kısmı sonra doğrulama otomatik olarak çalışır, yani Validate düğmesi yoktur. .graphql, .graphqls veya .gql dosyası için Yükle'ye tıklayın ya da gerçekçi bir e-ticaret Order şemasını yüklemek için Örnek'e basın. Tipik bir yapıştırma şöyle görünür:
type Order { id: ID! placedAt: DateTime! customer: Customer! items: [OrderItem!]! status: OrderStatus! } enum OrderStatus { PENDING PAID SHIPPED }Hem sunucu tarzı şemalar (extend type Query içeren) hem de bağımsız tür dosyaları çalışır. Yorumlar (#) ve blok string açıklamaları ("""...""") GraphQL learn-schema dokümanlarının anlattığı şekilde işlenir.
İstatistik Bloğunu Okuyun
Sağ panel, şema temiz parse edilirse yeşil bir banner, edilmezse kırmızı bir banner gösterir — ve her iki durumda da şemanın bildirdiği type, interface, enum, input, union, scalar ve directive tanımlarının sayısının dökümünü, ayrıca toplam alan sayısı, argüman sayısı ve açıklama sayısını alırsınız. Bir federation merge'inin sağlığını kontrol etmek veya aynı şemanın iki revizyonunu karşılaştırmak için kullanışlıdır. Sayımlar, Relay GraphQL spesifikasyonunun bir tanımın yapısal parçaları olarak adlandırdığı şeyleri yansıtır.
Düzeltin ve Yeniden Yapıştırın
Şema geçersizse, banner size eşleşmeyen süslü parantezin veya kapatılmamış string'in tam satırını söyler. Düzeltin, geri yapıştırın, banner'ın yeşile dönmesini izleyin. Sağdaki Kopyala düğmesi size bir PR açıklamasına veya bir sohbet mesajına bırakabileceğiniz küçük bir JSON istatistik raporu verir — bir takım arkadaşınıza SDL'in kendisini paylaşmadan "evet şema iyi, işte istatistikler" demek istediğinizde işe yarar.
Bunu Gerçekten Ne Zaman Kullanırsınız
Merge öncesi sağlık kontrolü
Bir federation gateway değişikliğini veya schema-stitching güncellemesini merge etmeden önce, oluşturulan şemayı buraya yapıştırın. Süslü parantez dengesi bozuksa veya bir açıklama sonlandırılmamışsa, on dakika sonraki bir CI başarısızlığı yerine bunu burada iki saniyede görürsünüz. Semantik taraf için rover subgraph check komutuyla iyi eşleşir.
İki revizyonu karşılaştırma
Sürüm A'yı yapıştırın, istatistik sayılarını not edin (28 tür, 142 alan, 6 enum). Sürüm B'yi yapıştırın, karşılaştırın. Alan sayısı 40 atlamış ama yalnızca bir yeni tür eklenmişse, muhtemelen birisi bir fragment'i kopyalamıştır. İstatistik bloğu, 2000 satırlık bir diff'i kaydırmaktan çok daha hızlıdır.
Yeni bir dış kaynak geliştiriciyi onboard etme
Şema dosyasını ona verin, bu sayfayı gösterin ve "kırmızıya dönerse, yapıştırman bozuk demektir; alan sayısı aniden 800 daha düşükse, sadece yarısını kopyalamışsındır" deyin. Resolver yazmaya başlamadan önceki "hepsi bu kadar mı?" gidip gelmesini ortadan kaldırır.
Sohbetten yapıştırma
Slack ve Discord uzun mesajları sararken backtick'leri ve tırnak karakterlerini bozmaya bayılır, bu yüzden birinin bir thread'e yapıştırdığı bir şema genellikle bir veya iki kapatma süslü parantezini kaybeder. IDE'nizde açmadan önce, ne olduğunu öğrenmek için önce buraya bırakın.
Sık Sorulan Sorular
Semantiği mi yoksa sadece sözdizimini mi doğrular?
Sadece sözdizimini — süslü parantez dengesi, string sonlandırma ve token akışı üzerinde istatistik gezintisi. Query'nin var olduğunu, referans verilen türlerin tanımlandığını, argümanların directive tanımlarıyla eşleştiğini veya bir alan türünün geçerli olduğunu KONTROL ETMEZ. Tam semantik doğrulama için referans graphql-js kütüphanesini veya sunucunuzun başlangıç kontrollerini kullanın.
Şemam bir sunucuya gönderiliyor mu?
Hayır. Doğrulama tamamen tarayıcınızda çalışır. Hiçbir şey yüklenmez, hiçbir şey loglanmaz. Şirket içi veya yayınlanmamış şemaları yapıştırmak güvenlidir.
Aslında hangi sözdizimi sorunlarını yakalar?
Eşi olmayan { / ( / [ ve açıcının bulunduğu satır numarası, } beklenen yerde ) gibi yanlış eşlenmiş kapatıcılar, sonlandırılmamış "strings" veya """block strings""" ve GraphQL token gramerinin parçası olmayan başıboş karakterler.
Şemamda açıkça türler varken neden 0 tür gösteriyor?
İstatistik sayacı bir tanımı yalnızca hem anahtar kelimesi (type, interface vb.) HEM DE gövde süslü parantezleri mevcut olduğunda sayar. Bir türün ortasında kesilmiş bir şema yapıştırdıysanız, gövdeyi tamamlayana kadar o türün sayımı 0 olarak kalır. Bu durumda doğrulayıcı banner'ı da kırmızı olur ve eşi olmayan açıcıyı işaret eder.
Blok string açıklamalarını anlıyor mu?
Evet. """An order placed by a customer.""" bir açıklama token'ı olarak tanınır ve Açıklamalar istatistiğinde sayılır. Doğrulayıcı, açıklamaların nerede görüneceğini zorunlu kılmaz — bu bir stil tercihidir — ama sayım size şemanın ne kadar belgelendiğine dair hızlı bir okuma verir.
Ne kadar büyük bir şema yapıştırabilirim?
Tarayıcınızın rahatça render edebildiği her şeyi. Birkaç yüz tür ve birkaç bin alan içeren şemalar bir saniyenin çok altında doğrulanır. 5 MB'ı aştığında Ace editörünün kendisi yavaşlamaya başlar, darboğaz orası — doğrulayıcı değil.
Diğer GraphQL Araçları
Doğrulama, GraphQL ile çalışmanın yalnızca bir parçası. Bu araçlar gerisini halleder: