Die traditionelle Restful-API weist viele Probleme auf. Erstens kann sie die zurückgegebenen Felder nicht steuern und das Front-End kann die Rückgabeergebnisse des Back-Ends nicht vorhersagen führt zu mehreren Anfragen. GraphQL ist eine API-Abfragesprache, die auf diesem Hintergrund basiert. Im Vergleich zur herkömmlichen Restful-API bietet sie die folgenden Vorteile:
Flexibilität: GraphQL kann im Gegensatz zu RESTful Daten flexibel entsprechend den Anforderungen des Clients abfragen. strukturierte Daten.
Netzwerkanfragen reduzieren: GraphQL ermöglicht es Clients, mehrere Ressourcen in einer Anfrage abzurufen, was dazu beiträgt, die Anzahl der Netzwerkanfragen zu reduzieren und die Leistung zu verbessern.
Starke Typisierung: GraphQL verfügt über ein starkes Typisierungssystem, das es Clients ermöglicht, Fehler in Abfragen zur Kompilierungszeit zu erkennen, was zur Reduzierung von Laufzeitfehlern beiträgt.
Cache-fähig: GraphQL ist zwischenspeicherbar, was bedeutet, dass der Server die Ergebnisse einer Abfrage zwischenspeichern kann, wodurch Leistung und Skalierbarkeit verbessert werden.
Dokumentation: GraphQL verfügt über die Fähigkeit zur Selbstdokumentation, sodass Entwickler die Struktur und Funktionen der API schnell verstehen können.
Wenn die Back-End-Sprache Java ist, dann ist GraphQL Java die Basisbibliothek für die Implementierung von GraphQL. Darüber hinaus hat Spring GraphQL integriert. Wenn Spring im Projekt verwendet wird, ist Spring GraphQL eher zu empfehlen.
Die Entwicklung von Spring GraphQL ist im Allgemeinen in die folgenden Schritte unterteilt:
Spring GraphQL-Abhängigkeiten hinzufügen
Spring GraphQL-Abhängigkeiten in Ihrem Projekt hinzufügen. Sie können Abhängigkeiten über Build-Tools wie Maven oder Gradle hinzufügen. Wenn Sie beispielsweise Maven verwenden, können Sie die folgende Abhängigkeit „GraphQL-Schema definieren“ in Ihrer Anwendung hinzufügen. Schema definiert abfragbare Typen und Felder. Sie können ein Schema mit SDL (Schema Definition Language) oder programmgesteuert definieren.
Für Spring Boot-Projekte wird die Schemadatei im Verzeichnis resources/graphql/ abgelegt und dem Dateinamen wird graphqls angehängt. Das Folgende ist ein einfaches schema.graphqls, das ich definiert habe.
Es gibt zwei Abfrageimplementierungen an: „author(id:Int)“ bedeutet die Abfrage des Autors anhand der ID, und „allAuthors“ bedeutet die Abfrage des Autor-Arrays.
schema {query: Query
}type Query {
}
author(id:Int): Author
allAuthors: [Author]lastName:String
type Author {
id:Int
firstName:StringE-Mail:String
Der RuntimeWiringConfigurer ähnelt der Serviceschicht in Spring, die den Kern der Implementierung grundlegender Daten darstellt.
Geburtsdatum:String
}
Die Implementierung von RuntimeWiringConfigurer ist der Kern der Implementierung von GraphQL zum Abrufen von Daten. Mit GraphQL können Persistenzschicht-Frameworks wie Mybatis/Jpa nicht direkt entfernt werden Daten aus der Datenbankunterstützung beziehen.
Das Folgende ist ein einfaches Beispiel:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-graphql</artifactId> </dependency>
Hier werden zwei DataFetcher-Objekte innerhalb der configure-Methode definiert, um anzugeben, wie Autor und allAuthors Daten abfragen. Es ist ersichtlich, dass die Daten weiterhin über JPA abgefragt werden.
GraphQL-Controller definieren
Wir definieren GraphQLController, um Eingabeparameter von Webanfragen zu empfangen. Das Beispiel lautet wie folgt:
@Component public class AuthorWiring implements RuntimeWiringConfigurer { private final AuthorRepository authorRepository; public AuthorWiring(AuthorRepository authorRepository) { this.authorRepository = authorRepository; } @Override public void configure(RuntimeWiring.Builder builder) { builder.type("Query", typeWiring -> typeWiring .dataFetcher("allAuthors", environment -> authorRepository.findAll()) .dataFetcher("author", environment -> authorRepository.getReferenceById(environment.getArgument("id"))) } }
Das GraphQL-Objekt im Code ist der Einstiegspunkt für die Ausführung von Abfragen, aber GraphQL verfügt nur über einen privaten Konstruktor Es kann nicht direkt injiziert werden. GraphQL-Objekte müssen durch Injektion von GraphQlSource abgerufen werden.
Beachten Sie, dass wir in GraphQL nur String zum Empfangen von Parametern verwenden können und keine Modellobjekte verwenden können. Dies liegt daran, dass die Graph-Anforderungsparameter keine JSON-Strukturen sind.
Diagrammanfrage testen
Wir erstellen eine graphql.http-Datei, um HTTP-Anfragen in der Idee auszuführen
### POST-Anfrage mit JSON-Body sendenPOST http://localhost:8080/graphql/query
Inhaltstyp: application/json{Autor(id: 1) {id
Geburtsdatum
Vorname
Nachname}
allAuthors {
}
### POST-Anfrage mit JSON-Text senden
POST http://localhost:8080 /graphql/query
Content-Type: application/json
{id
Geburtsdatum
Vorname
Nachname}
}
Führen Sie die Abfrage von Autor (ID: 1) aus und Sie können die normalen Rückgabeergebnisse sehen. Wenn wir nur die Felder „Vorname“ und „Nachname“ benötigen, entfernen Sie einfach die ID und das Geburtsdatum aus den Eingabeparametern der Anfrage, ohne den Back-End-Code zu ändern.
Das obige ist der detaillierte Inhalt vonWie SpringBoot GraphQL zur Entwicklung einer Web-API verwendet. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!