Einführung in die GraphQL API mit Java
\n\nGraphQL ist eine Abfragesprache für APIs, die es Clients ermöglicht, nur die Daten anzufordern, die sie tatsächlich benötigen. Im Gegensatz zu REST, wo die Antwortstruktur festgelegt ist, ermöglicht GraphQL eine flexible Gestaltung der Antworten, was die Menge der übertragenen Daten erheblich reduziert und die Entwicklung beschleunigt.
\n\nIn diesem Tutorial werden wir praktisch erarbeiten, wie man eine GraphQL API mit Java unter Verwendung der Bibliothek graphql-java und des Frameworks Spring Boot erstellt. Sie erfahren, wie Sie das Schema einrichten, Resolver schreiben und Abfragen ausführen.
Der Artikel ist nützlich für Java-Entwickler, die einen modernen Ansatz zur API-Erstellung erlernen und die Interaktion zwischen Client und Server verbessern möchten.
\n\n1. Projekteinrichtung und Abhängigkeiten
\n\nZunächst erstellen wir ein neues Spring Boot-Projekt. Am einfachsten geht das mit Spring Initializr. Fügen wir die folgenden Abhängigkeiten hinzu:
\n\n- \n
- Spring Web — zum Starten des Webservers \n
- Spring Boot DevTools — zur Beschleunigung der Entwicklung \n
- Lombok — zur Reduzierung von Boilerplate-Code \n
Fügen Sie nach der Projekterstellung die Hauptbibliothek GraphQL in die pom.xml ein:
<dependency>\n <groupId>com.graphql-java</groupId>\n <artifactId>graphql-java-spring-boot-starter-webmvc</artifactId>\n <version>2021-06-30T00-00-00-1e4b5e5</version>\n</dependency>\n\nAußerdem wird eine Bibliothek für die Arbeit mit dem GraphiQL-Tool (Web-Interface zum Testen von Abfragen) benötigt:
\n\n<dependency>\n <groupId>com.graphql-java</groupId>\n <artifactId>graphiql-spring-boot-starter</artifactId>\n <version>5.0.2</version>\n</dependency>\n\nAktualisieren Sie nach dem Hinzufügen der Abhängigkeiten das Projekt und starten Sie es. Standardmäßig ist GraphiQL unter der Adresse http://localhost:8080/graphiql verfügbar.
2. Erstellung des Datenmodells und des GraphQL-Schemas
\n\nZur Demonstration erstellen wir ein einfaches Modell Book (Buch). Definieren wir eine Klasse mit den Feldern id, title, author und pages.
import lombok.AllArgsConstructor;\nimport lombok.Data;\nimport lombok.NoArgsConstructor;\n\n@Data\n@NoArgsConstructor\n@AllArgsConstructor\npublic class Book {\n private String id;\n private String title;\n private String author;\n private int pages;\n}\n\nJetzt muss das GraphQL-Schema definiert werden. Erstellen Sie die Datei schema.graphqls im Ordner src/main/resources:
type Query {\n allBooks: [Book]\n bookById(id: String): Book\n}\n\ntype Book {\n id: String\n title: String\n author: String\n pages: Int\n}\n\nDas Schema beschreibt zwei Abfragen: Abrufen aller Bücher und Abrufen eines Buches anhand der ID. Der Typ Book enthält vier Felder.
\n\nZur Verarbeitung der Abfragen erstellen wir einen Service, der die Daten im Speicher speichert (der Einfachheit halber):
\n\nimport org.springframework.stereotype.Service;\nimport javax.annotation.PostConstruct;\nimport java.util.ArrayList;\nimport java.util.List;\nimport java.util.Optional;\n\n@Service\npublic class BookService {\n private List<Book> books = new ArrayList<>();\n\n @PostConstruct\n public void init() {\n books.add(new Book("1", "Krieg und Frieden", "Leo Tolstoi", 1225));\n books.add(new Book("2", "Verbrechen und Strafe", "Fjodor Dostojewski", 671));\n books.add(new Book("3", "Der Meister und Margarita", "Michail Bulgakow", 480));\n }\n\n public List<Book> getAllBooks() {\n return books;\n }\n\n public Book getBookById(String id) {\n Optional<Boo