Michael Dähnert Sopra Steria Consulting

Dank der breiten Verfügbarkeit an GraphQL-Frameworks kann dessen Funktionalität schnell in neuen sowie bereits vorhandenen Anwendungen verwendet werden. Implementierungen existieren für gängige Programmiersprachen wie PHP, Go und Python.

Viele reden im Zusammenhang mit GraphQL über Stärken und Schwächen im Vergleich zu REST und dessen API-Design. Richtig interessant wird es aber erst, wenn man sich einmal für GraphQL entschieden hat. Anschließend geht es darum, konkrete Frameworks zu evaluieren und festzustellen, ob sich diese bei einem neuen Projekt sinnvoll einsetzen oder nahtlos in die vorhandene Anwendung integrieren lassen.

Dieser Artikel legt seinen Schwerpunkt auf die exemplarische Integration einer Spring-Boot-Applikation (Java) mit einer Ionic-Mobilanwendung (Angular/TypeScript). Anhand von Beispielen wird die einfache und schnelle Verwendung von GraphQL-Frameworks aufgezeigt. Der folgende Artikel geht davon aus, dass dem Leser Grundbegriffe aus dem Umfeld von GraphQL, Spring Boot sowie Ionic/Angular bekannt sind. Für diejenigen, die mit GraphQL und dessen Schlüsselworten noch nicht vertraut sind, sei die Homepage mit vielen guten Erklärungen und Beispielen empfohlen.

GraphQL-Server – einfache Integration dank Spring Boot und „graphql-java“

Eine Spring-Boot-Applikation ist schnell erstellt. Im Internet gibt es hierfür eine große Anzahl an Tutorials sowie Erklärungen zum Schnellstart. Als erstklassiger Startpunkt sei hier auf den Spring Initializr verwiesen. Dieser erzeugt nach Auswahl weniger Parameter – wie der Spring-Boot-Version sowie weiterer Spring-Module – den Quelltext einer direkt ausführbaren Applikation.

Nach erfolgtem Download des funktionsfähigen Spring-Boot-Grundgerüsts müssen für die Verwendung von GraphQL zwei weitere Dependencies in der pom.xml hinzugefügt werden (Listing 1).

<dependency>
  <groupId>com.graphql-java</groupId>
  <artifactId>graphql-spring-boot-starter</artifactId>
  <version>5.0.2</version>
</dependency>
<dependency>
  <groupId>com.graphql-java</groupId>
  <artifactId>graphql-java-tools</artifactId>
  <version>5.2.3</version>
</dependency>

Durch die zusätzlichen Pakete stehen folgende Funktionalitäten zur Verfügung:

  • Parsing des GraphQL-Schemas
  • Transformieren eines GraphQL Requests zur Weiterverarbeitung in der Applikationslogik
  • Nahtlose Einbettung des GraphQL-Servers in Spring Boot

Die Integration in die Spring-Boot-Applikation führt zu:

  1. automatischem Suchen und Parsen der Schemadateien (*.graphqls unterhalb des resource-Ordners),
  2. der Einrichtung eines sofort nutzbaren API-Endpunkts /graphql und
  3. der Verarbeitung der Beans mit Spring IoC.

Weitere Informationen zur Einrichtung können der ausgezeichneten Dokumentation von www.baeldung.com entnommen werden. Als Nächstes widmen wir uns der Erstellung des GraphQL-Schemas. Listing 2 zeigt ein Beispiel zum Auslesen und Schreiben von Nutzerdaten eines Blogs.

type Query {
  getUser(id: Int!) : User
}

type Mutation {
  addBlogPost(newPost: BlogPostInput!) : BlogPost
}

input BlogPostInput {
  subject: String!
  content : String!
  userId: Int!
}

type User {
  id: Int!
  name: String!
  birthdate: String
  blogPosts: [BlogPost]
}

type BlogPost {
  id: Int!
  createdAt: String
  subject: String!
  content: String!
}

Damit GraphQL in der Lage ist, zwischen JSON Requests und Java-Objekten konvertieren zu können, werden Instanzen der Interfaces GraphQLQueryResolver und GraphQLMutationResolver benötigt. Die eingebundene GraphQL-Bibliothek erkennt beim Start der Applikation deren Implementierung und macht sie für Requests einsatzbereit. Damit steht die Schnittstelle sofort zur Verfügung und kann im bekannten Spring-Kontext verwendet werden.

Den vollständigen Artikel lesen Sie in der Ausgabe:

Entwickler Magazin 6.18 - "GraphQL"

Alle Infos zum Heft
579861558Full Stack GraphQL
X
- Gib Deinen Standort ein -
- or -