GraphQL'den XML'e Dönüştürücü
Bir GraphQL şeması ya da sorgusu yapıştırın. Temiz XML geri alın.
Bu araç ne işe yarar
Yalnızca XML ile çalışan bir ekip için bir GraphQL API’ını dokümante etmek ya da bir GraphQL şemasını eski bir SOAP istemcisine bağlamak zorunda kaldıysanız, o ters kısmı iyi bilirsiniz: GraphQL tipleri bire bir karşılık gelmez. Şemanızı ya da sorgunuzu buraya yapıştırın, tek geçişte iyi biçimlendirilmiş XML geri alın. Bir avuç type tanımı, tam bir SDL dosyası veya argümanlı somut bir sorgu — sonuç aynı: verinin biçimini aynen yansıtan eksiksiz bir XML belgesi.
Dönüştürücü yalnızca yüzey sözdizimini değil GraphQL spesifikasyonunu da bilir. Skaler varsayılanları beklediğiniz gibi düşer — String metin, Int ve Float sayısal metin, Boolean true/false, ID ise string değer olur. Non-null işaretleri (String!) ve liste işaretleri ([OrderItem!]!) korunur: zorunlu bir liste, her öğe için bir çocuğu olan bir kapsayıcı öge olarak görünür; değeri olmayan nullable alanlar ise boş ögeler hâlinde gelir, böylece belgenin biçimi tutarlı kalır.
Araç, yerleşik tiplerin ötesinde tip sistemi’nin geri kalanını da ele alır. input tipleri iç içe ögelere döner, enum değerleri string metni olarak gelir, interface ve union tipleri altındaki somut biçimlere çözümlenir ve fragment’lar (adlandırılmış ya da satır içi) inline hâle getirilir; bu sayede çıktı düz ve kendi kendine yeter. DateTime, Date ve JSON gibi özel skalerler ISO-8601 ya da stringleştirilmiş değer olarak üretilir. Argümanlı bir query yapıştırırsanız argümanlar kök ögenin parçası olarak saklanır; böylece XML, yalnızca bir veri yığını değil, isteğin sadık bir kaydı olur.
Nasıl kullanılır
Üç adım. Tek bir tip yapıştırmanızla sorgulu eksiksiz bir şema yapıştırmanız arasında fark yok.
GraphQL'inizi yapıştırın (ya da örneği deneyin)
GraphQL'i olduğu gibi soldaki editöre bırakın. Tek bir type, input/enum/interface/union içeren tam bir SDL dosyası veya değişkenli somut bir sorgu — hepsi uygundur. Gerçekçi bir biçimle başlamak isterseniz Örnek Yükle’ye basın.
Yorumları kaldırmanıza ya da SDL sözdizimini yeniden biçimlendirmenize gerek yok. Editörünüz nasıl yazdıysa öyle bırakın — üç tırnaklı docstring’ler de diyez yorumları da sorunsuz geçer.
Dönüştür'e basın
Yeşil Dönüştür düğmesine tıklayın. Araç şemayı (ya da sorguyu) okur, fragment’ları ve liste/non-null işaretlerini çözer ve XML’i tek geçişte üretir. Dönüşüm sırasında kısa bir yükleme göstergesi görünür.
XML'i kopyalayın
Sağdaki panel, standartlara uyumlu herhangi bir XML çözümleyicisinin kabul edeceği, girintili ve iyi biçimlendirilmiş XML ile dolar. Doğrudan SOAP isteğinize, dokümantasyonunuza, fixture’ınıza ya da XSD örneğinize yapıştırın.
Gerçekten işe yaradığı anlar
GraphQL API'ı için XML tabanlı dokümantasyon
XML’de yaşayan iç dokümanlar ya da iş ortağı dokümantasyonu (DITA, DocBook, XSD tabanlı referans). Şemayı yapıştırırsınız, gerçek tiplerle örtüşen örnek XML yükleri alırsınız — elle çeviri yok.
Bir şemadan XML fixture üretme
Kontrat testleri, snapshot testleri ya da XML konuşan bir mock sunucu. Elinizdeki şemayı verirsiniz, her liste, nullable alan ve iç içe tip doğru yerde olan tutarlı fixture XML’leri alırsınız.
Eski SOAP istemcilerine köprü
İş ortağı sistem yalnızca XML yükü kabul ediyor ama arka ucunuz GraphQL konuşuyor. Sorguyu ve yanıt tipini yapıştırın, SOAP isteğine bırakabileceğiniz başlangıç niteliğinde bir XML gövdesi alın.
Şema taşıma ve analiz
GraphQL’den XML tabanlı bir API’ya geçmek (ya da iki biçimi karşılaştırmak). Her tipin XML karşılığını yan yana koyun; SDL okumayan gözden geçirenler de takip edebilsin.
Sık sorulan sorular
type, input, enum, interface ve union nasıl ele alınır?
type ve input, her alan için bir çocuğu olan kapsayıcı ögelere döner. enum değerleri düz string metni olarak gelir (SDL’de tanımlandığı gibi büyük harfli enum adı). interface, somut tipi bildiğimizde kendi alanlarına ek olarak uygulayan tipin alanlarına da çözümlenir. union, eşleşen üyenin biçimine çözümlenir. Tüm kurallar için GraphQL tip dili referansına bakın.
String, Int, Float, Boolean ve ID için hangi varsayılanlar kullanılır?
String ve ID metin içeriği olur. Int düz bir tam sayıdır. Float, sondaki sıfırları olmayan ondalık bir sayıdır. Boolean, küçük harfli true ya da false metnidir. Bunlar GraphQL spesifikasyonundaki skaler tanımlarla örtüşür; böylece çıktı bir XML çözümleyicisinden pürüzsüz geçer.
Non-null (!) ve liste ([T]) işaretleri nasıl ele alınır?
Non-null (String!), mutlaka görünmesi gereken bir alan gibi ele alınır — değeri olmayan nullable alanlar boş ögeler hâlinde gelir, böylece belge biçimi öngörülebilir kalır. Listeler ([OrderItem!]!), öge tipinin adını taşıyan, her öğe için bir çocuğu olan bir kapsayıcı ögeye dönüşür — örneğin items: [OrderItem!]!, <items><OrderItem/><OrderItem/></items> olur. İç içe listeler ([[Int]]) aynı biçimde iç içe geçer.
Fragment'lar çözülüyor mu?
Evet. Adlandırılmış fragment’lar (...OrderFields) ve satır içi fragment’lar (... on Order { ... }) inline çözümlenir; böylece XML düz ve kendi kendine yeter. Fragment tanımlarını ayrı yapıştırmanıza gerek yok — aynı blokta iseler araç bunları birbirine bağlar. Bu, fragment’ların yanıt oluşturulmadan önce seçim kümesine dağıtıldığı olağan sorgu yürütme modeliyle örtüşür.
DateTime gibi özel skalerler ne olacak?
İyi bilinen özel skalerler (DateTime, Date, Time, UUID, JSON) teamül gereği ISO-8601 metni ya da stringleştirilmiş değer olarak üretilir — çoğu skaler kütüphanesinin yaptığıyla örtüşür. Bilinmeyen özel skalerler string metnine düşer, böylece hiçbir şey sessizce kaybolmaz. Belirli bir formata ihtiyacınız varsa XML’i son işleyin ya da skaleri yeniden adlandırın.
Yalnızca şemayı değil, argümanlı bir sorguyu da yapıştırabilir miyim?
Evet. Değişkenli ve argümanlı bir query yapıştırın — örneğin query GetOrder($orderId: ID!) { order(id: $orderId) { ... } } — ve argümanlar kök öge üzerinde öznitelikler olarak gelir. Seçilen alanlar, yanıt biçiminin hangi kısımlarının serileştirileceğini belirler; böylece XML, tipin tamamını değil, sorgunun gerçekte döndüreceği şeyi karşılar.
İhtiyacınız olabilecek diğer araçlar
GraphQL'den XML'e yalnızca yapbozun bir parçası. Bu araçlar onunla iyi gider: