Detektiv Spielen mit GraphQL

Matthias Frank

Technical Director

Im folgenden Beitrag möchte ich über eine kleine Aufgabe reden, die ich während des Sommers an einen unserer Praktikanten gegeben habe. Ich habe Michael Blank damit beauftragt, eine GraphQL bezogene Aufgabe zu erledigen. Das Besondere: Ich hatte dabei keinerlei helfende Informationen für ihn.

Briefing

Es ist zwar nicht ganz Wort für Wort wiedergegeben, aber inhaltlich wird in etwa klar, wie das Briefing stattgefunden hat:

 

Sahin:

Hey Michi, ich hab da eine kleine Aufgabe für dich. Hat was mit GraphQL zu tun.

 

Michi:

Ah nice, um was gehts denn?

 

Sahin:

Also, wir haben einen Kunden, der ein neues PIM System einsetzt. Dieses verfügt u.a. über eine GraphQL Schnittstelle, damit wir Produktdaten abfragen können. Und um genau die geht’s. Denn wir müssen die Daten in Shopify importieren.

 

Michi:

Klingt doch ganz nice.

 

Sahin:

Hold that thought 😬 Wir haben den GraphQL Endpoint + API-Key. Das war’s dann aber auch. Es gibt weder eine Doku, noch ein offizielles GraphQL Schema, noch eine Beispiel-Query oder dergleichen. 😂

 

Michi:

Ah, okay. 😅 👍

 

Sahin:

Kriegen wir hin oder? 🥶

 

Michi:

Ja, wird schon gehen 🤙

 

Briefing - TLDR;

Um es nochmal kurz zusammenzufassen. Wir haben ein PIM-System bei einem Kunden im Einsatz, der eine GraphQL Schnittstelle anbietet, um Produktdaten abzufragen. Genau diese benötigen wir, damit wir sie in Shopify importieren können.

Leider ist die Dokumentation zur GraphQL Schnittstelle vom PIM System noch nicht verfügbar und wir haben auch sonst keinerlei Informationen, mit denen wir arbeiten können.

In den folgenden Passagen möchte ich kurz wiedergeben, wie Michael Blank das Problem lösen konnte.

First Things First

WHAT DO WE HAVE HERE?

Ich persönlich habe noch keine Use-Cases mit GraphQL bearbeitet, genau wie Michi. Für uns beide war es also etwas ganz Neues. Er hat sich erstmal auf die Suche gemacht, wie er denn überhaupt an weitere Informationen gelangt.

Fündig wurde er in den sogenannten Introspection Queries von GraphQL. Diese helfen, weitere Informationen in der GraphQL Schnittstelle abzufragen.

Mit der folgenden Query ist somit möglich, abzufragen „Hey GraphQL, was hast du denn alles zu bieten?“

"Hey GraphQL, was hast du denn alles zu bieten?"

Dazu kam ein ähnliches Ergebnis wie hier angezeigt (kleiner Auszug davon). Mit der gegebenen Response haben wir schonmal erste Informationen gefunden, mit denen wir weiter arbeiten können.

Follow the Breadcrumbs

Folgen wir doch der Spur und arbeiten mit dem categoryStream weiter. Fragen wir doch einfach mal das categoryStream ab und schauen was passiert:

Das Ergebnis:

Aha! 👆 Anhand der Fehlermeldung und der darin enthaltenen Infos kamen wir einen Schritt voran: mit categoryStream vom Typ CategoryConnection. Weiter können wir anhand der ersten Helfer-Query, die wir im Abschnitt „First Things First“ haben, folgende Informationen aus dem Response identifizieren:

Mit dieser Information sehen wir, was für Felder die CategoryConnection zur Verfügung stellt und wie wir sie in unsere Abfrage einbauen können. Fragen wir doch mal das erste Feld „edge“ ab:

Folgenden Response und daraus resultierenden Erkenntnisse haben wir erhalten:

Bevor wir uns hier nun in eine etwas wiederholende Tätigkeit bzw. Erklärung einlassen, kürzen wir lieber ab. Diesen Prozess, der uns alle nötigen Informationen hinsichtlich Produktdaten verschafft, hat Michi so oft wiederholt, bis wir alle Nötigen Informationen hatten.

 

👉 Während des Zusammenbaus der Produkt-Abfragen sind wir noch über Interfaces gestolpert. Dazu hoffentlich in einem anderen Beitrag mehr dazu.

Was lernen wir daraus?

Dokumentation wichtig ist! Also echt jetzt. Kein Spaß. Wir sind durch ein paar Stunden Detektiv-Arbeit an alle Informationen rangekommen – allerdings hätte eine gute Dokumentation hier einiges an Zeit erspart.

Hinzu kommt, dass wir nicht wissen, ob und wie sich die Queries eventuell ändern können. Da es noch keine offizielle Dokumentation gibt, ist die Wahrscheinlichkeit eher hoch, dass dies passiert und wir im Worst-Case den ganzen Spaß nochmal machen dürfen.

Für uns war es am Ende vom Tag trotzdem eine spannende Aufgabe – zumindest finde ich das so. Ich habe die Vorgehensweise von Michael Blank sehr spannend und gut strukturiert gefunden. Er hat alle relevanten Informationen gesammelt und sie effizient eingesetzt. Ganz ehrlich: Ich weiß nicht, ob ich das in der gleichen Zeit auch geschafft hätte (ok, vermutlich schon 😬).

Daher Hut ab an dieser Stelle für Michis Leistung (sein ganzes Praktikum war übrigens sehr beeindruckend und ich hoffe sehr, dass wir in Zukunft nochmals zusammenarbeiten)

Dank an dieser Steller für die Learnings. Hoffentlich war es für euch genauso interessant zu sehen wie man mit GraphQL arbeiten kann.

👀 Weiterlesen, weiterkommen.