GraphQL Java – serverseitige Bibliothek zur Implementierung von GraphQL-APIs in Java

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

GraphQL Java – serverseitige Bibliothek zur Implementierung von GraphQL-APIs in Java



GraphQL Java ist eine leistungsstarke und flexible serverseitige Bibliothek zur Implementierung der GraphQL-Spezifikation in Java. Sie ermöglicht Entwicklern die Erstellung effizienter, typsicherer und leicht erweiterbarer APIs, die Clients die Möglichkeit geben, nur die benötigten Daten anzufragen. Die Bibliothek wird aktiv von der Community unterstützt und von vielen großen Unternehmen in der Produktion eingesetzt.



Hauptfunktionen

  • Vollständige Unterstützung der GraphQL-Spezifikation – Implementierung aller Typen, Direktiven, Mutationen, Subscriptions und Fragmente.
  • Flexibles Typsystem – Möglichkeit, Schemas sowohl auf Basis von Java-Klassen (code-first) als auch über SDL (schema-first) zu definieren.
  • Integrierte Asynchronität – Nutzung von CompletableFuture für effiziente Anfrageverarbeitung.
  • DataLoader – integriertes Hilfsprogramm zur Lösung des N+1-Abfrageproblems und zum Batch-Laden von Daten.
  • Testwerkzeuge – integrierte Klassen für Unit-Tests von Schemas und Resolvern.
  • Erweiterbarkeit – Unterstützung für benutzerdefinierte Skalare, Direktiven und Validierungswerkzeuge.


Architektur der Bibliothek

Die Bibliothek besteht aus mehreren Schlüsselkomponenten:

  • GraphQLSchema – Objekt, das das API-Schema repräsentiert.
  • DataFetcher – funktionales Interface zum Abrufen von Daten (Analogon zum Resolver in GraphQL).
  • TypeResolver – Interface zur Auflösung polymorpher Typen (Interfaces und Unions).
  • ExecutionStrategy – Strategie zur Ausführung von Abfragen (standardmäßig asynchron).
  • Instrumentation – Mechanismus zum Einfügen zusätzlicher Logik (Logging, Metriken).


Anwendungsbeispiel

Betrachten wir ein einfaches Beispiel zur Erstellung eines GraphQL-Servers für die Buchverwaltung.



1. Definition des Schemas über SDL

// schema.graphqlstype Query {    books: [Book]    bookById(id: ID!): Book}

type Book { id: ID! title: String! author: String! year: Int}


2. Erstellung von Resolvern

import graphql.schema.DataFetcher;import graphql.schema.DataFetchingEnvironment;

public class BookDataFetcher {

public static DataFetcher<List<Book>> getBooksDataFetcher() { return environment -> { // In einer echten Anwendung würde hier eine Datenbankabfrage stehen return List.of( new Book("1", "1984", "George Orwell", 1949), new Book("2", "Brave New World", "Aldous Huxley", 1932) ); }; }

public static DataFetcher<Book> getBookByIdDataFetcher() { return environment -> { String id = environment.getArgument("id"); // Buch anhand der ID suchen return findBookById(id); }; }}


3. Schema zusammenbauen und Abfrage ausführen

import graphql.GraphQL;import graphql.schema.GraphQLSchema;import graphql.schema.idl.RuntimeWiring;import graphql.schema.idl.SchemaParser;import graphql.schema.idl.SchemaGenerator;import graphql.schema.idl.TypeDefinitionRegistry;

public class GraphQLExample { public static void main(String[] args) { // SDL laden String schema = "type Query { books: [Book] } type Book { id: ID! title: String! }"; SchemaParser schemaParser = new SchemaParser(); TypeDefinitionRegistry typeRegistry = schemaParser.parse(schema);

// Runtime Wiring konfigurieren RuntimeWiring wiring = RuntimeWiring.newRuntimeWiring() .type("Query", builder -> builder .dataFetcher("books", BookDataFetcher.getBooksDataFetche

Empfehlungen