Konwerter GraphQL na XML
Wklej schemat lub zapytanie GraphQL. Odbierz czysty XML.
Co robi to narzędzie
Jeśli kiedyś musiałeś udokumentować API GraphQL dla zespołu, który pracuje tylko w XML, albo podpiąć schemat GraphQL do starego klienta SOAP, znasz ten niezręczny moment: typy GraphQL nie tłumaczą się jeden do jednego. Wklej tu schemat albo zapytanie i odbierz poprawny XML w jednym przebiegu. Kilka definicji type, pełny plik SDL albo konkretne zapytanie z argumentami — efekt ten sam: kompletny dokument XML, który odzwierciedla kształt danych.
Konwerter zna specyfikację GraphQL, a nie tylko powierzchowną składnię. Domyślne wartości skalarów ustawiają się tak, jak byś się spodziewał — String staje się tekstem, Int i Float tekstem liczbowym, Boolean to true/false, a ID to wartość łańcuchowa. Znaczniki non-null (String!) i list ([OrderItem!]!) są uwzględniane: wymagana lista pojawia się jako element kontenera z jednym dzieckiem na każdy element, a pola nullable bez wartości przechodzą jako puste elementy, dzięki czemu kształt dokumentu pozostaje spójny.
Poza typami wbudowanymi narzędzie obsługuje też resztę systemu typów. Typy input stają się zagnieżdżonymi elementami, wartości enum wychodzą jako tekst, typy interface i union są rozwiązywane do leżących pod nimi form konkretnych, a fragmenty (nazwane lub inline) są rozwijane w miejscu, więc wyjście jest płaskie i samowystarczalne. Niestandardowe skalary jak DateTime, Date i JSON są emitowane jako ISO-8601 lub wartości zserializowane do łańcucha. Jeśli wkleisz query z argumentami, zostaną one zachowane jako część elementu głównego, więc XML jest wiernym zapisem żądania, a nie tylko blobem danych.
Jak tego używać
Trzy kroki. Działa tak samo, czy wkleisz pojedynczy typ, czy pełny schemat z zapytaniami.
Wklej swój GraphQL (albo spróbuj przykładu)
Wrzuć GraphQL tak jak jest do lewego edytora. Pojedynczy type, pełny plik SDL z input/enum/interface/union albo konkretne zapytanie ze zmiennymi — wszystko gra. Kliknij Załaduj przykład, jeśli wolisz zacząć od realistycznego kształtu.
Nie musisz usuwać komentarzy ani przeformatowywać składni SDL. Zostaw tak, jak zapisał to twój edytor — docstringi w potrójnych cudzysłowach i komentarze z hashem są w porządku.
Kliknij Konwertuj
Kliknij zielony przycisk Konwertuj. Narzędzie czyta schemat (lub zapytanie), rozwiązuje fragmenty i znaczniki list/non-null i buduje XML w jednym przebiegu. Podczas konwersji pokazuje się krótki wskaźnik ładowania.
Skopiuj XML
Prawy panel wypełnia się wciętym, poprawnym XML-em, który przyjmie każdy zgodny ze standardem parser XML. Skopiuj go prosto do swojego żądania SOAP, dokumentacji, fixture'u albo przykładu XSD.
Kiedy to naprawdę się przydaje
Dokumentacja XML dla API GraphQL
Dokumentacja wewnętrzna albo partnerska żyjąca w XML (DITA, DocBook, referencje oparte na XSD). Wklejasz schemat, dostajesz przykładowe payloady XML pasujące do prawdziwych typów — bez ręcznego tłumaczenia.
Generowanie fixture'ów XML ze schematu
Testy kontraktowe, testy snapshotowe albo mock server mówiący XML. Podajesz mu schemat, który już masz, i dostajesz spójne fixture XML z każdą listą, polem nullable i typem zagnieżdżonym we właściwym miejscu.
Pomost do starszych klientów SOAP
System partnera akceptuje tylko payloady XML, ale twój backend mówi GraphQL. Wklej zapytanie i typ odpowiedzi, dostań wyjściowe ciało XML do wrzucenia w żądanie SOAP.
Migracja i analiza schematu
Odejście od GraphQL do API opartego na XML (albo zwykłe porównanie dwóch form). Zyskujesz wersję XML każdego typu obok oryginału, dzięki czemu recenzenci, którzy nie czytają SDL, też nadążą.
Najczęstsze pytania
Jak traktowane są type, input, enum, interface i union?
type i input stają się elementami kontenerowymi z jednym dzieckiem na pole. Wartości enum przechodzą jako zwykły tekst (nazwa enuma, dużymi literami, dokładnie tak jak zadeklarowana w SDL). interface rozwiązuje się do swoich pól plus pól typu implementującego, gdy znamy typ konkretny. union rozwiązuje się do kształtu dopasowanego członka. Pełne reguły znajdziesz w referencji języka typów GraphQL.
Jakie domyślne wartości obowiązują dla String, Int, Float, Boolean i ID?
String i ID stają się treścią tekstową. Int to zwykła liczba całkowita. Float to liczba dziesiętna bez końcowych zer. Boolean to tekst małymi literami true lub false. Zgadza się to z definicjami skalarów w specyfikacji GraphQL, więc wyjście czysto przechodzi przez parser XML.
Jak traktowane są znaczniki non-null (!) i list ([T])?
Non-null (String!) jest traktowany jako pole, które musi się pojawić — pola nullable bez wartości wychodzą jako puste elementy, więc kształt dokumentu pozostaje przewidywalny. Listy ([OrderItem!]!) stają się elementem kontenera z jednym dzieckiem na element, nazwanym po typie elementu — np. items: [OrderItem!]! zamienia się w <items><OrderItem/><OrderItem/></items>. Zagnieżdżone listy ([[Int]]) zagnieżdżają się w ten sam sposób.
Czy fragmenty są rozwiązywane?
Tak. Fragmenty nazwane (...OrderFields) oraz inline (... on Order { ... }) są rozwijane w miejscu, więc XML jest płaski i samowystarczalny. Nie musisz wklejać definicji fragmentów osobno — jeśli są w tym samym bloku, narzędzie je połączy. Odpowiada to zwykłemu modelowi wykonywania zapytań, w którym fragmenty są rozprowadzane w zestawie wyboru zanim powstanie odpowiedź.
A co z niestandardowymi skalarami jak DateTime?
Dobrze znane skalary niestandardowe (DateTime, Date, Time, UUID, JSON) są emitowane jako tekst ISO-8601 lub wartości stringifikowane zgodnie z konwencją — tak jak robi to większość bibliotek skalarów. Nieznane skalary wpadają na tekst łańcuchowy, żeby nic nie przepadło w ciszy. Jeśli potrzebujesz konkretnego formatu, przepuść XML przez obróbkę albo zmień nazwę skalara.
Czy mogę wkleić zapytanie z argumentami, nie tylko schemat?
Tak. Wklej query ze zmiennymi i argumentami — np. query GetOrder($orderId: ID!) { order(id: $orderId) { ... } } — a argumenty trafią jako atrybuty na elemencie głównym. Wybrane pola decydują, które części kształtu odpowiedzi zostaną zserializowane, więc XML odpowiada temu, co zapytanie naprawdę zwróciłoby, a nie całemu typowi.
Inne narzędzia, które mogą się przydać
GraphQL na XML to tylko jeden element układanki. Te narzędzia dobrze z nim współgrają: