Einführung in die GraphQL API mit Java
GraphQL ist eine moderne Abfragesprache für APIs, die es Clients ermöglicht, nur die Daten anzufordern, die sie wirklich benötigen. Im Gegensatz zu REST, wo die Antwortstruktur festgelegt ist, bietet GraphQL Flexibilität und Effizienz. In diesem Schritt-für-Schritt-Tutorial erstellen wir eine vollständige GraphQL API mit Java unter Verwendung der beliebten Bibliothek graphql-java und Spring Boot. Sie lernen, wie Sie einen Server konfigurieren, ein Schema definieren, Resolver schreiben und Abfragen ausführen. Alle Codebeispiele sind ausführungsbereit.
Was Sie lernen werden
- Wie man ein Spring Boot Projekt für GraphQL einrichtet
- Wie man ein GraphQL Schema definiert (Typen, Abfragen, Mutationen)
- Wie man Resolver in Java schreibt
- Wie man query- und mutation-Anfragen ausführt
1. Projekteinrichtung und Abhängigkeiten
Zunächst erstellen wir ein Spring Boot Projekt mit Maven. Fügen wir die notwendigen Abhängigkeiten in die pom.xml hinzu:
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <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.4</version> </dependency></dependencies>Diese Bibliotheken gewährleisten die Integration von GraphQL mit Spring Boot und eine komfortable Arbeit mit Schemata. Aktualisieren Sie das Projekt nach dem Hinzufügen der Abhängigkeiten.
Projektstruktur
Unser Projekt wird die folgenden Hauptkomponenten enthalten:
- GraphQL Schema (Datei
schema.graphqls) - Datenmodelle (Java POJO)
- Resolver (Anfragebearbeiter)
- Controller zum Testen
2. Definition des GraphQL Schemas
Erstellen Sie die Datei src/main/resources/schema.graphqls. Darin beschreiben wir die Datentypen und verfügbaren Operationen. Als Beispiel nehmen wir das Modell "Buch":
type Book { id: ID! title: String! author: String! year: Int}
type Query { getBook(id: ID!): Book getAllBooks: [Book]}
type Mutation { addBook(title: String!, author: String!, year: Int): Book}Hier ist Book ein Objekttyp mit Pflichtfeldern (!). Query definiert Einstiegspunkte zum Lesen von Daten, und Mutation für Änderungen. Beachten Sie: In GraphQL werden Mutationen zum Erstellen, Aktualisieren und Löschen von Daten verwendet.
3. Erstellung von Java-Modellen und Resolvern
Modell Book
Erstellen wir eine einfache POJO-Klasse Book.java:
public class Book { private String id; private String title; private String author; private int year;
public Book(String id, String title, String author, int year) { this.id = id; this.title = title; this.author = author; this.year = year; }
// Getter und Setter public String getId() { return id; } public String getTitle() { return title; } public String getAuthor() { return author; } public int getYear() { return year; }}Resolver für Query
Resolver verbinden das Schema mit den Daten. Erstellen wir die Klasse QueryResolver.java:
import com.coxautodev.graphql.tools.GraphQLQueryResolver;import org.springframework.stereotype.Component;import java.util.*;
@Componentpublic class QueryResolver implements GraphQLQueryResolver {
private final List<Book